如何强制程序在Headless模式下使用更新版本的Google Chrome?
解决无头模式下Chrome版本过旧的问题
我之前也碰到过类似的情况——无头模式下调用的Chrome版本和正常打开的不一样,导致元素定位失败。给你几个靠谱的解决办法:
1. 直接指定新版Chrome的二进制文件路径
有时候Selenium默认调用的Chrome不是你系统里最新的那个,尤其是无头模式下可能关联了旧版本的驱动。你可以手动指定新版Chrome的执行文件路径,确保程序调用的是正确的版本:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 优先使用Chrome 112+推出的新无头模式,行为更接近正常浏览器 options.add_argument('--headless=new') # 根据你的系统填写Chrome路径: # Windows示例 options.binary_location = r'C:\Program Files\Google\Chrome\Application\chrome.exe' # Mac示例 # options.binary_location = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' # Linux示例 # options.binary_location = '/usr/bin/google-chrome' driver = webdriver.Chrome(options=options)
2. 确保ChromeDriver与Chrome版本完全匹配
ChromeDriver必须和你的Chrome主版本号一致,否则很容易出现版本不兼容的问题。推荐用webdriver-manager自动管理驱动版本,它会自动检测你系统中Chrome的最新版本,下载对应的驱动:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service options = Options() options.add_argument('--headless=new') # 自动安装匹配当前Chrome的驱动 service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=options)
3. 检查系统默认Chrome的指向
有时候系统环境变量里的Chrome路径可能指向旧版本,你可以:
- 手动打开Chrome,在「设置→关于Chrome」里确认当前是最新版本
- 把新版Chrome的安装路径添加到系统环境变量的最前面,让系统优先调用它
4. 优化无头模式的配置(额外补充)
除了版本问题,无头模式的默认配置可能和正常浏览器有差异,导致元素找不到。可以加上这些参数优化:
options.add_argument('--no-sandbox') # 禁用沙箱,部分服务器环境需要 options.add_argument('--disable-dev-shm-usage') # 避免内存不足的问题 options.add_argument('--window-size=1920,1080') # 设置窗口尺寸,部分元素依赖显示区域 options.add_argument('--enable-javascript') # 确保JavaScript启用
内容的提问来源于stack exchange,提问作者Álvaro Rodríguez




