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

通过SSH创建带虚拟显示的Selenium浏览器后,如何在VNC中显示?

问题解决方法

核心原因

你通过pyvirtualdisplay创建的Chrome进程绑定在独立的X虚拟显示(比如:0)上,而VNC会话使用的是另一个X显示(比如:1),两个显示相互独立,所以VNC无法看到Chrome窗口。switch_to.window仅用于Selenium会话内的标签页/窗口切换,和窗口所在的X显示环境无关,因此无效;而webdriver.Chrome().current_window_handle是新建了一个Chrome实例,和原有会话无关联,自然会触发窗口不存在的异常。


解决步骤

1. 确认显示编号

  • 在VNC会话终端执行,获取当前VNC的显示编号:
    echo $DISPLAY
    
    输出通常为:1或类似格式。
  • 在SSH终端执行,找到pyvirtualdisplay创建的虚拟显示编号:
    ps aux | grep Xvfb
    
    输出中会包含类似:0的参数,这就是Chrome当前绑定的显示。

2. 迁移Chrome窗口到VNC显示

先安装窗口迁移工具(若未安装):

sudo apt update && sudo apt install wmctrl xdotool

然后执行以下操作:

  • 列出所有窗口,找到Chrome的窗口ID:
    wmctrl -l
    
    在输出中找到标注Google Chrome的行,第一列即为窗口ID(如0x01234567)。
  • 将窗口迁移到VNC显示(替换<窗口ID>和:1为你的实际值):
    xdotool windowreparent <窗口ID> $(xdotool getrootwindow --display :1)
    

3. 后续替代方案:直接在VNC会话创建Chrome

如果迁移操作繁琐,后续可以跳过pyvirtualdisplay,直接在VNC会话中启动Chrome:

from selenium import webdriver
import os

# 绑定VNC的显示编号(替换为你实际的DISPLAY值)
os.environ['DISPLAY'] = ':1'

driver = webdriver.Chrome()

这样Chrome窗口会直接出现在VNC会话的桌面中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:22:21