背景
最近写了一个循环抓取某网站数据的代码,其中涉及到页面登陆,采用了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
。
不同于PhamtomJS
,chromedriver
需要和chrome
配合使用,也就是如果不安装chrome
,直接加载chromedriver
那么就会有如下的报错:
1 | raise exception_class(message, screen, stacktrace) |
而且MacOS和CentOS的chromedriver
是不同的。如果在linux下直接加载mac版的chromedriver
就会如下的报错:
1 | raise child_exception_type(errno_num, err_msg, err_filename) |
部署
正确的部署应该是这样的:
安装chrome
CentOS服务器是用ssh登陆的,就直接用yum
来安装好了,由于存在翻墙的问题,要手动配置下源:
1 | cd /etc/yum.repos.d/ |
然后添加如下语句:
1 | [google-chrome] |
再用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 | from selenium import webdriver |