запуск браузера selenium Chrome в контейнере docker

#selenium #docker #docker-compose #selenium-chromedriver

#selenium #docker #docker-создать #selenium-chromedriver

Вопрос:

Я пытаюсь использовать драйвер selenium Chrome с docker. К сожалению, я не могу заставить его работать. Когда я создаю docker-compose для запуска контейнера, он выходит из строя с

 "container_name exited with code 1" error. 
  

Используя docker logs -t -f, я смог получить приведенную ниже ошибку.

 selenium.common.exceptions.WebDriverException: 
Message: unknown error: Chrome failed to start: exited abnormally
  

Я знаю, что были другие сообщения о переполнении стека по этой проблеме, но все решения включают добавление опций chrome. Я уже пробовал добавлять различные параметры драйвера Chrome, но безуспешно. Смотрите код ниже.

 options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=socks5://localhost:9050')
options.add_argument('disable-infobars')
options.add_argument('--disable-extensions')
options.add_argument('--no-sandbox')
options.add_argument('--disable-setuid-sandbox')
options.add_argument('--headless')
options.add_argument('--start-maximized') 
options.add_argument('window-size=1200x800')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options, desired_capabilities=caps)
  

Я пробовал различные комбинации приведенного выше кода, но безуспешно. Я также попытался закомментировать опцию ‘proxy = server’ и запустить контейнер, но я получаю ту же ошибку. Когда я запускаю обычный код Python, он работает без каких-либо ошибок.

Ниже приведена соответствующая часть моего файла Dockerfile.

 # Extra suff chrome driver needs
RUN apt-get install -y libglib2.0-0=2.50.3-2 
libnss3=2:3.26.2-1.1 deb9u1 
libgconf-2-4=3.2.6-4 b1 
libfontconfig1=2.11.0-6.7 b1

# need this for chrome driver, not just ui 
RUN apt-get install -y wget xvfb unzip

# Set up the Chrome PPA
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list

# Update the package list and install chrome
RUN apt-get update -y
RUN apt-get install -y google-chrome-stable

# Set up Chromedriver Environment variables
ENV CHROMEDRIVER_VERSION 2.19
ENV CHROMEDRIVER_DIR /chromedriver
RUN mkdir $CHROMEDRIVER_DIR

# Download and install Chromedriver
RUN wget -q --continue -P $CHROMEDRIVER_DIR "http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip"
RUN unzip $CHROMEDRIVER_DIR/chromedriver* -d $CHROMEDRIVER_DIR

# Put Chromedriver into the PATH
ENV PATH $CHROMEDRIVER_DIR:$PATH
  

Комментарии:

1. Просто выкидываю это, поскольку я не уверен, что это причина: вы выполняете apt-get google-chrome-stable, который, как я предполагаю, загрузит последнюю версию браузера chrome. Однако вы специально используете ChromeDriver версии v2.19, которая является действительно старой версией. Имеем ли мы дело с несоответствием совместимости между chromedriver и используемым браузером Chrome?

2. Это была проблема, спасибо! Я потратил много часов на это. Использование ChromeDriver 2.46 вместо 2.19 исправило это.

3. превратите свой комментарий в ответ, и я приму его

4. Приятно слышать, что это работает!!! 🙂 Ниже приведен правильный ответ.

Ответ №1:

Вы столкнулись с несовместимостью между используемыми версиями браузера chromedriver и chrome.

Вот две строки, о которых идет речь:

RUN apt-get install -y google-chrome-stable

Вышесказанное означает, что вы загрузите последнюю версию браузера Chrome.

ENV CHROMEDRIVER_VERSION 2.19

Однако здесь вы специально используете ChromeDriver версии v2.19, которая является действительно старой версией.

Вам нужно будет использовать совместимые версии, которые обычно можно найти в примечаниях к выпуску: http://chromedriver.chromium.org/downloads