Selenium使用总结(Java版本)

硒在最近的发展中被广泛应用,因为它以前没有被使用过,并且已经走了太多的坑。这是一张唱片。

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:

chrome启动参数参考:

1.系统环境变量配置:webdriver.chrome.driver=DRIVER_PATH

2.常用options配置:

3.webdriver实例化:

301_2@

1.系统环境变量配置:webdriver.gecko.driver=DRIVER_PATH

2.常用options配置:

preference配置:

3.webdriver实例化:

System.setProperty("webdriver.gecko.driver",env.getProperty("path.gecko.driver" WebDriver webDriver = FirefoxOptions options = options.addArguments("--headless"); FirefoxProfile profile = profile.addExtensions( File(env.getProperty("path.chrome.proxy")));增加代理扩展 profile.setPreference("permissions.default.image",2);不显示图片 webDriver = } } 关闭webDriver (webDriver != }
WebDriverWait wait = WebDriverWait(webDriver,60); wait.until(ExpectedConditions.presenceOfElementLocated(By.id("xx"))); WebElement frame = wait.until((ExpectedCondition) driver ->= driver.findElement(By.id("iframepage"
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.窗口操作

String handle = driver.getWindowHandle(); Set handles = driver.getWindowHandles(); (! driver.switchTo().window(h); } }

2.表单操作,frame切换需要从外向内一层一层获取,可根据pageSource处理

3.弹窗操作

 

String proxyServer = "1.2.3.4:666" Proxy proxy = options.setProxy(proxy);

使用browsermobproxy做代理(或其他代理)

BrowserMobProxyServer bmpServer = bmpServer.setChainedProxy( InetSocketAddress("proxy.com",222)); bmpServer.chainedProxyAuthorization("user","pwd",AuthType.BASIC); bmpServer.setTrustAllServers(); bmpServer.start(11112); String proxyServer = "localhost:11112" Proxy proxy = options.setProxy(proxy);

本地代理可单独做分布式部署,多节点,使用zk管理

1.chrome扩展:无法在headless模式下使用加载扩展,尚未解决

chromeOptions.addExtensions( File(env.getProperty("path.chrome.proxy")));

chromium虽然是多进程执行,但是js引擎是单线程,同时打开多个窗口,只会加载一个页面,直到加载结束或打开下一个窗口才会去加载下一个页面,参考(

firefox可以同时加载多个窗口的页面,同时会默认屏蔽一些请求

屏蔽某些网页加载(设置header同理)

1.通过代理设置,browsermobserver

BrowserMobProxy server = server.blacklistRequests("http://.*\\.blacklist.com/.*",200); server.setBlacklist();

2.通过拓展设置,暂时没整透

1.采用正确连接方式

301_2@

使用grid启动多个节点

注意:单节点使用多线程时,最好使用geckodriver,chromium的js引擎是单线程执行的

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...