2つの壁があります。
- chromedriverの接続制限
- Windows Defender ファイアーウォール
chromedriverの接続制限
chromedriverを起動すると次のメッセージが表示されます。
PS C:\Users\led_l> .\Downloads\chromedriver_win32\chromedriver.exe Starting ChromeDriver 102.0.5005.61 (0e59bcc00cc4985ce39ad31c150065f159d95ad3-refs/branch-heads/5005@{#819}) on port 9515 Only local connections are allowed. Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. ChromeDriver was started successfully.
Only local connections are allowed.
WSLとWindowsのホストは異なるIPアドレスを持つため接続出来ません。
ChromeDriver - WebDriver for Chrome - Security Considerations
If you need to connect to it from a remote host, use --allowed-ips switch on the command line to specify a list of IP addresses that are allowed to connect to ChromeDriver.
とあります。
--allowed-ips
を使用すればこの制限は回避できます。
ヘルプを見てみましょう。
PS C:\Users\led_l> .\Downloads\chromedriver_win32\chromedriver.exe --help Usage: C:\Users\led_l\Downloads\chromedriver_win32\chromedriver.exe [OPTIONS] Options --port=PORT port to listen on --adb-port=PORT adb server port --log-path=FILE write server log to file instead of stderr, increases log level to INFO --log-level=LEVEL set log level: ALL, DEBUG, INFO, WARNING, SEVERE, OFF --verbose log verbosely (equivalent to --log-level=ALL) --silent log nothing (equivalent to --log-level=OFF) --append-log append log file instead of rewriting --replayable (experimental) log verbosely and don't truncate long strings so that the log can be replayed. --version print the version number and exit --url-base base URL path prefix for commands, e.g. wd/url --readable-timestamp add readable timestamps to log --enable-chrome-logs show logs from the browser (overrides other logging options) --allowed-ips=LIST comma-separated allowlist of remote IP addresses which are allowed to connect to ChromeDriver --allowed-origins=LIST comma-separated allowlist of request origins which are allowed to connect to ChromeDriver. Using `*` to allow any host origin is dangerous!
--allowed-ips=LIST comma-separated allowlist of remote IP addresses which are allowed to connect to ChromeDriver
例えば、次のように実行します。
ver. Using `*` to allow any host origin is dangerous! PS C:\Users\led_l> .\Downloads\chromedriver_win32\chromedriver.exe --allowed-ips=172.24.23.228 Starting ChromeDriver 102.0.5005.61 (0e59bcc00cc4985ce39ad31c150065f159d95ad3-refs/branch-heads/5005@{#819}) on port 9515 Remote connections are allowed by an allowlist (172.24.23.228). Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. ChromeDriver was started successfully.
Remote connections are allowed by an allowlist (172.24.23.228).
設定が反映されていそうな表示がされます。
WSLのIPアドレスは?
設定に必要なWSLのIPアドレスはどうやって得られるでしょうか? Accessing network applications with WSL | Microsoft Docsによると次のコマンドで得られます。
ip addr | grep eth0
WSLで実行してみましょう。
ledsun@MSI:~►ip addr | grep eth0 22:52 6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 inet 172.22.121.198/20 brd 172.22.127.255 scope global eth0
172.22.121.198
であることがわかります。
これでchromedriverの接続制限は回避できます。
Windows Defender ファイアーウォール
Windowsからすると、WSLからchromedriverへの接続は外部からのアクセスです。
Windows Defender ファイアーウォールの遮断対象になります。
手っ取り早く接続確認をするには、システムとセキュリティ > Windows Defender ファイアーウォール
でWindows Defender ファイアーウォールの有効化または無効化
を選んで、無効にします。
接続確認
Windows側でchromedriverを起動します。
PS C:\Users\led_l> .\Downloads\chromedriver_win32\chromedriver.exe --allowed-ips=172.22.121.198 Starting ChromeDriver 102.0.5005.61 (0e59bcc00cc4985ce39ad31c150065f159d95ad3-refs/branch-heads/5005@{#819}) on port 9515 Remote connections are allowed by an allowlist (172.22.121.198). Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. ChromeDriver was started successfully.
WSLからtelnetで接続します。 その前に、WSLからみたWindowsのIPアドレスを取得します。
Accessing network applications with WSL | Microsoft Docsによると次のコマンドで得られます。
ledsun@MSI:~►cat /etc/resolv.conf |grep nameserver 22:56 nameserver 172.22.112.1
あらためてtelnet
コマンドを実行します。
ledsun@MSI:~[130]►telnet 172.22.112.1 9515 12.252s 22:56 Trying 172.22.112.1... Connected to 172.22.112.1. Escape character is '^]'.
Connected to 172.22.112.1.
が表示されれば接続成功です。
Trying 172.22.112.1...
で止まってしまった場合は、Windows Defender ファイアーウォールが有効になっていないか確認してみてください。
まとめ
WSLからWindowsホストで起動したchromedirverに接続することは可能でした。 手順がとても面倒なので、できればやりたくない感じなのがわかりました。