Headless ChromeDriver加载页面卡顿/冻结问题技术求助
解决Headless模式下ChromeDriver卡顿冻结问题
我之前也碰到过一模一样的问题——正常模式跑ChromeDriver飞快,一开Headless就卡到怀疑人生,加载个谷歌首页都要半分钟!大概率是Headless模式的默认配置和正常浏览器差异导致的,给你几个亲测有效的排查和解决方向:
1. 切换到新版Headless模式(关键!)
旧版的--headless参数是一个简化版的浏览器环境,和正常模式差异极大,很容易出现兼容性和性能问题。Chrome 112+引入了新版Headless模式,行为更贴近正常浏览器,能解决大部分卡顿问题。替换你的Headless参数:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 用新版Headless,替代旧的--headless options.add_argument("--headless=new") # 必须设置窗口大小,避免布局计算异常导致的加载缓慢 options.add_argument("--window-size=1920,1080") # 再补充几个优化参数 options.add_argument("--disable-gpu") options.add_argument("--no-sandbox") # Linux环境下必加,避免权限问题 options.add_argument("--disable-dev-shm-usage") # 解决/dev/shm内存不足的问题 options.add_argument("--disable-extensions") options.add_argument("--disable-plugins") driver = webdriver.Chrome(options=options)
2. 调整页面加载策略
默认的normal加载策略会等待所有资源(图片、脚本、样式)加载完成,Headless模式下某些第三方资源可能加载异常缓慢。可以改成eager模式,只等待DOM加载完成:
# 设置页面加载策略为eager options.page_load_strategy = "eager"
如果只需要页面核心内容,甚至可以用none策略,然后手动等待目标元素出现:
options.page_load_strategy = "none" # 打开页面后手动等待元素 driver.get("https://google.com") WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "q")))
3. 检查ChromeDriver与浏览器版本匹配
这个是老生常谈但最容易忽略的点!ChromeDriver版本必须和你的Chrome浏览器版本完全对应(小版本号也要一致)。比如Chrome是120.0.6099.109,ChromeDriver也要用120.0.6099.109版本。你可以通过chrome://version查看浏览器版本,然后下载对应版本的ChromeDriver。
4. 排查网络与资源限制
- 代理/缓存问题:Headless模式可能不会自动继承系统代理,或者缓存机制异常。试试显式禁用缓存:
options.add_argument("--disable-cache"),如果用代理,确保代理参数正确配置。 - 系统资源不足:Headless虽然看起来轻量,但如果你的机器内存、CPU占用过高,也会导致卡顿。用任务管理器(Windows)或
top(Linux)看看Chrome进程的资源占用,必要时关闭其他后台程序,或者给Chrome添加内存限制参数:options.add_argument("--max-memory=2048m")。 - 安全软件拦截:有些防火墙、杀毒软件会把Headless模式的Chrome当成异常进程拦截,导致网络请求缓慢。可以临时关闭安全软件测试一下。
5. 启用日志排查
如果以上方法都没用,开启ChromeDriver的日志功能,看看具体卡在哪一步:
options.add_argument("--enable-logging") options.add_argument("--v=1") # 日志级别,1是基本信息,越高越详细 # 初始化driver时指定日志路径 driver = webdriver.Chrome(options=options, service_log_path="./chromedriver.log")
查看日志里的超时、错误信息,能帮你定位具体问题。
内容的提问来源于stack exchange,提问作者A. Pecora




