python自动打开浏览器为什么很慢
简介
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:
1、测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。
2、测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
同时还可以获取浏览器当前呈现的页面的源代码 ,做到可见即可爬。 所以Selenium现在被广泛用于Python爬虫
功能
- 框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。
- 使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。
- 使用简单,可使用Java,Python等多种语言编写用例脚本。
优势
1、模拟真实用户操作,支持多平台,可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行
2、可以从终端用户的角度来测试应用程序。通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性
3、测试脚本(HTML 的表布局编写的,要么是使用一种受支持的编程语言编写的)可以在受支持的浏览器中运行
使用Selenium
1、创建一个c#控制台程序
2、使用Nuget搜索以下依赖库,需要引用的核心库是Selenium.RC,Selenium.Support,Selenium.WebDriver
然后再需要引用 浏览器驱动库,这里我以IE浏览器为例,Chrome使用方式跟IE是一样的,程序包名称为Selenium.WebDriver.ChromeDriver。
3、在Main函数中输入以下代码
这里使用用了using(){},表示执行完{}里面的代码之后会自动释放括号内的代码资源。
(用于连接数据库的多,这样的话就可以不用写代码去关闭数据库连接了)
运行,会弹出IE浏览器,网页加载完成后,浏览器会自动关闭。控制台输入结果如下
这样我们就可以轻松的获取动态渲染页面的源码。
基本用法:
通过id获取元素
通过类名获取元素
通过标签名获取元素
通过名字(name属性)获取元素
通过链接文本获取元素
通过部分链接文本获取元素
通过CSS选择器获取元素
通过XPath来获取元素
在浏览器上打开开发者工具,然后点击要查看xpath的元素
点击后会自动定位到元素代码,选中右键 -->点击Copy,复制需要的相应内容,我这里用的谷歌,不同浏览器可能复制xpath的位置会不同
模拟鼠标点击元素
鼠标双击控件
鼠标单击拖动
下面的代码演示的是从第1个控件单击并拖动至第4个控件,并选中这4个控件,如下所示(点击长按 -->拖动 --> 松手 )
移动鼠标到指定控件
鼠标拖放
拖放操作因操作简单易懂,在Web页面中应用也越来越广,特别是一些银行页面中。以下代码演示如何通过Selenium API来完成操作
- 方法一:通过方法DragAndDrop()实现
- 方法二:通过方法MoveToElement()实现
- 方法三:通过方法MoveByOffset()实现
拖动进度条或滑块
单击鼠标右键菜单
在部分网站中会有一些操作需要通过右键菜单来实现,对于这种情况Selenium API也提供一种方法ContextClick()方法,详细演示如下所示:
弹框处理
类似下图所示的警告框,无法通过前端工具定位,需要跳转到弹框,然后再对其操作
3种弹框:
- 警告类弹框,Alert():一个按钮
- 确认类弹框,Confirmation:一个确认,一个取消
- 消息类弹框,Prompt:一个输入框, 一个确认,一个取消
跳转到弹框:
- SwitchTo().Alert()
常用的弹框处理方法:
- Text 获取警告框的内容
- Accept() 相当于点击确认按钮
- Dismiss() 相当于点击取消按钮
- SendKeys() 向警告框输入值
执行JS
当点击的元素包含href跳转的时候可以使用JavaScript来进行点击操作
获取元素的值和属性
页面导航
模拟键盘 SendKeys.SendWait()用法
//为弹出windows文件选择框写入地址
Thread.Sleep(1000);
SendKeys.SendWait(@path);//path是传入的路径
Thread.Sleep(1000);
SendKeys.SendWait(@"{Enter}");
获取table中tr的数据
iFrame的切换
嵌套的iFrame操作
Selenium启动浏览器时,默认是打开一个新用户,不会加载原有的配置以及插件,所以每次都需要登录,有的可能识别出时自动而是软件还会需要手机号验证码。
两种解决办法(我这里以谷歌浏览器为例):
1、加载浏览器配置文件(我试了这个方法没有效果,有尝试成功过的欢迎分享~)
①打开谷歌浏览器,输入chrome://version/,得到个人资料路径地址
②这里打开阿里云,但是打开之后还是需要输入账号密码登录,没有加载浏览器配置文件,百度到有人说登录进入之后就不需要再次登录了,但是我试过没有效果(执行脚本时需要关掉谷歌浏览器,不然可能会报错)
还有一种方式,打开时指定chrome驱动
①右键谷歌 ---》 属性,复制起始位置中的地址
②配置本地谷歌环境变量;
此电脑 --》 右键属性 --》点击高级系统设置 --》环境变量 --》选中Path,点击编辑 --》点击新建,将刚刚复制的路径粘贴上去一路点击确认下来即可
最后打开刚刚复制的路径,将下载的谷歌驱动 chromedriver.exe粘贴
②
这里我一直报C:UsersAdministratorAppDataLocalGoogleChromeApplicationchromedriver.exe路径不存在,但是这个是有的
2、使用Debug方式启动浏览器,使用Selenium连接到一个已打开的浏览器
<< 上一篇
下一篇 >>