硒在最近的发展中被广泛应用,因为它以前没有被使用过,并且已经走了太多的坑。这是一张唱片。
301_2@
配置要点:
1.Web驱动程序应该与浏览器版本相对应,chrome使用chrome驱动程序和chrome浏览器,Firefox使用geckodrive和Firefox浏览器
2.支持headless:本地开发使用mac环境,默认支持;linux需要安装xvf8(虚拟GUI)
3.maven项目构建,使用selenium-3.9.1或者最新版本
4.linux配置参考:chrome: ; firefox:
1.系统环境变量配置:webdriver.chrome.driver=DRIVER_PATH
2.常用options配置:
3.webdriver实例化:
301_2@
1.系统环境变量配置:webdriver.gecko.driver=DRIVER_PATH
2.常用options配置:
preference配置:
3.webdriver实例化:
4.注意:默认加载会屏蔽部分请求(js请求等)
301_2@
1.获取页面:driver.get(url);
2.关闭页面:driver.close(); 关闭进程:driver.quit();
1.线程强制休眠等待,Thread.sleep(3000);
2.隐式等待(全局等待),为所有操作设置等待时间,超时抛出异常;
3.可以为单个操作设置显式等待(可控等待,推荐使用)、等待触发事件和等待时间,可以自定义事件,可以随时间抛出异常
String page = driver.getPageSource();
String url = driver.getCurrentUrl();
WebElement element = driver.findElement(By.id("xx"));
element.sendKeys("test");
element.click();
element.sendKeys(Keys.BACK_SPACE);
1.窗口操作
2.表单操作,frame切换需要从外向内一层一层获取,可根据pageSource处理
3.弹窗操作
String proxyServer = "1.2.3.4:666" Proxy proxy = options.setProxy(proxy);
使用browsermobproxy做代理(或其他代理)
本地代理可单独做分布式部署,多节点,使用zk管理
1.chrome扩展:无法在headless模式下使用加载扩展,尚未解决
chromium虽然是多进程执行,但是js引擎是单线程,同时打开多个窗口,只会加载一个页面,直到加载结束或打开下一个窗口才会去加载下一个页面,参考(
firefox可以同时加载多个窗口的页面,同时会默认屏蔽一些请求
屏蔽某些网页加载(设置header同理)
1.通过代理设置,browsermobserver
2.通过拓展设置,暂时没整透
1.采用正确连接方式
301_2@
使用grid启动多个节点
注意:单节点使用多线程时,最好使用geckodriver,chromium的js引擎是单线程执行的