使用背景
有项目需要将一个html网页在线md5加密功能做成后端API服务,需要使用Chrome+Selenium实现后端运行网页,然后封装成API给外部调用。
选择离线部署
查阅了一些资料,发现Chrome和Chrome Drivers必须版本匹配才行,为了找到稳定运行的版本,选择下载离线安装包方式部署。
离线部署步骤
1、下载离线安装包
[root@localhost ~]# chrome --version
Chromium 114.0.5731.0
[root@localhost ~]# chromedriver --version
ChromeDriver 114.0.5731.0
我选择了114.0.5731.0版本的Chrome和Chrome Drivers,对着版号在下载网站找了好久才找到刚好匹配且比较新的版本,大家可以在这个网页Chrome Drivers镜像,Chrome就在官网下载就行。怕麻烦的同学也可以使用我下载好的114.0.5731.0版本,Chrome和Chrome Drivers 114.0.5731.0版本百度网盘链接
2、上传离线安装包
我准备把Chrome和Chrome Drivers安装在/home/Google文件夹下面,新建Google文件夹后,把刚刚下载的离线安装包上传,解压,得到chrome-linux和chromedriver_linux64两个文件夹
3、添加环境变量
在/etc/profile配置文件末尾加上Chrome和Chrome Drivers环境变量
# 设置chrome和chromedriver全局环境变量
export PATH=$PATH:/home/Chrome/chrome-linux
export PATH=$PATH:/home/Chrome/chromedriver_linux64
4、重载环境变量
不想重启服务器可以在控制台使用命令应用刚刚设置好的环境变量
source /etc/profile
注意事项
1、运行Chrome需要安装依赖
我的服务器环境是CentOS7.9,这个是我自己在清华大学镜像站下载的镜像,由于之前直接在阿里云服务器部署的CentOS7.9系统执行完上面的离线部署步骤之后,就可以正常使用Chrome了,但是我在自己的服务器操作之后,调用Chrome一直报错:
Message: unknown error: Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /home/Chrome/chrome-linux/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
在网上找了很多资料,各种说法的都有,各种尝试后均无果。后面试了一下在控制台查看Chrome版本的命令,发现下面这个报错,才明白原来是服务器系统环境缺少必要依赖!报错如下:
[root@localhost ~]# chrome --version
chrome: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
阿里云镜像默认安装了这些依赖,我自己部署的纯净版镜像没有,导致我在这个问题上折腾了好久,其他同学注意避坑!
Chat-GPT给出的安装依赖命令:
sudo yum install -y atk sudo yum install -y alsa-lib sudo yum install -y gtk3 sudo yum install -y cups-libs sudo yum install -y libXcomposite sudo yum install -y libXcursor sudo yum install -y libXi sudo yum install -y libXtst sudo yum install -y pango sudo yum install -y freetype sudo yum install -y freetype-devel sudo yum install -y fontconfig sudo yum install -y libXScrnSaver
安装完之后,再跑项目调用Chrome成功了~
2、后台调用Chrome需要添加沙箱运行参数
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
参考资料
https://blog.csdn.net/momoda118/article/details/132230459
https://blog.csdn.net/weixin_42075154/article/details/126526525
https://blog.csdn.net/qq_44726330/article/details/131655216
相关资源下载链接
百度网盘链接:https://pan.baidu.com/s/1JH9e9mm91edTzpEyR4ZyNg?pwd=ik7l