selenium 3.8.0 入门第一课
背景:在爬虫过程中,关键一课就是selenium获取页面信息;selenium 以其优越的性能和封装,可覆盖大部分浏览器,并兼容多种语言。
本文就纯粹将 selenium 的使用(结合 python)
一、python 环境中安装方法
selenium 3.8.0 支持的 python 版本:Python 2.7,3.4+
如果你已经安装了 pip,直接使用最简单的命令完成安装或更新:
pip install -U selenium
二、Driver 的使用
Selenium 入门的第一课就是通过Driver 打开浏览器,并输入网址
Selenium 需要一个 驱动器(Driver)来映射指定的浏览器。
比如 Firefox 需要 geckodriver 来映射,Chrome 需要 chromedriver 来映射。
往往这里是执行第一段代码最常见的问题,针对不同的系统,win 有解决方案,Mac 也有,会在另一篇文章中单独说明。
Example 0:
- 打开 Chrome 浏览器
- 加载给定的 URL 界面
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://blog.csdn.net/csdnnews/article/details/78859701')
Example 1:
- 打开 Chrome 浏览器
- 加载 csdn 博客文章
- 找到搜索框,输入内容并搜索
- 关闭浏览器
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('http://blog.csdn.net/csdnnews/article/details/78859701')
# 搜索输入框
elem = driver.find_element_by_class_name('input_search')
elem.send_keys('google')
elem.send_keys(Keys.RETURN)
driver.close()
print('Browser is closed')
Example 2:
Selenium 经常用于基础测试——web应用,下面就结合 Python 标准测试库 unittest 展开
import time
import unittest
from selenium import webdriver
class GoogleTestCase(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Chrome()
self.addCleanup(self.browser.quit)
def testPageTitle(self):
self.browser.get('http://www.baidu.com')
self.assertIn('百度', self.browser.title)
time.sleep(3)
if __name__ == '__main__':
unittest.main(verbosity=2)
看完上面三段代码,对于第一次接触的同学来说,简直不知道再说什么。
有点代码基础的,把代码原样敲一边,就会出来结果,也可以打断点看每一个参数变化情况。(一定不要复制代码,这是学习的禁忌)
基础稍微薄弱的同学接着步伐往下看。
三、代码详细解释
上面的三个 Example 涉及了 Python 的 module 等内容,比较复杂,祭出一段最简单的代码,以此展开讲解
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('http://blog.csdn.net/csdnnews/article/details/78859701')
assert 'CSDN' in driver.title
# 搜索输入框
elem = driver.find_element_by_class_name('input_search')
elem.clear()
elem.send_keys('google')
elem.send_keys(Keys.RETURN)
driver.quit()
print('Browser is closed')
从第一行开始:
- 首先导入对应的包
from selenium import webdriver
- 然后创建一个 Chrome 的驱动器实例
driver = webdriver.Chrome()
- driver.get 方法会根据 URL 导航到页面
WebDriver 会等待界面完全加载完毕才会进行下一步
driver.get('http://blog.csdn.net/csdnnews/article/details/78859701')
- 下一行就是验证 页面标题(title)中是否包含 Python
assert 'CSDN' in driver.title
- 查找元素
WebDriver 提供了许多方式去查找元素,使用类似于 find_element_by_* 开头的方法。
比如,输入框可以通过 name 来定位,使用 find_element_by_name 方法,具体如下一行代码所示:
elem = driver.find_element_by_class_name('input_search')
-
现在已经多定了文本输入框,下一步,开始发送值进入输入框
这里类似于我们通过键盘来输入文本。
特殊的字符可以通过 Keys 类来载入,比如回车键,删除键,换行键等等。 import selenium.webdriver.common.keys
一般处理文本框的做法为三步:
a) 清除文本框内容(部分情况下文本框会有默认值,需要清除)
elem.clear()
b) 传入需要输入的文本内容
elem.send_keys('google')
c) 如果有特殊字符,再次通过 Keys 来输入
elem.send_keys(Keys.RETURN) -
最后,关闭浏览器
关闭浏览器有两个方法 driver.close() 和 driver.quit(),前者只是关闭一个标签页,后者是退出整个浏览器。
推荐使用 第二种方法,防止关闭错误。
driver.quit()
小结
Selenium 的所有操作过程都可以理解为拟人化操作。
还是根据上面的代码,我们可以分析每个步骤。
先回顾代码的功能:在 CSDN 中搜索内容。
具体步骤可以分为:打开浏览器-->输入网址,进入界面-->选择搜索栏-->输入搜索内容-->回车搜索-->获得搜索结果,关闭浏览器。
浏览器操作 | 代码解释 |
---|---|
打开浏览器 | driver = webdriver.Chrome() |
输入网址,进入界面 | driver.get('http://blog.csdn.net/csdnnews/article/details/78859701') |
选择搜索栏 | elem = driver.find_element_by_class_name('input_search') |
输入文本内容 | elem.clear() elem.send_keys('google') |
回车搜索 | elem.send_keys(Keys.RETURN) |
关闭浏览器 | driver.quit() |
这样看来,整个代码就清晰很多
参考文章:
https://pypi.python.org/pypi/selenium
http://selenium-python.readthedocs.io/getting-started.html