在 RHEL 7 上安装 Selenium Python 环境

本文介绍在RHEL上安装 Selenium Python环境,执行无图形界面的浏览器自动化任务。

虚拟的图形界面 xvfb 或 xvnc

Linux 环境下使用虚拟的显示来运行普通版本的Firefox 或 chrome 浏览器。网上一般会推荐使用 xvfb (X virtual framebuffer),比如:

  1. http://scraping.pro/use-headless-firefox-scraping-linux/
  2. https://stackoverflow.com/questions/10060417/python-firefox-headless
  3. http://tobyho.com/2015/01/09/headless-browser-testing-xvfb/

在 RHEL 6中,可以下载到xvfb。但是在 RHEL 7中,已经不能下载到该包,可能是合并到了其他包中了。由于RHEL 6中的 firefox 及更底层的软件包对于 Selenium 的一些 webdriver 而言都太旧了,我们转而使用了 RHEL 7 以及xvnc服务(tigervnc-server)。

Firefox + geckodriver

RHEL 7 中的 Firefox 版本为 52.0。而 firefox webdriver推荐(geckodriver supported firefoxen )的最低版本是 53.0 。由于两个版本号离得近,所依赖的包(尤其是 gtk)接近,所以下载 53.0 运行不再需要其他的第三方包。

下载 firefox 53.0 或 54.0

wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/54.0/linux-x86_64/en-US/firefox-54.0.tar.bz2

解压即可。本文中,解压后的firefox位于 /usr/local/lib/firefox。

下载 firefox webdriver,即 geckodriver

https://github.com/mozilla/geckodriver/releases

把geckodriver放到可执行路径中,如 /usr/local/bin, 便于 Selenium 调用。

Selenium

我们使用 Python 版本的 Selenium,并使用 PyVirtualDisplay 来启动虚拟显示环境,运行 Firefox WebDriver。

pip install PyVirtualDisplay selenium

建议安装到venv环境中。

下面的示例代码中,程序会打印出 www.sina.com.cn 的标题。

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from pyvirtualdisplay import Display

display = Display(backend='xvnc', rfbport=5904)
display.start()
firefox_bin = FirefoxBinary('/usr/local/lib/firefox/firefox')
browser = webdriver.Firefox(firefox_binary=firefox_bin)
site = 'http://www.sina.com.cn'
browser.get(site)
print browser.title
browser.quit()

将上述内容保存为python文件,执行即可。

Windows 环境

在 Windows 环境中运行 Selenium 和 Firefox 则要简单得多,不需要虚拟图形用户界面,只需要安装 Python,Selenium,Firefox 和 geckodriver,并把 geckodriver 放到PATH路径内即可。测试代码简化为

from selenium import webdriver

browser = webdriver.Firefox()
site = 'http://www.sina.com.cn'
browser.get(site)
print browser.title
browser.quit()