本文转至 余子越的博客 ,文章 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 文档地址
- 官网 文档地址 里面包含各种语言的版本
- Python 版本 英文文档地址
- Python 版本 中文文档地址1,中文翻译属于网友个人翻译。
- Python 版本 中文文档地址2,中文翻译属于网友个人翻译。
- Python 版本 接口文档地址
本文转至 余子越的博客 ,文章 Selenium 上手入门,欢迎访问yuchaoshui.com 了解更多信息!