Селен с хромедрайвером не запускается через cron - PullRequest
0 голосов
/ 01 мая 2018

Python-скрипт с Selenium и Chromedriver в безголовом режиме в CentOS7 работает нормально при вызове вручную.

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('no-sandbox')
self.driver = webdriver.Chrome(chrome_options=options)

При запуске скрипта crontab, однако, он выдает это исключение в строке 4 (выше). Полный возврат внизу.

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally (Driver info: chromedriver=2.38.552522

Cron настроен с помощью crontab -e

* * * * * cd /to/path && /to/path/.virtualenvs/selenium/bin/python /to/path/script.py -t arg1 arg2 > /to/path/log.txt 2>&1

Это вызвало ошибки, такие как chromedriver, не может быть найден. Затем я добавил следующее в crontab -e.
1) Используйте bash вместо sh, хотя запуск сценария python вручную из sh работает нормально
2) Укажите путь к chromedriver

SHELL=/bin/bash
PATH=/usr/local/bin/

Я пробовал разные предложения, найденные в Интернете, такие как добавление параметров --no-sandbox в chromedriver в моем скрипте. Все не помогло. Обратите внимание, что я использую chrome в режиме без головы, поэтому я думаю, что мне не нужен этот экспорт DISPLAY =: 0 в cron или в библиотеках Xvfb, как это было раньше.

Python 3.6.1
Селен 3.4.3
Chromedriver 2.38.552522
google-chrome-stable 65.0.3325.181

Полный возврат

Exception in thread <name>:
Traceback (most recent call last):
  File "/usr/lib64/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/lib64/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/path/to/script.py", line 53, in start
    self.site_scrape(test_run)
  File "/path/to/script.py", line 65, in site
    self.driver = webdriver.Chrome(chrome_options=options)
  File "/home/<user>/.virtualenvs/selenium/lib64/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 69, in __init__
    desired_capabilities=desired_capabilities)
  File "/home/<user>/.virtualenvs/selenium/lib64/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 98, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/home/<user>/.virtualenvs/selenium/lib64/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 188, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/home/<user>/.virtualenvs/selenium/lib64/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute
    self.error_handler.check_response(response)
  File "/home/<user>/.virtualenvs/selenium/lib64/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Linux 4.14.12-x86_64-linode92 x86_64)

1 Ответ

0 голосов
/ 24 мая 2018

Наконец-то нашел решение. Мальчик, это давало мне покоя слишком долго. Проблема заключалась в следующем отсутствующих каталогах PATH: / usr / bin, / usr / sbin в cron. Полный cron теперь выглядит так:

SHELL=/bin/bash
PATH=/usr/local/bin/:/usr/bin:/usr/sbin
* * * * * cd /to/path && /to/path/.virtualenvs/selenium/bin/python /to/path/script.py -t arg1 arg2 > /to/path/log.txt 2>&1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...