WSL の playwright-cli からホスト Windows の Chrome にアタッチする
TL;DR — WSL2 ミラーモードなら
--cdp=chromeチャンネル名は使えないが、Chrome を--remote-debugging-port=9222で起動して--cdp=http://localhost:9222を使えばアタッチできる。Firewall ルールも不要。なお、--remote-debugging-addressは非 headless Chrome では無視され、Chrome は常に127.0.0.1にバインドする。localhostで繋がるのはミラーモードが127.0.0.1を通してくれるおかげ。
どっかで聞いたところによると…
playwright-cli(@playwright/cli)には、起動済みの Chrome にアタッチしてそのセッションをそのまま操作できる機能があり、SAML/SSO 認証済みのページを操作したいときにサンドボックスの Chrome にログインし直す手間が省ける、とのことです。
確かに便利そうなんだけど、この機能を WSL2 から使おうとしてハマったので記録しておきます。
ほんと大体ハマってんな俺。
やりたいこと
WSL 上の playwright-cli から、ホスト Windows で開いている Chrome(ログイン済み)にアタッチして操作する。
前提
- WSL2 ネットワークモード:ミラーモード(
networkingMode=mirrored) - playwright-cli:
0.1.9(mise use --global npm:@playwright/cli@latestでインストール)- 前回自宅でハマったので職場では間違えなかった
チャンネル名(--cdp=chrome)は WSL から使えない
そもそもこれが駄目だった。
以下は Claude さんの解説です。
playwright-cli には microsoft/playwright#40177(2026年4月マージ)で、チャンネル名でアタッチできる機能が追加された。
playwright-cli attach --cdp=chrome
これは DevToolsActivePort ファイルを読んでポートを自動解決する仕組みなのだが、WSL では動かない。
原因は process.platform。WSL 上では linux になるため、スクリプトは ~/.config/google-chrome/DevToolsActivePort(Linux のパス)を探しに行く。ホスト Windows の Chrome が書き込むのは %LOCALAPPDATA%\Google\Chrome\User Data\DevToolsActivePort なので、当然見つからない。