CentOS下部署selenium环境

背景

最近写了一个循环抓取某网站数据的代码,其中涉及到页面登陆,采用了selenium来做。考虑到循环抓取,本机跑容易因系统休眠断网造成爬取失败,于是在自己的服务器上部署一下。

操作系统:CentOS 7

Python版本:Python3.7

问题

由于服务器抓取,其实不需要展示浏览器的界面,可以考虑使用PhantomJS来做,结果发现有如下的警告提示:

1
UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead

既然后续不支持了,那么就按照官方建议,我选chrome

不同于PhamtomJSchromedriver需要和chrome配合使用,也就是如果不安装chrome,直接加载chromedriver那么就会有如下的报错:

1
2
3
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
(Driver info: chromedriver=2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5),platform=Linux 3.10.0-693.2.2.el7.x86_64 x86_64)

而且MacOS和CentOS的chromedriver是不同的。如果在linux下直接加载mac版的chromedriver就会如下的报错:

1
2
raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: './chromedriver'

部署

正确的部署应该是这样的:

安装chrome

CentOS服务器是用ssh登陆的,就直接用yum来安装好了,由于存在翻墙的问题,要手动配置下源:

1
2
cd /etc/yum.repos.d/
vim google-chrome.repo

然后添加如下语句:

1
2
3
4
5
6
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

再用yum安装:

1
yum -y install google-chrome-stable --nogpgcheck

在未翻墙的环境下,一定要加上--nogpgcheck选项,否则会因为检查失败而无法安装成功。

https://blog.csdn.net/u010472499/article/details/72327963

安装chromedriver

墙内可以在如下地址下载对应系统的chromedriver:

http://npm.taobao.org/mirrors/chromedriver/2.45/

下载好的chromedriver需要放到PATH目录下,建议是自己使用virtualenv新建一个venv虚拟环境,然后将chromedriver放到虚拟环境的bin目录下(venv/bin)即可。

selenium的使用

加上headless的配置即可,关键代码如下:

1
2
3
4
5
6
from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_argument('headless')
driver = webdriver.Chrome(executable_path='./chromedriver', options=option)
# do something
driver.quit()