
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")
此外,请注意以下关键点:
- ⚠️ --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 表示成功)。










