Pythonからseleniumを使用する際の webdriver.Chrome()実行でエラーになる場合

ALL
スポンサーリンク

ブラウザ操作を自動化するseleniumをPythonで使用する場合、driver = webdriver.Chrome(…) のように実行しますが、これを Ubuntu のcronから実行したら、次のように unexpectedly exited. Status code was: 1 でエラーになって実行できない場合の対応方法です。

Traceback (most recent call last):
  File "/home/testuser/selenium/test.py", line 43, in <module>
    e.exec()
  File "/home/testuser/selenium/test.py", line 36, in exec
    driver = webdriver.Chrome(service=service, options=options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/selenium/webdriver/chrome/webdriver.py", line 45, in __init__
    super().__init__(
  File "/usr/lib/python3/dist-packages/selenium/webdriver/chromium/webdriver.py", line 50, in __init__
    self.service.start()
  File "/usr/lib/python3/dist-packages/selenium/webdriver/common/service.py", line 102, in start
    self.assert_process_still_running()
  File "/usr/lib/python3/dist-packages/selenium/webdriver/common/service.py", line 115, in assert_process_still_running
    raise WebDriverException(f"Service {self._path} unexpectedly exited. Status code was: {return_code}")
selenium.common.exceptions.WebDriverException: Message: Service /snap/bin/chromium.chromedriver unexpectedly exited. Status code was: 1

このエラーは、ユーザーがシステムにログインしていない状態で、cronから実行すると起こるはずです。
ユーザーのログイン時と同様に、systemd のユーザーインスタンスを自動起動すればエラーは出なくなります。

次のようにして設定すればOKです。

sudo loginctl enable-linger ユーザー名

なお、unexpectedly exited. Status code was: 1 のエラーの対処でよく次が説明されていますが、これらをせずとも問題ないようです

  • XDG_RUNTIME_DIR=/run/user/$(id -u) python test.py のように XDG_RUNTIME_DIR を設定する
  • webdriver.Chrome で指定するオプションに次を追加する
    options.add_argument(‘–no-sandbox’)
    options.add_argument(‘–disable-dev-shm-usage’)
    options.add_argument(‘–disable-gpu’)

コメント