Selenium使用总结(Java版本)

摘要:
=Null){14webDriver.quit();15}16}3。gecko项目使用1.系统环境变量配置:webdriver。gko。driver=driver_PATH2.公共选项配置:首选项配置:3.webdriver实例化:1//设置系统环境变量2System。setProperty;3WebDriverwebDriver=null;4try{5Firefox Options Options=newFirefox Options();6options.addArguments;//无浏览器模式7Firefox Profile=newFirefox Profile();8profile.addExtensions;//添加代理扩展9profile.setPreference;//不显示图像10options.setProfile;11//实例化12webDriver=newFirefox Driver;13}捕获{14e.printStackTrace();15}最后{16//使用后,如果(webDriver!=nui-ll){18webDriver.quit();19}20}4。注意:默认加载将屏蔽一些请求4。Selenium项目使用的基本操作参考:www.cnblogs。com/林新萌/

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

1.环境配置

配置要点:

1.Web驱动程序应该与浏览器版本相对应,chrome使用chrome驱动程序和chrome浏览器,Firefox使用geckodrive和Firefox浏览器

2.支持headless:本地开发使用mac环境,默认支持;linux需要安装xvf8(虚拟GUI)

3.maven项目构建,使用selenium-3.9.1或者最新版本

4.linux配置参考:chrome:blog.csdn.net/qq_39802740… ; firefox:blog.csdn.net/u014283248/…www.xnathan.com/2017/12/04/…

2.chromium项目使用

chrome启动参数参考:peter.sh/experiments…

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

2.常用options配置:

Selenium使用总结(Java版本)第1张

3.webdriver实例化:

 1 //设置系统环境变量
 2 System.setProperty("webdriver.chrome.driver", env.getProperty("path.chrome.driver"));
 3 WebDriver webDriver = null;
 4 try{
 5     ChromeOptions options = new ChromeOptions();
 6     options.addArguments("--headless"); //无浏览器模式
 7     options.addExtensions(new File(env.getProperty("path.chrome.proxy")));//增加代理扩展
 8     webDriver = new ChromeDriver(options);//实例化
 9 }catch(Exception e){
10     e.printStackTrace();
11 }finally{
12     //使用完毕,关闭webDriver
13     if(webDriver != null){
14         webDriver.quit();
15     }
16 }

3.gecko项目使用

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

2.常用options配置:

Selenium使用总结(Java版本)第2张

preference配置:

3.webdriver实例化:

 1 //设置系统环境变量
 2 System.setProperty("webdriver.gecko.driver", env.getProperty("path.gecko.driver"));
 3 WebDriver webDriver = null;
 4 try{
 5     FirefoxOptions options = new FirefoxOptions();
 6     options.addArguments("--headless"); //无浏览器模式
 7     FirefoxProfile profile = new FirefoxProfile();
 8     profile.addExtensions(new File(env.getProperty("path.chrome.proxy")));//增加代理扩展
 9     profile.setPreference("permissions.default.image", 2);//不显示图片
10     options.setProfile(profile);
11     //实例化
12     webDriver = new FirefoxDriver(options);
13 }catch(Exception e){
14     e.printStackTrace();
15 }finally{
16     //使用完毕,关闭webDriver
17     if(webDriver != null){
18         webDriver.quit();
19     }
20 }

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

4.Selenium项目使用基本操作

参考:www.cnblogs.com/linxinmeng/…

一、WebDriver实例化:见2、3

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

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

二、加载等待:页面初始加载或元素加载时使用,三种方式:

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

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

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

WebDriverWait wait = new WebDriverWait(webDriver, 60);//初始化等待60s
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("xx")));//等待xx元素出现
//自定义等待事件
WebElement frame = wait.until((ExpectedCondition<WebElement>) driver -> {
                WebElement element = driver.findElement(By.id("iframepage"));
                return element;
            });
三、获取内容
1 String page = driver.getPageSource();//获取网页全部信息
2 String url = driver.getCurrentUrl();//获取当前页url
3 WebElement element = driver.findElement(By.id("xx"));//获取元素
4 element.sendKeys("test");//设置元素值
5 element.click();//点击元素
6 element.sendKeys(Keys.BACK_SPACE);//空格键盘事件模拟
四、切换窗口、表单、弹窗:

1.窗口操作

 1 String handle = driver.getWindowHandle();//获取当前窗口句柄
 2 Set<String> handles = driver.getWindowHandles();//获取全部窗口句柄
 3 //切换到另一窗口
 4 for(String h : handles){
 5     if(!h.equals(handle)){
 6         driver.switchTo().window(h);//切换窗口
 7     }else{
 8         driver.close();
 9     }
10 }

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

Selenium使用总结(Java版本)第3张

3.弹窗操作

 Selenium使用总结(Java版本)第4张

6. 代理使用

一、无auth验证代理
1 String proxyServer = "1.2.3.4:666";
2 Proxy proxy = new Proxy().setHttpProxy(proxyServer).setSslProxy(proxyServer);
3 options.setProxy(proxy);
二、需auth验证代理

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

 1 //创建一个本地代理
 2 BrowserMobProxyServer bmpServer = new BrowserMobProxyServer();
 3 bmpServer.setChainedProxy(new InetSocketAddress("proxy.com",222));//代理地址端口
 4 bmpServer.chainedProxyAuthorization("user","pwd",AuthType.BASIC);//代理用户名密码
 5 bmpServer.setTrustAllServers(true);//信任所有服务
 6 bmpServer.start(11112);//启动一个本地代理服务,并设置端口为11112,访问地址:localhost:11112
 7 //使用本地代理
 8 String proxyServer = "localhost:11112";
 9 Proxy proxy = new Proxy().setHttpProxy(proxyServer).setSslProxy(proxyServer);
10 options.setProxy(proxy);

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

三、使用浏览器扩展extensions

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

chromeOptions.addExtensions(new File(env.getProperty("path.chrome.proxy")));//代理扩展  需要在background.js配置代理账号密码后再打包

6.遇到的坑

一、页面加载慢:(需验证)

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

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

二、设置黑名单:屏蔽某些网页加载(设置header同理)

1.通过代理设置,browsermobserver

1 BrowserMobProxy server = new BrowserMobProxyServer();
2 server.blacklistRequests("http://.*\.blacklist.com/.*", 200);//方式1,设置单个黑名单
3 server.setBlacklist();//方式2,设置黑名单列表

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

三、bmp代理无法连接

1.采用正确连接方式

Selenium使用总结(Java版本)第5张

7.分布式

使用grid启动多个节点

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

免责声明:文章转载自《Selenium使用总结(Java版本)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【原】ASP.Net WebForm的发布(图解)uni-app实现弹窗遮罩下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

selenium实现淘宝的商品爬取

一、问题 本次利用selenium自动化测试,完成对淘宝的爬取,这样可以避免一些反爬的措施,也是一种爬虫常用的手段。本次实战的难点: 1.如何利用selenium绕过淘宝的登录界面 2.获取淘宝的页面内容实现翻页,并判断是否翻页成功。 3.获取每一页的信息,实现数据的抓取工作。  4.环境python3.6,对应的Chrome的webdriver驱动网址:...

Appium(九):Appium API(三) 滑动和拖拽、高级手势、手机操作

1. 滑动和拖拽 我们在做自动化测试的时候,有些按钮是需要滑动几次屏幕后才会出现,此时,我们需要使用代码来模拟手指的滑动,也就是接下来要学的滑动和拖拽了。 1.1 swipe滑动事件 从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动。 方法: driver.swipe(start_x, start_y, end_x, end_y, duratio...

chromium浏览器开发系列第三篇:chromium源码目录结构

上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流。 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠自己。官网只能作为一个参考。 Chromium结构相对两年前变化很大。目录结构依然很清晰,主要有三个部分(不包括其他的库):浏览器,渲染器,webkit。浏览...

Web自动化测试之playwright:概述

playwright是由微软开发的Web UI自动化测试工具, 支持Node.js、Python、C# 和 Java语言,本文将介绍playwright的特性以及它的简单使用。 目录 playwright特性 安装 命令行工具 脚本录制 打开网页 截图 同步和异步API 浏览器 浏览器上下文 多页面 断言 playwright特性 play...

设计模式之动态代理

在了解什么是动态代理模式,以及怎么实现动态代理模式之前,我们先明确一个场景,那就是当我们需要对一类实现类增加一些额外处理对其中的某些方法做一些增强时。譬如增加日志打印,参数校验,鉴权等。这些功能很重要,但是又具有一定的独立性(与业务代码不相关)。针对这种情况, 我们就可以采用动态代理模式来实现。 动态代理顾名思义,就是动态的对方法实现代理。要真正理解动态代...

使用selenium模拟登陆12306以及滑块验证

selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击,下拉等操作,同时还可以获取浏览器当前呈现的页面源码,做到可见即可爬。常常被运用于爬取javascript动态渲染的页面。 下面是其简单用法: 通过浏览器发起请求获取响应页面源码数据然后利用xpath进行数据提取 fromselenium import webdriver fr...