Python Selenium Grid节点可正常获取页面但无法启动显示Chrome浏览器
问题解决思路
根本原因
你启动Selenium Hub和Node节点时使用了xvfb-run命令,该工具的作用是创建虚拟X11显示缓冲区,所有GUI程序(包含Chrome浏览器)的图形输出都会被渲染到这个虚拟显示区域,不会输出到设备的物理显示器上。这就是你没有配置headless参数也看不到Chrome窗口的核心原因。
可选解决方案
- 方案1:直接移除xvfb-run前缀启动服务
如果你运行Selenium服务的Linux设备已经安装了图形桌面环境,直接去掉启动命令中的xvfb-run -a前缀,用原生java命令启动Hub和Node即可:
启动前先在终端执行# 启动Hub java -Dwebdriver.chrome.driver=/usr/bin/chromedriver -jar selenium-server-standalone.jar -role hub # 启动Node java -Dwebdriver.chrome.driver=/usr/bin/chromedriver -jar selenium-server-standalone.jar -port 7777 -role node -hub http://192.168.111.253:4444/grid/register -browser browserName="chrome",version=ANY,platform=LINUX,maxInstances=5echo $DISPLAY确认图形显示变量已配置,正常桌面环境下默认值为:0,如果返回为空可以先执行export DISPLAY=:0再启动服务。 - 方案2:保留xvfb的前提下查看虚拟窗口内容
如果你的服务部署在无图形桌面的服务器上必须使用xvfb,可以通过VNC工具查看虚拟缓冲区中的窗口:- 启动xvfb时增加VNC相关参数:
xvfb-run -a -s "-screen 0 1024x768x16 +extension RANDR +extension RENDER +extension GLX" java -jar selenium-server-standalone.jar xxx - 安装x11vnc后绑定对应DISPLAY端口启动VNC服务,用任意VNC客户端连接即可看到Chrome窗口。
- 启动xvfb时增加VNC相关参数:
- 方案3:前置环境校验
先在Selenium服务运行的设备本地终端直接执行google-chrome命令,确认可以正常弹出浏览器窗口。如果本地执行都无法弹出窗口,先排查系统图形环境、DISPLAY变量配置问题,再调试Selenium相关配置。
注意:Chrome窗口只会显示在Selenium Node运行的设备的物理显示器上,不会显示在你访问Jupyter Notebook的局域网其他设备上。
内容的提问来源于stack exchange,提问作者Nelwin Jacob
相关产品推荐
相关产品推荐

