Chrome 129 无头模式显示空白窗口解决方案
问题描述
在 Chrome 129 版本(Windows 系统)中运行无头模式时,会出现意外的空白窗口。受影响的环境包括:
- Puppeteer (v23.4.0)
- Selenium (v4.0)
- Playwright (v1.47.1)
版本对比
工具 | Chrome 128 | Chrome 129 | Chrome 130 |
---|---|---|---|
Puppeteer | ✅ 正常 | ❌ 空白窗口 | ✅ 正常 |
Selenium | ✅ 正常 | ❌ 空白窗口 | ✅ 正常 |
Playwright | ✅ 正常 | ❌ 空白窗口 | ✅ 正常 |
原因分析
Chrome 129 将无头模式的默认行为从旧版(headless=old
)切换到了新版(headless=new
)。但在 Windows 平台上,新版模式存在渲染问题导致窗口显示异常:
text
[Chromium Issue] 缺陷追踪号:
1. https://issues.chromium.org/issues/367755364
2. https://issues.chromium.org/issues/359921643
注意
此问题仅影响 Windows 系统,在 macOS 和 Linux 上无头模式工作正常
解决方案
方法1:使用位移参数(临时修复)
将窗口移出可见屏幕区域(推荐):
python
# Python 示例 (Puppeteer/Selenium)
options.add_argument("--window-position=-2400,-2400")
原理
-2400
像素偏移确保窗口完全离开屏幕可视区域,解决视觉干扰
方法2:切换旧版无头模式(短期过渡)
显式指定使用旧版无头引擎:
python
# 切换回旧版无头模式
options.add_argument("--headless=old")
重要提醒
Chromium 已计划废弃旧版无头模式,此方案仅作临时措施:
- 缺少新版模式的功能支持
- 后续版本可能完全移除该选项
方法3:升级至 Chrome 130+
推荐永久解决方案:升级浏览器至 Chrome 130 或更高版本
text
修复合并记录:
https://chromium-review.googlesource.com/c/chromium/src/+/5789117
bash
# 卸载旧版本
brew uninstall google-chrome # macOS
choco uninstall googlechrome # Windows
# 安装 Chrome 130+
brew install google-chrome # 通过Homebrew
winget install Google.Chrome # Windows包管理
最佳实践建议
- 优先升级浏览器:使用 Chrome 130+
- 框架兼容性检查:更新工具链确保支持新版无头模式bash
npm update puppeteer # Puppeteer pip install -U selenium # Selenium
- 测试环境隔离:在 CI/CD 中固定 Chrome 版本避免突发兼容问题
未来兼容策略
新项目应直接基于新版无头模式(headless=new
)开发,其特性包括:
- GPU硬件加速支持
- 完整扩展支持
- 更接近真实用户的渲染行为
结论
Chrome 129 的 Windows 无头模式空白窗口问题源于新版渲染引擎的兼容缺陷。可通过临时位移方案或版本升级解决。强烈推荐升级至 Chrome 130+ 以彻底规避此问题,同时获得新版无头模式的性能优势。
升级 > 临时规避方案:长期维护项目应采用版本升级策略确保稳定性和功能完整性。