桌面环境使用Selenium默认会打开浏览器界面,但是如果要部署在无桌面环境的服务器环境,使用普通方法没法运行Selenium。
在服务器环境安装Gnome或者其他桌面环境,比较占用资源。
可以通过安装虚拟桌面环境解决这个问题。
Xvfb(X virtual framebuffer)是一个虚拟显示服务器,不需要显示设备也能模拟运行图形界面。
系统要求:
- CentOS 7
- Firefox 56.0+
- Selenium 3.5+
- geckodriver 0.19+
安装
-
安装Xvfb及其他依赖
yum install xorg-x11-server-Xvfb bzip gtk3
-
安装火狐
CentOS源里的火狐版本为52.3.0 ESR延长支持版,版本较老,和最新的Selenium版本不兼容,可能会启动不了。从官方下载56.0以上的版本。
1 2 3 4
cd /usr/local wget https://ftp.mozilla.org/pub/firefox/releases/56.0.2/linux-x86_64/en-US/firefox-56.0.2.tar.bz2 tar xjvf firefox-56.0.2.tar.bz2 ln -s /usr/local/firefox/firefox /usr/bin/firefox
-
安装Selenium
pip install selenium
-
安装火狐驱动
最新版本下载地址:https://github.com/mozilla/geckodriver/releases
1 2 3 4
cd /usr/local/bin wget https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-linux64.tar.gz tar xvzf geckodriver-*.tar.gz ln -s /usr/local/geckodriver /usr/bin/geckodriver
运行
-
启动虚拟桌面环境,保持后台运行
Xvfb :1 -screen 0 1024x768x24 &
:1
是服务启动的端口号,可以任意设置,与下一步保持一致就行 -
配置环境变量
export DISPLAY=:1
端口号和上面一致,冒号不能漏
-
启动程序测试
1 2 3 4 5 6
from selenium import webdriver b = webdriver.Firefox() b.get('http://www.baidu.com') print b.page_source b.quit()
其他问题
-
运行webdriver.Firefox()后等待很久报错并退出,显示
selenium.common.exceptions.WebDriverException: Message: other os error
:可能是版本不兼容,可以把firefox,geckodriver以及selenium全部升级到新版本 -
启动不了火狐,显示
Error: GDK_BACKEND does not match available displays
错误:检查是否运行Xvfb,是否配置环境变量,端口号是否一致1 2
ps -aux | grep Xvfb echo $DISPLAY