You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在无活跃RDP会话的谷歌云VM上运行Python Selenium测试?

解决Python Selenium在无RDP会话的谷歌云VM上运行的问题

核心原因

Java版能正常运行是因为Java的AWT和Selenium实现可直接调用系统图形资源,不受RDP会话状态影响;而Python的Selenium绑定(尤其配合ChromeDriver)默认依赖当前桌面会话上下文,关闭RDP后会话被挂起,图形环境释放,导致页面渲染和截图失败。

可行解决方案

1. 启用Chrome新版无头模式(优先尝试)

Chrome的--headless=new模式无需依赖虚拟显示器,可直接在无桌面环境下运行,配置如下:

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless=new')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--window-size=1920,1080')  # 确保截图尺寸完整

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://example.com")
driver.save_screenshot("test_screenshot.png")
driver.quit()

2. 正确配置虚拟显示器并绑定进程

如果必须使用有头模式,需确保虚拟显示器与ChromeDriver进程正确关联:

  • 安装依赖:sudo apt-get install xvfb(Debian/Ubuntu系统),pip install pyvirtualdisplay
  • 代码中显式启动并绑定:
from pyvirtualdisplay import Display
from selenium import webdriver

# 启动虚拟显示器
display = Display(visible=0, size=(1920, 1080))
display.start()

# 配置Chrome使用该显示器
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--display={display.display}')
chrome_options.add_argument('--no-sandbox')

driver = webdriver.Chrome(options=chrome_options)
# 执行测试逻辑
driver.get("https://example.com")
driver.save_screenshot("virtual_display_screenshot.png")

# 清理资源
driver.quit()
display.stop()

3. 用systemd服务保持虚拟显示器常驻

避免手动启动的虚拟显示器随会话关闭终止,创建systemd服务:

  • 创建服务文件/etc/systemd/system/selenium-xvfb.service:
[Unit]
Description=Persistent X Display for Selenium
After=network.target

[Service]
User=你的用户名
Type=forking
ExecStart=/usr/bin/Xvfb :1 -screen 0 1920x1080x24
ExecStop=/usr/bin/pkill -f "Xvfb :1"
Restart=always

[Install]
WantedBy=multi-user.target
  • 启动并启用服务:
sudo systemctl daemon-reload
sudo systemctl start selenium-xvfb.service
sudo systemctl enable selenium-xvfb.service
  • 代码中指定使用:1端口:
chrome_options.add_argument('--display=:1')

4. 修改谷歌云VM的RDP会话设置

登录谷歌云控制台,找到目标VM实例,编辑实例的"远程桌面"设置,将"会话保持"设为"始终保持",重启VM后测试。

内容的提问来源于stack exchange,提问作者Nikita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 12:05:07