客户的网站上的监测代码最近连续两次在网站更新时被清除掉,导致无法正常获取网站访问数据,影响到后续大数据分析。
为解决这个问题,决定使用Python Selenium
模块来实现网站按钮模拟点击,同时监测我们后台是否能正常收到,以此来判断网站按钮监测代码是否有正常部署。
Selenium
很好用很强大,开发和部署也都很简单,是自动化测试非常好的工具,但是问题是我们需要在无GUI的服务器上进行部署,这就牵涉到在无GUI的服务器上安装浏览器的问题,我这里选择的是Chrome。
下面简单分享一个部署过程中遇到的坑,也当作是总结。
一、安装Chromium
1 | yum install -y epel-release |
检测安装结果
1 | # ll /usr/bin/ | grep chrom |
二、安装XVFB
XVFB
全称为:virtual framebuffer X server for X Version 11
,可以直接处理Windows的图形化功能,并且不会把图像输出到屏幕上,也就是说,就算你的电脑没有启动Xwindow,也依然也可以执行图形化软件。
1 | yum install xorg-x11-fonts* Xvfb -y |
三、编写浏览器启动脚本
利用xvfb来启动Chromium,并设置参数
vim /usr/bin/xvfb-chromium
1 |
|
以上代码参考:https://github.com/mark-adams/docker-chromium-xvfb/blob/master/images/base/xvfb-chromium ,修改了第20行,添加了三个参数预防一些异常报错
为脚本添加可执行权限
1 | chmod +x /usr/bin/xvfb-chromium |
四、更改链接,调整命令
1 | ln -s /usr/lib64/chromium-browser/chromium-browser.sh /usr/bin/chromium |
检测调整结果,显示如下所示,即表示正确
1 | # ll /usr/bin/ | grep chrom* |
参考:https://hub.docker.com/r/markadams/chromium-xvfb/~/dockerfile/
五、遇到的问题
最学见的报错:
selenium.common.exceptions.WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist
这个报错由两个原因导致
第一个是原因是参数设置问题,可直接添加相关参数即可
在Python代码中添加:
1 | chrome_options = Options() |
参考:https://github.com/heroku/heroku-buildpack-google-chrome/issues/46
或者把上述参数添加在本文每三步的脚本中
另一个会导致这个报错的原因是在编写完第三的步脚本/usr/bin/xvfb-chromium
后没有给其赋予可执行权限把致。