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

Github Actions运行Python Selenium报Chrome failed to start异常

问题根因

现有配置存在3个核心问题,直接导致运行失败、交互异常:

  • 工作流逻辑错误:安装的包是google-chrome-stable,版本检查步骤却调用chromium-browser -version,二者是完全独立的浏览器包,版本不匹配本身就会触发兼容问题,该步骤实际运行时会直接报错。
  • 启动参数缺失:ubuntu-latest是纯命令行无桌面环境,仅添加--headless参数远不能满足Chrome运行要求,缺省参数会直接引发启动崩溃、元素定位/点击失效、运行卡顿等问题。
  • 权限限制触发崩溃:GitHub Actions 执行命令默认使用root权限,官方Chrome默认开启的沙箱机制会在root环境下直接拦截启动,这就是初始报错DevToolsActivePort file doesn't exist的核心原因。
修复方案

1. 修正工作流配置

替换原有Chrome安装、版本检查、驱动管理相关步骤,直接使用GitHub生态内维护的Chrome安装动作即可,避免手动处理apt源、驱动版本匹配问题,修正后的工作流配置参考:

name: Selenium Test

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.9"]
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    - name: Setup Chrome browser
      uses: browser-actions/setup-chrome@latest
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install selenium
    - name: Run Create Project test
      run: |
        python CreateProjects/Run.py

说明:使用该Chrome安装动作后,可直接移除webdriver-manager相关依赖与代码,动作会自动完成Chrome、对应版本驱动的安装与环境变量配置,不会出现版本不匹配问题。

2. 补全Chrome启动参数

旧版--headless参数的渲染、交互逻辑和真实浏览器差异极大,是你之前碰到元素点不了、运行慢的主要诱因之一,需要替换为新版无头模式参数,同时补全无GUI、root环境下的必填参数。注意新版Selenium传配置的参数名是options,不是旧版本的chrome_options,修正后的初始化代码如下:

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

class Project:
    def __init__(self, teardown = False):
        self.teardown = teardown
        chrome_options = Options()
        # 启用新版无头模式,行为和有界面Chrome完全一致
        chrome_options.add_argument("--headless=new")
        # root环境必填,关闭沙箱限制否则启动直接崩溃
        chrome_options.add_argument("--no-sandbox")
        # CI环境必填,默认共享内存空间仅64M,不加会导致卡顿、崩溃、元素交互失效
        chrome_options.add_argument("--disable-dev-shm-usage")
        # 无GPU环境禁用硬件加速,避免渲染异常
        chrome_options.add_argument("--disable-gpu")
        # 固定窗口分辨率,避免默认窗口过小导致元素被遮挡无法点击
        chrome_options.add_argument("--window-size=1920,1080")
        # 可选配置,进一步提升CI环境稳定性
        chrome_options.add_argument("--disable-extensions")
        chrome_options.add_argument("--disable-software-rasterizer")
        
        s = Service()
        self.driver = webdriver.Chrome(service = s, options=chrome_options)
        self.driver.get(const.BASE_URL)
        self.driver.implicitly_wait(15)
注意事项
  • 不要继续使用旧版--headless参数,其独立的渲染引擎和桌面版Chrome行为差异很大,很容易出现本地Windows环境运行正常,CI环境下交互逻辑异常的问题。
  • 手动apt安装Chrome+webdriver-manager拉驱动的方式很容易出现版本不匹配、源访问失败的问题,在CI环境下稳定性远不如现成的环境配置动作。
  • 如果还是碰到点击失效的问题,可以把隐式等待换成显式等待,判断元素处于可点击状态后再执行操作,无头模式下页面加载速度和本地环境有差异,固定时长硬等的稳定性最差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:36:50