ブラウザ操作を自動化する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’)
コメント