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

Selenium WebDriver启动Chrome报SessionNotCreatedException等异常求解

根因分析

三个报错属于配置过时+Lambda环境适配缺失叠加导致,核心诱因如下:

  • 首次触发SessionNotCreatedException:Selenium 4.x版本已不再支持同时传入options与desired_capabilities参数初始化WebDriver,且Chrome 103配套的ChromeDriver已完全遵循W3C WebDriver标准,代码中遗留的add_experimental_option('w3c', False)是适配ChromeDriver 75及更早版本的过时配置,会直接破坏capabilities的W3C结构校验;同时手动构造的desired_cap中重复嵌套了options字段,和入参的options对象冲突,最终导致会话创建失败。
  • 第二次触发DevToolsActivePort file doesn't exist崩溃:一是代码将headless等容器必备启动参数的加载逻辑绑定到了DOCKER_AUTH_CONFIG环境变量判断上,AWS Lambda运行时默认不存在该环境变量,导致无GUI场景下Chrome未启动headless模式直接崩溃;二是过时的w3c=False配置导致ChromeDriver与Chrome的DevTools通信协议不匹配,无法正常读取调试端口信息。
  • 第三次触发unable to discover open window in chrome:硬编码--remote-debugging-port=9222在Lambda沙箱环境中容易触发端口占用、绑定权限异常问题,同时代码仍同时传入options和手动构造的desired_capabilities,存在capabilities合并冲突,导致Chrome启动后Driver无法附着到浏览器会话。

注:你使用的ChromeDriver 103.0.5060.53与Chrome 103.0.5060.114属于同大版本兼容范围,版本匹配不是故障诱因。

可行解决方案

按以下步骤调整配置即可正常运行,适配AWS Lambda Python 3.9 x86_64运行环境:

  • 清理所有过时配置:删除w3c=False相关实验选项,Chrome 100+版本已完全移除非W3C模式支持,保留该配置只会引发协议不兼容问题。
  • 统一配置入口:废弃手动构造desired_capabilities的写法,所有浏览器参数、能力配置全部挂载到ChromeOptions对象上,初始化时仅传入service和options两个参数,避免capabilities冲突。
  • 取消headless模式的环境变量判断:Lambda为无GUI的Serverless环境,必须始终开启headless模式,不要依赖自定义环境变量控制该参数。
  • 移除硬编码的远程调试端口:交由ChromeDriver自动分配空闲端口,避免沙箱环境下的端口冲突、权限问题。
  • 补充Lambda环境必备的Chrome启动参数,规避沙箱权限、GPU渲染、内存不足类问题。

调整后的可直接运行的初始化代码如下:

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

def init_chrome_driver():
    chrome_opts = Options()
    # 基础访问配置
    chrome_opts.add_argument("--allow-running-insecure-content")
    chrome_opts.add_argument("--ignore-certificate-errors")
    # Lambda无GUI环境必加参数
    chrome_opts.add_argument("--headless=new")
    chrome_opts.add_argument("--no-sandbox")
    chrome_opts.add_argument("--disable-dev-shm-usage")
    chrome_opts.add_argument("--disable-gpu")
    chrome_opts.add_argument("--single-process")
    chrome_opts.add_argument("--disable-extensions")
    chrome_opts.add_argument("--disable-application-cache")
    chrome_opts.add_argument("--window-size=1920,1080")
    # 指定二进制路径
    chrome_opts.binary_location = '/usr/bin/google-chrome'
    # W3C标准模式下配置性能日志、不安全证书忽略能力
    chrome_opts.set_capability('goog:loggingPrefs', {'performance': 'INFO'})
    chrome_opts.set_capability('acceptInsecureCerts', True)

    # 初始化Driver,禁止额外传入desired_capabilities参数
    chrome_service = Service(executable_path='/usr/local/bin/chromedriver')
    driver = webdriver.Chrome(service=chrome_service, options=chrome_opts)
    return driver

额外注意事项

  • 确认ECR镜像内打包的Chrome、ChromeDriver均为x86_64架构版本,误装arm架构二进制会导致二进制无法执行,触发同类崩溃报错。
  • Lambda函数内存配置建议不低于1024MB,内存不足会导致Chrome启动时被系统OOM杀掉,出现进程异常退出的报错。
  • 如果需要采集性能日志,必须使用goog:loggingPrefs字段配置,老版本的loggingPrefs字段不符合W3C规范,在Chrome 100+版本下不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:48:25