《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情

selenium

阅读:314756007    分享到

Jason Huggins 在 2004 年发起了 Selenium 项目,当时身处 ThoughtWorks 的他,为了不想让自己的时间浪费在无聊的重复性工作中,幸运的是,所有被测试的浏览器都支持 Javascript。Jason 和他所在的团队采用 Javascript 编写一种测试工具来验证浏览器页面的行为;这个 JavaScript 类库就是 Selenium core,同时也是 seleniumRC、Selenium IDE 的核心组件。Selenium 由此诞生。

关于 Selenium 的命名比较有意思,当时 QTP mercury 是主流的商业自化工具,是化学元素汞(俗称水银),而 Selenium 是开源自动化工具,是化学元素硒,硒可以对抗汞。

Selenium 1.0

selenium1.0 调用的是 JS,不足之处就是:不支持本机的键盘和鼠标的事件,不支持拓展脚本,不支持对话框、弹出框。

用简单的公式:

Selenium 1.0 = Selenium IDE + Selenium Grid + Selenium RC

Selenium IDE

Selenium IDE 是嵌入到 Firefox 浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。

Selenium Grid

Selenium Grid 是一种自动化的测试辅助工具,Grid 通过利用现有的计算机基础设施,能加快 Web-App 的功能测试。利用 Grid 可以很方便地实现在多台机器上和异构环境中运行测试用例。

Selenium RC

Selenium RC(Remote Control)是 Selenium 家族的核心部分。Selenium RC 支持多种不同语言编写的自动化测试脚本,通过 Selenium RC的服务器作为代理服务器去访问应用,从而达到测试的目的。

Selenium RC分为Client Libraries 和 Selenium Server。Client Libraries 库主要用于编写测试脚本,用来控制 Selenium Server 的库。Selenium Server负责控制浏览器行为。

所以,我们在学习 Selenium1.0 的时候,核心应该是学习 RC,它的工作原理是这样的:

在 2006 年的时候,Google 的工程师 Simon Stewart 发起了 WebDriver 的项目;因为长期以来 Google 一直是 Selenium 的重度用户,但却被限制在有限的操作范围内。

Selenium RC 是在浏览器中运行 JavaScript 应用,使用浏览器内置的 JavaScript 翻译器来翻译和执行 selenese 命令(selenese是Selenium命令集合)。

WebDriver 是通过原生浏览器支持或者浏览器扩展来直接控制浏览器。WebDriver 针对各个浏览器而开发,取代了嵌入到被测 Web 应用中的 JavaScript,与浏览器紧密集成,因此支持创建更高级的测试,避免了 JavaScript 安全模型导致的限制。除了来自浏览器厂商的支持之外,WebDriver 还利用操作系统级的调用,模拟用户输入。

Selenium 与 WebDriver 原是属于两个不同的项目,WebDriver 的创建者 Simon Stewart 早在 2009 年 8 月的一份邮件中解释了项目合并的原因。

Selenium 与 WebDriver 合并原因:为何把两个项目合并?部分原因是 WebDriver 解决了 Selenium 存在的缺点(例如能够绕过 JavaScript 沙箱,我们有出色的 API),部分原因是 Selenium 解决了 WebDriver 存在的问题(例如支持广泛的浏览器),部分原因是因为 Selenium 的主要贡献者和我都觉得合并项目是为用户提供最优秀框架的最佳途径。

Selenium 2.0

selenium2.0 调用的是浏览器,selenium2.0 基于 webdriver API 来模拟用户操作,直接交互操作的浏览器,因此速度更快,支持多种编程语言。

因为 Selenium 和 Webdriver 的合并,所以,Selenium 2.0 由此诞生。简单用公式表示为:

Selenium 2.0 = Selenium 1.0 + WebDriver

需要强调的是,在 Selenium 2.0 中主推的是 WebDriver,可以将其看作 Selenium RC 的替代品。因为 Selenium为了保持向下的兼容性,所以在Selenium 2.0中并没有彻底地抛弃Selenium RC。

所以,我们在学习 Selenium2.0 的时候,核心是学习 WebDriver。它的工作原理是这样的:

大概是在 2013 年的时候,那一年我刚开始深入的学习和使用 Selenium,我通过 Selenium 官方博客上了解到,Selenium团队将会在圣诞节发布Selenium3.0,然后,我开始期待即将到来的3.0版,后来就没有了后来,很多年过去了,依然没等到Selenium3.0。

直到 2016 年 7 月,Selenium3.0 悄悄发布第一个 beta 版。惊不惊喜,意不意外?他们是这么解释的:

“在 seleniumconf 2013,我们宣布,Selenium 的一个新的主要版本将在‘圣诞节’发布。幸运的是,我们从来没有说过哪个圣诞节,因为我们已经花了一段时间来做我们想做的所有改变!我们很兴奋地宣布第一个bate版--Selenium 3.0 - beta1 的发布。”

Selenium 3.0

selenium3.0 去掉了对 selenium RC 的支持,全面拥抱 java8,支持 macOS 的 safari 浏览器。

终于去掉了 RC,简单用公式表示为:

Selenium 3.0 = Selenium 2.0 - Selenium RC(Remote Control)

Selenium3.0 只支持 Java8 版本以上。

Selenium3.0 中的 Firefox 浏览器驱动独立了,以前装完 selenium2 就可以驱动 Firefox 浏览器了,现在和 Chrome一样,必须下载和设置浏览器驱动。

MAC OS 集成 Safari 的浏览器驱动。默认在/usr/bin/safaridriver 目录下。

只支持IE 9.0 版本以上。


如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论

user_image
庄文强
2020年3月7日 03:35 回复

selenium可以应付一些复杂的登录,qq空间的模拟登录我不会用requests,就用selenium。 缺点就是慢,不过如果不加载图片其实会快很多


user_image
朋克雪球兔
2019年12月28日 22:51 回复

小规模爬取可以用selenium,不用分析接口,分析js省很多事情,但是不稳定,速度慢,能直接爬接口谁去用selenium……


user_image
李国宝
2019年10月10日 21:24 回复

如果不用selenium,那ajax的数据怎么获取?用phantomjs?


user_image
Dirax
2019年3月30日 22:55 回复

可以selenium登录获取cookie再scrapy,目前就卡在一个cookie的处理上求帮助


user_image
MadStrawberry
2018年11月24日 20:03 回复

Selenium爬的话还抓前端元素容易改版,程序就用不了了,而找接口相对来说


user_image
陈诺
2018年10月3日 01:08 回复

大家要弄明白哟,博主这讲的 selenium 是放在自动化测试下面的,也就是说博主的意思是用selenium 做网页测试,为毛你们都在讨论爬虫,用 selenium 做什么是你们自己的事情,博主这个是在教大家用 selenium 操作网页,实现自动化,拜托!


user_image
多年微软MVP
2018年6月27日 07:48 回复

Selenium应付不了比较量大的爬取以及并发爬取, 不过一些好处在于可以辅助Request来进行一些比较复杂的爬取工作,虽然并无卵用


user_image
ChroniCat
2018年10月5日 14:56

selenium不算爬虫啦,本来用于测试的东西被用在了爬虫上,再说,新手用这个技术没长进,不好的不好的。


user_image
Ra酱
2019年7月5日 18:17

selenium本身应对的就是测试 自然要有web的全套功能 而爬虫是为了获取信息 最好是找到那个一发入魂的数据交互 我在用的时候会看场景 认证复杂的场景不妨用selenium处理 到提取数据的阶段用requests 这个思路在快去开发的时候挺正常的而且已经有人糅合这两者搞出来了一个requestium


user_image
xxxxcxxxx
2018年6月12日 02:05 回复

selenium慢是真的


user_image
看5212
2019年6月12日 09:11

难慢是慢,但是这玩意简单啊,而且随机时间之后模拟真实点击,不容易被ban


user_image
nekocode
2020年1月21日 13:50

selenium爬取效率不高是实话,不过可以优化,禁止加载图片和javascipt脚本可以进一步加快爬虫速度