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

容器内Chromium无头模式启动失败及Selenium测试报错求助

解决Docker容器中Chromium无头模式启动及Selenium测试失败问题

1. 修复直接启动Chromium的Error: Can't open display:错误

Chromium 113版本的旧--headless参数在部分容器环境中仍会依赖显示服务,改用新版无头模式参数,并补充必要配置:

chromium --headless=new --no-sandbox --disable-dev-shm-usage --disable-gpu --remote-debugging-port=9222 https://www.chromestatus.com/
  • --headless=new:启用全新无头模式,无需依赖X11显示
  • --disable-gpu:禁用GPU加速,容器环境无需此功能
  • --remote-debugging-port=9222:指定调试端口,避免DevToolsActivePort文件缺失问题

2. 修正Selenium WebDriver配置

更新Pytest夹具,补充关键参数并优化资源清理:

@pytest.fixture
def chrome_web_driver():
    options = webdriver.ChromeOptions()
    options.add_argument("--headless=new")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--disable-gpu")
    options.add_argument("--remote-debugging-port=9222")
    options.add_argument("--window-size=1920,1080")
    # 明确指定Chromium二进制路径,避免WebDriver查找错误
    options.binary_location = "/usr/bin/chromium"
    
    web_driver = webdriver.Chrome(options=options)
    yield web_driver

    # 使用quit()彻底关闭浏览器进程,而非仅关闭窗口
    web_driver.quit()

3. 完善Docker容器依赖

确保容器内安装Chromium运行所需的全部基础组件,修改Dockerfile的安装命令:

RUN apt update && \
    apt upgrade --yes && \
    apt install --yes \
    curl \
    chromium-browser \
    chromium-driver \
    fonts-liberation \
    libasound2 \
    libatk-bridge2.0-0 \
    libatk1.0-0 \
    libcups2 \
    libdbus-1-3 \
    libdrm2 \
    libgbm1 \
    libnspr4 \
    libnss3 \
    libxcomposite1 \
    libxdamage1 \
    libxrandr2 \
    xdg-utils

这些依赖解决了Chromium因缺少系统库导致的异常退出问题。

4. 若需使用xvfb的兼容方案

如果必须依赖xvfb(比如适配旧版Chromium),需用xvfb-run包裹启动命令:

xvfb-run -a chromium --headless --no-sandbox --disable-dev-shm-usage https://www.chromestatus.com/

在Selenium测试中,可通过pyvirtualdisplay启动虚拟显示:

from pyvirtualdisplay import Display

@pytest.fixture(scope="session")
def xvfb_display():
    display = Display(visible=0, size=(1920, 1080))
    display.start()
    yield display
    display.stop()

@pytest.fixture
def chrome_web_driver(xvfb_display):
    options = webdriver.ChromeOptions()
    options.add_argument("--headless")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    web_driver = webdriver.Chrome(options=options)
    yield web_driver
    web_driver.quit()

注:Chromium 113版本优先推荐使用--headless=new方案,无需xvfb。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:40:24