Chrome CDPをローカルで起動し、Dockerから接続する際にmitmproxyを使って解決 | GGAMI.NETChrome は localhost、127.0.0.1 以外からはアクセスできない。
そのため、以前は
netsh advfirewall firewall delete rule
name
=
"Allow Port 9222"
netsh interface portproxy delete v4tov4
listenport
=
9222
listenaddress
=
0.0
.0.0
timeout
3
netsh advfirewall firewall
add
rule
name
=
"Allow Port 9222"
dir
=
in
action
=
allow
protocol
=
TCP
localport
=
9222
start /b cmd /c call
"C:\Program Files\Google\Chrome\Application
\c
hrome.exe"
--remote-debugging-port
=
9222
--lang
=
ko-KR --no-default-browser-check --no-first-run --disable-dev-shm-usage --window-size
=
2560,1440
--start-maximized --disable-infobars
timeout
5
netsh interface portproxy
add
v4tov4
listenport
=
9222
listenaddress
=
0.0
.0.0
connectport
=
9222
connectaddress
=
127.0
.0.1
この Windows Shell コマンドで解決していたのだが、問題は Chrome の起動後に netsh で接続を開く必要があったことだ。
そのため、Chrome が起動してから常に5秒の遅延が発生していた。
mitmproxy --mode reverse:http://127.0.0.1:9222/ --listen-port 9223 -s modify_host.py
コマンドを使って mitmproxy を起動すればよい。
そうすると、Docker 内で動作するプロセスから Puppeteer や Playwright に接続する際、
host.docker.internal:9223 に接続するように設定しておけば、
実際に接続したときにローカルで起動したブラウザー上で動作する。
C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --lang=ko-KR --no-default-browser-check --no-first-run --disable-dev-shm-usage --window-size=2560,1440 --start-maximized --disable-infobars
これがなぜ便利かというと、実際の開発環境やサーバーでは、たいてい Docker 上で動作するが、思った以上に、正しく動作しているかどうかを確認するのが難しいことがある。
そのため、開発時には素早く開発する必要があるので、この方法で開発し、
実際にサーバーで動かすときには、サーバー上で問題なく動作するかどうかを確認すればよい。
puppeteer-screen-recorder のようなもので確認していた。