Selenium Chrome Headless 模式失效的解决方案

Selenium Chrome Headless 模式失效的解决方案

chromedriver 启用 headless 模式失败,通常因参数版本不兼容导致;使用 –headless(旧版)而非 –headless=new(新版)可解决多数兼容性问题,尤其在较旧 chrome/chromedriver 版本中。

在 Selenium 4.12+ 与 Chrome 109+ 中,–headless=new 是推荐的现代无头模式,但并非向后兼容:若 ChromeDriver 对应的 Chrome 浏览器版本低于 109,或 ChromeDriver 本身未更新,–headless=new 将被忽略,浏览器会回退至有界面模式(即窗口弹出),导致 headless 失效。

因此,更稳妥的实践是根据环境选择适配参数:

  • Chrome ≥ 109 + ChromeDriver ≥ 109:优先使用
    options.add_argument("--headless=new")
  • Chrome :降级使用经典模式
    options.add_argument("--headless")
    options.add_argument("--disable-gpu")  # Windows 下建议添加
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")

此外,请注意以下关键点:

神卷标书

神卷标书

神卷标书,专注于AI智能标书制作、管理与咨询服务,提供高效、专业的招投标解决方案。支持一站式标书生成、模板下载,助力企业轻松投标,提升中标率。

下载

  • ⚠️ –headless=new 在某些旧版 Selenium(如
  • ⚠️ 确保 chromedriver.exe 路径正确且与 Chrome 版本匹配(可通过 chrome://version 查看 Chrome 版本,并从 ChromeDriver 官网下载对应驱动)。
  • ⚠️ Windows 用户若仍出现窗口闪烁,可额外添加 options.add_experimental_option(“excludeSwitches”, [“enable-logging”]) 抑制日志干扰。

完整可运行示例(兼容性强):

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

service = Service(executable_path=r"./chromedriver.exe")  # 推荐使用相对路径或加入 PATH
options = Options()
options.add_argument("--headless")  # 兼容性优先
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-gpu")

driver = webdriver.Chrome(service=service, options=options)
driver.get("https://httpbin.org/html")
print(driver.title)  # 应输出 'Herman Melville - Moby-Dick'
driver.quit()

总结:–headless=new 并非万能开关,实际部署中应以 Chrome 版本为依据动态选型;开发阶段建议统一环境版本,并通过 driver.execute_script(“return navigator.webdriver“) 验证是否真正处于无头状态(返回 True 表示成功)。

https://www.php.cn/faq/1964543.html

发表回复

Your email address will not be published. Required fields are marked *