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

Selenium/Python启用Chrome无头模式时触发额外验证码验证问题

问题原因分析
  • 你遇到的不一致问题核心是Chrome传统无头模式(options.headless = True触发的模式)的运行逻辑和有头模式完全独立:传统无头模式属于Chrome的独立分支实现,默认和有头模式的用户数据隔离,哪怕指定了同一个用户配置目录,也不会读取有头模式下存储的验证cookie、本地缓存等数据。同时传统无头模式自带大量可被反爬系统识别的特征,哪怕手动修改UA也很容易被检测到,触发验证码校验。
解决方案

优先方案:使用Chrome新版无头模式(Chrome 112及以上版本支持)

新版无头模式本质是隐藏了有头模式的UI层,所有运行逻辑、用户数据读取规则、反爬特征和有头模式完全一致,是官方推出用来替代传统无头模式的方案,修改方式非常简单:
把原有代码中options.headless = True的配置替换为下面这行即可:

options.add_argument("--headless=new")

修改后不需要改动其他配置,即可正常读取你指定的./profile目录下的验证状态,不会再出现模式切换后需要重复验证的问题。

兼容方案(Chrome 112以下版本使用)

如果你的Chrome版本低于112无法使用新版无头模式,可通过补充配置抹除传统无头模式的特征,同时修复用户数据读取问题:

  • 把用户配置目录的相对路径./profile改为绝对路径,避免传统无头模式的路径读取异常
  • 补充窗口大小配置,和你有头模式的窗口尺寸保持一致,避免被反爬识别:
    options.add_argument("--window-size=1920,1080")
    
  • 启动 driver 后执行脚本抹除webdriver特征:
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
    })
    
  • 确认你配置的user-agent字符串和你本地安装的Chrome版本完全匹配,不要使用和当前版本不符的UA。
验证方法

修改配置后可在页面加载完成后打印当前cookie,对比有头模式下的cookie内容,确认验证状态的cookie被正确读取即可:

print(driver.get_cookies())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:05