加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Selenium使用总结(Java版本)

发布时间:2020-12-14 06:13:22 所属栏目:Java 来源:网络整理
导读:硒在最近的发展中被广泛应用,因为它以前没有被使用过,并且已经走了太多的坑。这是一张唱片。 配置要点: 1.Web驱动程序应该与浏览器版本相对应,chrome使用chrome驱动程序和chrome浏览器,Firefox使用geckodrive和Firefox浏览器 2.支持headless:本地开发

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

配置要点:

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实例化:

System.setProperty("webdriver.chrome.driver",env.getProperty("path.chrome.driver" WebDriver webDriver = ChromeOptions options = options.addArguments("--headless"); options.addExtensions( File(env.getProperty("path.chrome.proxy"))); webDriver = ChromeDriver(options); } } (webDriver != }

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 != }

4.注意:默认加载会屏蔽部分请求(js请求等)

参考:

1.获取页面:driver.get(url);

2.关闭页面:driver.close(); 关闭进程:driver.quit();

1.线程强制休眠等待,Thread.sleep(3000);

2.隐式等待(全局等待),为所有操作设置等待时间,超时抛出异常;

3.可以为单个操作设置显式等待(可控等待,推荐使用)、等待触发事件和等待时间,可以自定义事件,可以随时间抛出异常

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可以同时加载多个窗口的页面,同时会默认屏蔽一些请求

1.通过代理设置,browsermobserver

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

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

1.采用正确连接方式

使用grid启动多个节点

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读