Selenium 教程
什么是 selenium
selenium 是一个用于 Web 应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括 IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera 等。selenium 是一套完整的 web 应用程序测试系统,包含了测试的录制(selenium IDE), 编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。
Selenium 的核心 Selenium Core 基于 JsUnit,完全由 JavaScript 编写,因此可以用于任何支持 JavaScript 的浏览器上。
selenium 可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决 JavaScript 渲染问题。
这里要说一下比较重要的 PhantomJS,PhantomJS 是一个而基于 WebKit 的服务端 JavaScript API, 支持 Web 而不需要浏览器支持,其快速、原生支持各种 Web 标准:Dom 处理,CSS 选择器,JSON 等等。PhantomJS 可以用用于页面自动化、网络监测、网页截屏,以及无界面测试
Selenium 特点
- 本身不是测试工具,只是模拟浏览器操作的工具
- 背后有 Google 维护源代码
- 支持全部主流的浏览器
- 支持主流的编程语言,包括:Java、Python、C#、PHP、Ruby、JavaScript 等
- 工具很小,可以实现对测试项目的定制测试方案
- 基于标准的 WebDriver 语法规范
Selenium 的最简脚本
# 声明一个司机,司机是个Chrome类的对象
driver = webdriver.Chrome()
# 让司机加载一个网页
driver.get("http://demo.ranzhi.org")
# 给司机3秒钟去打开
sleep(3)
# 开始登录
# 1\. 让司机找用户名的输入框
we_account = driver.find_element_by_css_selector('#account')
we_account.clear()
we_account.send_keys("demo")
# 2\. 让司机找密码的输入框
we_password = driver.find_element_by_css_selector('#password')
we_password.clear()
we_password.send_keys("demo")
# 3\. 让司机找 登录按钮 并 单击
driver.find_element_by_css_selector('#submit').click()
sleep(3)
Selenium 的缺点:
- 速度慢。每次运行爬虫都打开一个浏览器,如果没有设置,还会加载图片、JS 等等一大堆东西;
- 占用资源太多。有人说,把 Chrome 换成无头浏览器 PhantomJS,原理都是一样的,都是打开浏览器,而且很多网站会验证参数,如果对方看到你是以 PhantomJS 去访问,会 BAN 掉你的请求,然后你又要考虑更换请求头的事情,事情复杂程度不知道多了多少,为啥学 Python?因为 Python 简单啊,如果有更快、更简单的库可以实现同样的功能,为什么不去使用呢?
- 对网络的要求会更高。 Selenium 加载了很多可能对您没有价值的补充文件(如 css,js 和图像文件)。 与仅仅请求您真正需要的资源(使用单独的 HTTP 请求)相比,这可能会产生更多的流量。
- 爬取规模不能太大。你有看到哪家公司用 Selenium 作为生产环境吗?
- 难。学习 Selenium 的成本太高,只有我一个人觉得 Selenium 比 Requests 难一百倍吗?