Selenium 上手入门


本文转至 余子越的博客 ,文章 Selenium 上手入门,欢迎访问yuchaoshui.com 了解更多信息!

一、简要介绍

   Selenium 是一个优秀的web自动化测试工具,利用各种浏览器的驱动(geckodriver、chromedriver、MicrosoftWebDriver.exe、),模拟人操作浏览器(Firefox、Chrome、Edge、Safari)。同时也可以用做简单的爬虫,可以解决需要复杂交互的页面爬取需求。

   Selenium 通常需要图形化界面的支持,需要提前安装好浏览器。如果需要更好的性能,则可以选择 PhantomJS, PhantomJS 是一个没有界面的浏览器,有着非常强大的功能。但是现在Selenium已经不再支持PhantomJS了,但是想Firefox、Chrome这些浏览器可以开启 “无头” 模式,也就是不开启图形界面,直接在后台跑。

二、系统环境

  • Python: 2.7 3.4+。
  • Selenium:2.0, 使用pip安装。
  • 浏览器:firefox、chrome等,最好更新成最新版本。
  • 浏览器驱动:最好最新版本。

三、环境搭建

  不同的系统环境搭建的过程相应不同,所以需要这里只给出相应的建议和方向,具体的方法需要单独Google搜索学习,本博客其他博文也会给出部分的安装教程。

  • 操作系统的选择:Ubuntu、CentOS都行,版本最好新一点的,相信我,高版本的系统可以让你省去很多事情,这非常重要。 本文使用 Fedora release 27 (Twenty Seven) 发行版本

  • Python 的选择:最好 3.6 或者 2.7,本文使用的是系统自带的3.6.2版本, 高版本的Python可以自行搜索博文安装。

  • 浏览器的选择:浏览器可以使用默认的火狐浏览器,也可以使用Chrome,Chrome需要使用rpm或者deb包自行安装。

  • 驱动的选择:驱动安装非常简单,就是下载相应的驱动文件,放到系统的某一个目录,然后将该目录加入系统的环境变量中,记住修改环境变量后要使其生效(重新登录、souce /etc/profile等),各个驱动的名字分别为geckodriver、chromedriver、MicrosoftWebDriver.exe,他们可以在后文给出的地址里面找到。


  检验这些包是否安装正确的方式是: 在命令行敲命令是否能用 tab 键补全即可验证。

四、上手例子

1、网页交互

  下面程序用于模拟人在浏览器中搜索关键词并保存页面源码。

#!/usr/bin/env python
# _*_ coding:utf-8 _*_


from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from lxml import etree


class BaiduSearch(object):
    def __init__(self, url):
        self.url = url
        self.driver = webdriver.Chrome()

    def search(self, keyword):
        self.driver.get(self.url)
        elem = self.driver.find_element_by_name("wd")
        elem.clear()
        elem.send_keys(keyword)
        elem.send_keys(Keys.RETURN)

    def save_txt(self, filename):
        with open(filename, 'w') as f:
            f.write(self.driver.page_source)
        tree = etree.HTML(self.driver.page_source)
        title = tree.xpath('//title/text()')[0]
        print(title)

    def __del__(self):
        time.sleep(5)
        self.driver.quit()


def main():
    url = 'https://www.baidu.com/'
    browser = BaiduSearch(url)
    browser.search('余子越的博客')
    txt = 'baidu.txt'
    browser.save_txt(txt)


if __name__ == '__main__':
    main()

  这个例子的操作很简单,首先打开浏览器,输入百度URL,搜索 余子越的博客,然后把搜索结果保存。这里的查找页面元素的方法很多,不一定要选某一种,选择最合适的即可,我通常青睐于 xpath 。

2、高效爬虫

  上面的方式有一个缺点,就是需要打开图形界面,为了提高效率,有两种方法可提供无图形界面的浏览器。

  • a 、利用 xvfbwrapper 模块,产生一个虚拟窗口,浏览器不会在当前窗口显示。首先安装模块。
# yum install xorg-x11-server-Xvfb
# pip install xvfbwrapper
#!/usr/bin/env python
# _*_ coding:utf-8 _*_


from selenium import webdriver
import time
from lxml import etree
from xvfbwrapper import Xvfb


class BaiduSearch(object):
    def __init__(self, url):
        self.url = url
        self.driver = webdriver.Chrome()

    def search(self, keyword):
        self.driver.get(self.url)
        elem = self.driver.find_element_by_name("wd")
        elem.clear()
        elem.send_keys(keyword)
        elem.click()

    def save_txt(self, filename):
        with open(filename, 'w') as f:
            f.write(self.driver.page_source)
        tree = etree.HTML(self.driver.page_source)
        title = tree.xpath('//title/text()')[0]
        print(title)

    def __del__(self):
        time.sleep(5)
        self.driver.quit()


def main():
    url = 'https://www.baidu.com/'
    xvfb = Xvfb(width=1280, height=720)
    xvfb.start()
    browser = BaiduSearch(url)
    browser.search('余子越的博客')
    txt = 'baidu.txt'
    browser.save_txt(txt)
    xvfb.stop()


if __name__ == '__main__':
    main()
  • b 、使用Chrome()的headless参数,但是这个需要使得chrome的版本比较新。详细的使用情况可以查看api文档。

五、常用API

  常用API见文档汇总部分。

六、文档汇总

1、Driver驱动下载地址

2、Selenium 文档地址


本文转至 余子越的博客 ,文章 Selenium 上手入门,欢迎访问yuchaoshui.com 了解更多信息!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值