selenium 3.8.0 入门第一课

作者: 别摸我蒙哥 | 来源:发表于2017-12-21 19:05 被阅读71次

背景:在爬虫过程中,关键一课就是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

相关文章

网友评论

    本文标题:selenium 3.8.0 入门第一课

    本文链接:https://www.haomeiwen.com/subject/zqhawxtx.html