Chrome 129 Headlessモードで空白ウィンドウが表示される問題
問題の概要
Chromeブラウザをバージョン129に更新後、Headlessモードで実行すると予期しない空白のウィンドウが表示される現象が発生します。具体的な特徴は以下の通りです:
発生条件:
- Windows環境でChrome 129を利用
- Puppeteer、Selenium、Playwrightなどの自動化ツールを使用
- Headlessモードで実行
現象:
- ブラウザサイズと同一の空白の白いウィンドウが表示
- スクリーンショットや操作には影響なし(機能は動作)
バージョン依存性:
ツール Chrome 128 Chrome 129 Chrome 130 Puppeteer (v23.4.0) 正常 異常 正常 Selenium (v4.0) 正常 異常 正常 Playwright (v1.47.1) 正常 異常 正常
注意
この問題はWindows環境のみで発生します。macOSやLinuxでは同様の問題は確認されていません。
原因
Chromiumプロジェクトの公式バグレポート(Issue #367755364, Issue #359921643)で明らかになった原因は:
- Chrome 129でHeadlessモードのデフォルト動作が変更
- 旧モード(
--headless=old
)→ 新モード(--headless=new
)へ移行
- 旧モード(
- 新HeadlessモードのWindows実装に不具合が存在
- 空白ウィンドウはレンダリングエラーではなくUI管理のバグ
解決方法
方法1: Chrome 130へアップデート(推奨)
根本的な解決策としてChrome 130以降へのバージョンアップを推奨します。バグ修正はChromiumのコミットで完了しており、Chrome 130で正常動作が確認されています。
bash
# Chromeのアップデート例(Windows)
winget upgrade Google.Chrome
方法2: ウィンドウを画面外に移動(暫定対策)
Chrome 129を継続利用する場合のWorkaround:
python
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
options.add_argument("--window-position=-2400,-2400") # 画面外に移動
driver = webdriver.Chrome(options=options)
javascript
const browser = await puppeteer.launch({
headless: 'new',
args: ['--window-position=-2400,-2400']
});
技術解説
--window-position=-2400,-2400
オプションは:
- ウィンドウを画面の外側(見えない位置)に配置
- 自動化処理自体には影響なし
- 最小限のパフォーマンスオーバーヘッド
方法3: 旧Headlessモードを使用(非推奨)
旧モードへの切り戻し(--headless=old
)でも一時的に回避可能ですが:
python
options.add_argument("--headless=old")
恒久的な対策
- Chromeを130以降に更新(最優先)
- 自動化ツールのバージョン管理:json
"dependencies": { "puppeteer": "^22.0.0" // Chrome130対応版を指定 }
- CI環境でのブラウザバージョン固定:yaml
steps: - name: Set up Chrome uses: browser-actions/setup-chrome@v1 with: chrome-version: 130.x
まとめ
対策 | 有効性 | 持続性 | 推奨度 |
---|---|---|---|
Chrome 130へ更新 | 高 | 高 | ★★★★★ |
ウィンドウ位置調整 | 中 | 中 | ★★★☆☆ |
旧Headlessモード使用 | 高 | 低 | ★☆☆☆☆ |
この問題はChromiumの公式バグであり、Chrome 130で完全修正されています。Windows環境でのHeadless自動化では、Chromeバージョンの適切な管理が最も重要な対策です。