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

Ubuntu虚拟机Jenkins触发Windows主机打开Chrome页面失败排查

解决Jenkins Windows节点运行Selenium脚本看不到Chrome浏览器的问题

这是Jenkins在Windows环境下运行GUI程序的典型坑——Jenkins服务默认在Windows的「会话0」中运行,而这个会话是没有桌面交互权限的。你的脚本其实已经在后台成功启动Chrome了,但因为没有桌面会话,所以你看不到浏览器窗口。结合你提供的日志和场景,我给你一步步的解决方案:

核心原因分析

对比你本地和Jenkins slave的Chromedriver日志:

  • 本地运行时,临时目录是C:\Users\udiw\AppData\Local\Temp(属于你的用户账户)
  • Jenkins slave运行时,临时目录是C:\WINDOWS\TEMP(属于系统账户)

这说明Jenkins节点服务是用Local System账户启动的,这个账户没有桌面会话权限,无法显示GUI程序界面。

解决方案步骤

1. 更改Jenkins节点服务的运行账户

把Jenkins slave服务(或者主服务,如果是单节点的话)改成你日常使用的、有桌面权限的用户账户:

  • 打开Windows「服务」管理器(按Win+R输入services.msc)
  • 找到Jenkins相关服务(如果是slave节点就是Jenkins Slave),右键选择「属性」
  • 切换到「登录」选项卡,选择「此账户」,输入你平时登录Windows的用户名和密码
  • 勾选「允许服务与桌面交互」(Windows 10/Server 2016+可能默认隐藏这个选项,没关系,先设置账户再重启服务)
  • 重启Jenkins服务,重新连接节点

2. 调整Selenium脚本的ChromeOptions配置

在你的Python脚本里添加强制启用桌面显示的参数,避免服务环境默认触发无头模式:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def open_chrome():
    options = Options()
    # 禁用无头模式,强制显示窗口(如果需要无头就保留下面这行,要看到界面就删掉)
    # options.add_argument("--headless=new")
    options.add_argument("--start-maximized")  # 启动时最大化窗口
    options.add_argument("--disable-gpu")  # 兼容Windows环境
    options.add_argument("--no-sandbox")  # 绕过系统安全限制
    # 指定使用你的用户数据目录,避免用系统临时目录
    options.add_argument(r"--user-data-dir=C:\Users\udiw\AppData\Local\Google\Chrome\User Data")
    # 可选:指定临时文件目录为你的用户目录
    options.add_argument(r"--temp-dir=C:\Users\udiw\AppData\Local\Temp")

    # 直接指定chromedriver绝对路径,避免环境变量问题
    driver = webdriver.Chrome(
        executable_path=r"C:\path\to\your\chromedriver.exe",
        options=options
    )
    driver.get("https://www.google.com")
    # 加个等待,确保你能看到窗口
    input("Press Enter to close...")
    driver.quit()

if __name__ == "__main__":
    open_chrome()

3. 验证Jenkins节点的环境变量

从你的流水线日志看,建议确认:

  • Chrome和chromedriver的路径在Jenkins节点的PATH环境变量中
  • 或者直接在脚本里指定chromedriver的绝对路径(如上一步的代码)
  • 可以在流水线里加一步打印用户信息,确认运行账户:bat 'whoami'

4. 排查会话0的界面(可选)

如果还是看不到窗口,可以用Sysinternals的PsExec工具查看会话0的桌面:

# 下载PsExec后,在命令行运行
psexec -s -i 0 cmd.exe

这个命令会打开会话0的命令提示符,在里面运行你的Python脚本,如果能看到浏览器,就确认是Jenkins服务的会话问题。

关于日志里的键盘布局警告

日志里的Cannot switch to US keyboard layout只是小问题,不会影响浏览器启动,只是可能在输入文本时按键映射有偏差,解决了桌面会话问题后,这个警告可以忽略,或者通过在脚本里设置输入法布局来解决。

补充:如何在提问中附加日志

在Stack Exchange类平台提问时,直接用代码块(```)包裹日志内容即可,比如:

[1582176618.238][INFO]: Cannot switch to US keyboard layout - some keys may be interpreted incorrectly
[1582176618.238][INFO]: Launching chrome: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-background-networking ...

如果日志过长,可以分多个代码块粘贴,标注清楚每个日志的来源(比如「Jenkins流水线日志」、「Chromedriver日志(Jenkins slave)」)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:17:39