Докер Selenium: selenium.common.exceptions.WebDriverException: Сообщение: неожиданно завершился сервисный хроматический драйвер. Код статуса был: 127 - PullRequest
0 голосов
/ 04 января 2019

Я использую хроматический драйвер Селена в своем проекте Python.

Я успешно строю свой Dockerfile:

FROM ubuntu:17.04
FROM selenium/standalone-chrome
FROM python:3.6
RUN apt update
RUN apt-get install -y libnss3 libgconf-2-4
ADD ./requirements.txt /tmp/requirements.txt
RUN python -m pip install -r /tmp/requirements.txt
ADD . /opt/example1/
# rights?
RUN chmod +x /opt/example1/assets/chromedriver
WORKDIR /opt/example1
CMD ["python","-u","program.py"]

Но когда я запускаю свой док-контейнер, я получаю следующую ошибку:

Traceback (последний вызов был последним): файл "program.py", строка 8, в MdCrawler (MD_START_URL, "MobileDe"). Start () Файл "/opt/example1/mobile_de_crawler.py", строка 17, в init Файл self.web_driver_chrome = webdriver.Chrome (executetable_path = CHROME_DRIVER_PATH) "/Usr/local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", строка 73, в init Файл self.service.start () "/usr/local/lib/python3.6/site-packages/selenium/webdriver/common/service.py", строка 98, в начале Файл self.assert_process_still_running () "/usr/local/lib/python3.6/site-packages/selenium/webdriver/common/service.py", строка 111 в assert_process_still_running % (self.path, код_возврата) selenium.common.exceptions.WebDriverException: Сообщение: служба / opt / example1 / assets / chromedriver неожиданно завершился. Код состояния было: 127

Кто-нибудь понял, что я могу сделать, чтобы предотвратить эту ошибку? Что вызывает этот сбой?

Вот мой код инициализации, где происходит ошибка:

CHROME_DRIVER_PATH = os.path.abspath('assets/chromedriver')


class MdCrawler(Crawler):

def __init__(self, start_url, source):
    super().__init__(start_url, source)
    serialized_arr = self.read_data_from_json_file(JSON_FILE_PATH)
    self.sent_ids = [] if serialized_arr is None else serialized_arr
    >>> self.web_driver_chrome = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH)
    exit(1)

Редактировать 1:

Я отредактировал Dockerfile (добавил Ubuntu: 17.04 и aptget libnss3 libgconf-2-4). После создания образа докера я получил другую ошибку:

selenium.common.exceptions.WebDriverException: Сообщение: неизвестная ошибка: не удается найти двоичный файл Chrome (информация о драйвере: chromedriver = 2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5), платформа = Linux 4.9.125-linuxkit x86_64)

Редактировать 2:

Я добавил

RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list
RUN apt-get update
RUN apt-get install -y google-chrome-stable

На мой Dockerfile, но появляется новая ошибка:

повысить исключение_класса (сообщение, экран, трассировка стека) selenium.common.exceptions.WebDriverException: сообщение: неизвестная ошибка: Не удалось запустить Chrome: аварийный выход (неизвестная ошибка: Файл DevToolsActivePort не существует) (Процесс начался с chrome location / usr / bin / google-chrome больше не работает, поэтому ChromeDriver предполагает, что Chrome упал.) (Информация о драйвере: chromedriver = 2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5), платформа = Linux 4.9.125-linuxkit x86_64)

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Мой минимальный тестовый скрипт для хроматографа Selenium внутри моего контейнера Docker выглядит так:

import selenium.webdriver

options = selenium.webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')

driver = selenium.webdriver.Chrome(chrome_options=options)
driver.get('https://www.python.org/')
print(driver.title)
driver.close()

Похоже, вам не хватает --headless и --no-sandbox аргументов.

0 голосов
/ 04 января 2019

Вы не забыли добавить безголовый режим ?

chrome_options = Options()
chrome_options.add_argument("--headless")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...