Бывает полезно работать с 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.
Если инструменты установлены, вы увидите следующий ответ:

Если 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:
Теперь можно запустить контейнеры:
Ожидаемый вывод:

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

Видим два созданных контейнера. Значит, все загружено верно. Теперь в 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

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

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

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