WSLのgoogle-chromeがクラッシュする

Ubuntuサーバーで実行するプログラムの開発をするために、手元のWindowsのWSL (Windows Subsystem for Linux, Ubuntu on Windows) にChrome (google-chrome-stable) をインストールするも実行時エラーで立ち往生。いろいろと試した結果、原因は WSL のバージョンでした。

Selenium でのエラー

目的はSeleniumを使ったスクレイピングのプログラムでしたが、次のようなエラーで止まってしまいました。

Traceback (most recent call last):
  (中略)
  File "/mnt/d/devel/patkeep/task/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 333, in get
    self.execute(Command.GET, {'url': url})
  File "/mnt/d/devel/patkeep/task/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/mnt/d/devel/patkeep/task/venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed
  (Session info: headless chrome=97.0.4692.99)

試したこと

いろいろなウェブサイトの情報を参考に

  • –no-sandobox オプションを付けて起動する
  • –disable-dev-shm-usage オプションを付けて起動する

などを試してみましたが効果なく。とりあえずコンソールからも

$ google-chrome --headless --disable-gpu --screenshot https://www.google.com

などをしてみましたが、

[0129/053059.619328:ERROR:bus.cc(397)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[0129/053101.738788:ERROR:sandbox_linux.cc(378)] InitializeSandbox() called with multiple threads in process gpu-process.
[0129/053105.107365:ERROR:platform_shared_memory_region_posix.cc(47)] Descriptor access mode (0) differs from expected (2)
[0129/053105.109188:WARNING:crash_handler_host_linux.cc(365)] Could not translate tid - assuming crashing thread is thread group leader; syscall_supported=0
[0129/053105.372012:WARNING:crash_handler_host_linux.cc(365)] Could not translate tid - assuming crashing thread is thread group leader; syscall_supported=0
[0129/053105.544801:ERROR:headless_shell.cc(428)] Abnormal renderer termination.

みたいな感じでこれも上手くいかず(ログの意味も分からず)。

WSLのバージョン

よくよくウェブの情報を見ていると、どの情報もほとんど WSL2 で実行していることに気づいて確認してみたら、自分の環境は WSL のバージョンが 1 でした。

PS > wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         1

というわけで、WSL を 2 にしてみました。

PS > wsl --set-version Ubuntu-18.04 2

WSL2 にしてみたら難なく解決。苦労した割に簡単な解決法でした…

google-chrome + chromedriver + selenium もバッチリ。

参考にした情報