余子越的博客
Toggle navigation
余子越的博客
主页
计算机网络
大数据分析
系统与工具
编程之路
容器引擎
作者
归档
标签
Selenium 上手入门
2018-09-02 13:35:25
140
0
0
yuziyue
[toc] # 一、简要介绍 Selenium 是一个优秀的web自动化测试工具,利用各种浏览器的驱动(geckodriver、chromedriver、MicrosoftWebDriver.exe、),模拟人操作浏览器(Firefox、Chrome、Edge、Safari)。同时也可以用做简单的爬虫,可以解决需要复杂交互的页面爬取需求。 <br> Selenium 通常需要图形化界面的支持,需要提前安装好浏览器。如果需要更好的性能,则可以选择 PhantomJS, PhantomJS 是一个没有界面的浏览器,有着非常强大的功能。但是现在Selenium已经不再支持PhantomJS了,但是想Firefox、Chrome这些浏览器可以开启 "无头" 模式,也就是不开启图形界面,直接在后台跑。 <br> # 二、系统环境 - 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,他们可以在后文给出的地址里面找到。 <br> 检验这些包是否安装正确的方式是: 在命令行敲命令是否能用 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驱动下载地址 - Firefox [驱动地址](https://github.com/mozilla/geckodriver/releases) - Chrome [驱动地址](https://chromedriver.storage.googleapis.com/index.html) - Edge [驱动地址](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads) - Safari 不再需要驱动,可在mac OS上直接运行 - PhantomJS [下载地址](http://phantomjs.org/download.html) ## 2、Selenium 文档地址 - 官网 [文档地址](http://www.seleniumhq.org/docs/) 里面包含各种语言的版本 - Python 版本 [英文文档地址](http://selenium-python.readthedocs.io/) - Python 版本 [中文文档地址1](http://www.cnblogs.com/taceywong/p/6602927.html),中文翻译属于网友个人翻译。 - Python 版本 [中文文档地址2](https://python-selenium-zh.readthedocs.io/zh_CN/latest/),中文翻译属于网友个人翻译。 - Python 版本 [接口文档地址](https://seleniumhq.github.io/selenium/docs/api/py/api.html) <br><br><br>
上一篇:
django 多人协作配置文件版本控制
下一篇:
Scrapy 上手入门
0
赞
140 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
文档导航