Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Использование Selenium с браузером Chrome в Docker

1571
6 минут чтения
Средний рейтинг статьи: 2.8

Бывает полезно работать с Selenium Python в Docker-контейнере. В связи с этим возникают вопросы о выгоде использования таких инструментов, согласовании версий chromedriver и Chromium, а также о нюансах их реализации. В этой статье мы рассмотрим основные вопросы и приведём решения часто встречающихся проблем.

Зачем запускать Selenium в Docker?

Запуск Selenium в контейнере дает целый ряд преимуществ. 

Во-первых, вы легко переносите окружение между разными машинами, избегая конфликтов версий и зависимости от конкретной операционной системы. 

Во-вторых, контейнер с Selenium можно быстро заменить или обновить, не затрагивая другие компоненты на сервере.

В-третьих, Selenium с Docker помогает при организации CI/CD-процессов: вы можете поднять среду тестирования «с нуля» каждый раз, когда необходимо проверить вашу систему.

Облачные серверы

Масштабируемые вычислительные ресурсы
по всему миру с почасовой оплатой.

Подготовка сервера с ОС Ubuntu к работе с Selenium под Docker

Шаг первый. Установка Docker и Docker Compose

Сперва нужно удостовериться, что Docker и Docker Compose установлены на сервере:

    

Обратите внимание, что в некоторых версиях Docker Compose в терминале используется команда docker-compose, вместо docker compose.

Если инструменты установлены, вы увидите следующий ответ:

Image6

Если Docker и Docker Compose не установлены, воспользуйтесь инструкцией из другой статьи.

Шаг второй. Установка прокси для Docker Hub от Timeweb Cloud

Этот шаг необязателен, но его выполнение рекомендуется, чтобы избежать ошибок при загрузке образов из Docker Hub.

У Timeweb Cloud есть собственные бесплатные прокси для dockerhub.io. Для установки воспользуйтесь короткой инструкцией. Это займет не более пяти минут.

Пример работы с Selenium в Docker

При развертывании Selenium в контейнерах Docker важно учитывать архитектуру хоста, требования к функциональности и производительность. Официальные образы selenium/standalone-* предназначены для процессоров AMD64 (x86_64), в то время как seleniarm/standalone-* адаптированы для ARM-архитектур, таких как процессоры Apple silicon и серверные ARM64-процессоры.

Сперва создадим файл docker-compose.yml в корне проекта. Он будет содержать два сервиса:

    

Обратите внимание, что в предложенном примере файла нужно самостоятельно выбрать образ в зависимости от архитектуры системы и раскомментировать требуемую строку.

Сервис app будет использоваться для исполнения основного Python-кода. Пропишем стандартный Dockerfile для этого сервиса:

    

Этот Dockerfile использует образ Python и автоматически устанавливает зависимости.

Далее пропишем скрипт с инициализацией драйвера в main.py:

    

В файле requirements.txt можно прописать стандартный пакет зависимостей, устанавливаемый вместе с Selenium:

    

Теперь можно запустить контейнеры:

    

Ожидаемый вывод:

Image3

Проверим правильность запуска:

    

Image1

Видим два созданных контейнера. Значит, все загружено верно. Теперь в main.py можно интегрировать скрипт для работы с любым сайтом.

Отладка Selenium Docker с помощью VNC

В официальных Docker-образах Selenium (включая seleniarm/standalone-chromium, selenium/standalone-chrome и т.д.) доступ к Chrome DevTools Protocol напрямую практически всегда «перебивается» Selenium Grid. Он генерирует собственный порт для каждого сеанса и проксирует через WebSocket. Параметры вроде --remote-debugging-port=9229 игнорируются и перезаписываются Selenium, поэтому прямой доступ к порту браузера извне невозможен.

Но взаимен Docker-образы предлагают встроенную технологию VNC — Virtual Network Computing. Она похожа на TeamViewer или AnyDesk, но работает немного иначе.

Для работы VNC необходимо отключить режим headless, так как VNC передаёт изображение экрана, а если экран пуст, то и в VNC ничего не будет видно.

Подключимся к веб-сервису VNC по адресу:http://<server_ip>:7900

Image4

Далее при подключении будет запрошен пароль. Чтобы его сгенерировать, подключитесь к созданному ранее selenium-container через терминал:

    

Image2

Затем введём команду:

    

В интерактивном режиме появится предложение ввести пароль и подтвердить его.

Image5

Теперь введите созданный пароль в веб-интерфейсе VNC. Вы перейдете к управлению браузера, под управлением Selenium в Docker.

Тут же можно открыть DevTools для просмотра элементов в DOM-дереве или отладить получение запросов.

Подготовили для вас выгодные тарифы на облачные серверы

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Таким образом, запуск Selenium в Docker-контейнерах облегчает переносимость окружения и снижает риск конфликта версий между инструментами, а при необходимости позволяет визуально отлаживать тесты через VNC. Важно лишь правильно выбрать образ для нужной архитектуры и не забыть отключить режим headless, если планируется использование графического интерфейса. Всё это обеспечивает более гибкую и удобную инфраструктуру для тестирования и ускоряет интеграцию Selenium в CI/CD-пайплайн.

1571
6 минут чтения
Средний рейтинг статьи: 2.8
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server