Skip to content

Chrome 129 无头模式显示空白窗口解决方案

问题描述

在 Chrome 129 版本(Windows 系统)中运行无头模式时,会出现意外的空白窗口。受影响的环境包括:

  • Puppeteer (v23.4.0)
  • Selenium (v4.0)
  • Playwright (v1.47.1)

版本对比

工具Chrome 128Chrome 129Chrome 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包管理

最佳实践建议

  1. 优先升级浏览器:使用 Chrome 130+
  2. 框架兼容性检查:更新工具链确保支持新版无头模式
    bash
    npm update puppeteer  # Puppeteer
    pip install -U selenium  # Selenium
  3. 测试环境隔离:在 CI/CD 中固定 Chrome 版本避免突发兼容问题

未来兼容策略

新项目应直接基于新版无头模式(headless=new)开发,其特性包括:

  • GPU硬件加速支持
  • 完整扩展支持
  • 更接近真实用户的渲染行为

结论

Chrome 129 的 Windows 无头模式空白窗口问题源于新版渲染引擎的兼容缺陷。可通过临时位移方案或版本升级解决。强烈推荐升级至 Chrome 130+ 以彻底规避此问题,同时获得新版无头模式的性能优势。

升级 > 临时规避方案:长期维护项目应采用版本升级策略确保稳定性和功能完整性。