Драйвер Selenium Chrome в контейнере Docker не запускается

Я новичок в докере. Мне нужно очистить веб-сайт с помощью драйвера Selenium Chrome от Python из контейнера докера.

Докерфайл:

FROM python:3.11-slim-buster
# Install dependencies
RUN apt-get update && apt-get install -y wget unzip
# Download ChromeDriver
RUN wget https://storage.googleapis.com/chrome-for-testing-public/128.0.6613.84/win32/chrome-win32.zip
RUN unzip chrome-win32.zip -d /usr/local/bin/
# Copy your project files
COPY . /app
USER root
# Set the working directory
WORKDIR /app
# Install Python dependencies
RUN pip install selenium==3.141.0
RUN pip install urllib3==1.26.16
RUN pip install webdriver-manager
CMD ["python3", "seleniumdriver.py"]

Код Python:

from selenium import webdriver
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--headless")
chromeOptions.add_argument("--no-sandbox")
driver = webdriver.Chrome(
    chrome_options=chromeOptions
)
driver.get("https://www.google.com/")
driver.quit()

Сборка Docker: docker -t seleniumdriver. Docker Run: драйвер docker selenium ОС: Windows 10

Сборка Docker прошла успешно, но запуск Docker выдает ошибку.

raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

Пробовал разные подходы, но мне ничего не помогло.

1. Сначала вам необходимо загрузить версию драйвера Chrome для Linux, которую вы используете, поскольку вы используете базу образа Docker Python:3.11-slim-buster в Linux. Вы можете использовать эту ссылку, чтобы получить его: Storage.googleapis.com/chrome-for-testing-public/128.0.6613.‌​84/… 2. После загрузки добавьте папку, содержащую «chromedriver». исполняемые файлы в ваш PATH. Вот и все, это должно решить вашу проблему.

BEN HACHME EL HASSANE 28.08.2024 00:53

@BENHACHMEELHASSANE Поскольку я новичок в докере, я не знаю, где загружается Chrome. Можете ли вы поделиться кодом о том, как переместить Chrome на нужный путь и добавить этот путь в код Python.

user15069057 28.08.2024 07:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Небольшое изменение заставило это работать.

Докерфайл

От

...
RUN apt-get update && apt-get install -y wget unzip
# Download ChromeDriver
RUN wget https://storage.googleapis.com/chrome-for-testing-public/128.0.6613.84/win32/chrome-win32.zip
RUN unzip chrome-win32.zip -d /usr/local/bin/
...

К

RUN apt-get update && apt-get install -y wget unzip chromium-driver

Кроме того, чтобы убедиться, что эти изменения работают, я заставляю браузер сделать снимок экрана.

Для проверки вы можете использовать следующие шаги.

Докерфайл

FROM python:3.11-slim-buster
# Install dependencies
RUN apt-get update && apt-get install -y wget unzip chromium-driver
# Copy your project files
COPY . /app
USER root
# Set the working directory
WORKDIR /app
# Install Python dependencies
RUN pip install selenium==3.141.0
RUN pip install urllib3==1.26.16
RUN pip install webdriver-manager

VOLUME ["/app"]

CMD ["python3", "seleniumdriver.py"]

селендрайвер.py

from selenium import webdriver
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--headless")
chromeOptions.add_argument("--no-sandbox")
driver = webdriver.Chrome(
    options=chromeOptions
)
driver.get("https://www.google.com/")
driver.get_screenshot_as_file("screenshot.png")
driver.quit()

Команды

$ docker build -t seleniumdriver .
$ docker run --name seleniumdriver -p 80:80 -v .:/app seleniumdriver 

Вы могли видеть screenshot.png в той же папке.

Можете ли вы объяснить эту команду: -p 80:80 -v .:/app seleniumdriver. Почему мы привязываем порт 80 хост-машины к порту 80 докер-контейнера?

user15069057 28.08.2024 21:13
-p предназначен для переадресации портов, сопоставляя порт 80 в контейнере с портом 80 на локальном компьютере. Возможно, в этом нет необходимости; изначально он был добавлен только для того, чтобы браузер мог получить доступ к сети. -v — для монтирования файловой системы.
Yu Wei Liu 28.08.2024 22:02

Могу ли я запустить вышеуказанный образ докера в вычислительном сервисе AWS Fargate. Будет ли это работать? Если это не сработает, что мне нужно сделать, чтобы это заработало. Мое требование — запустить этот образ докера на дальнем шлюзе AWS.

user15069057 28.08.2024 22:42

Другие вопросы по теме

Spring Boot Jar не может найти файлы автоматической конфигурации
Конфигурация, позволяющая веб-серверу использовать сертификаты, установленные при развертывании Kubernetes
Реестр контейнеров Azure недоступен через частную конечную точку [403 запрещено]
Как развернуть приложение Angular 18 SSR с помощью Docker, docker-compose и NGINX?
Ошибка Kubernetes 502 Bad Gateway: сбой подключения() (111: соединение отклонено) при подключении к восходящему каналу
(111: Соединение отклонено) при подключении к восходящему каналу — многоконтейнерное приложение NGINX/Docker
(InaccessibleImage) Изображение из экземпляра контейнера Azure
Пользовательской игре не хватает доступа на запись в журнал с помощью Docker Compose
Подключение к серверу на «localhost» (::1), порт 5432 не удалось: соединение отклонено. Сервер работает на этом хосте и принимает соединения TCP/IP?
Флаг docker-compose -e не переопределяет значение по умолчанию