You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何强制程序在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

火山引擎 最新活动