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 もバッチリ。