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

    Команда Simple-Server
    03.06.2026
    6 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

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

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

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

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

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

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

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

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

    docker --version docker compose version

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

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

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

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

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

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

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

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

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

    version: "3" services: app: build: . restart: always volumes: - .:/app depends_on: - selenium platform: linux/amd64 selenium: image: selenium/standalone-chromium:latest # Для AMD64 # image: seleniarm/standalone-chromium:latest # Для ARM64 container_name: selenium-container restart: unless-stopped shm_size: 2g ports: - "4444:4444" # Selenium WebDriver API - "7900:7900" # VNC Viewer environment: - SE_NODE_MAX_SESSIONS=1 - SE_NODE_OVERRIDE_MAX_SESSIONS=true - SE_NODE_SESSION_TIMEOUT=300 - SE_NODE_GRID_URL=http://localhost:4444 - SE_NODE_DETECT_DRIVERS=false

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

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

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

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

    import time # Используем для создания задержки при проверке работоспособности браузера import os from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options # Настройки для WebDriver chrome_options = Options() chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--disable-webrtc") chrome_options.add_argument("--hide-scrollbars") chrome_options.add_argument("--disable-notifications") chrome_options.add_argument("--start-maximized") SELENIUM_REMOTE_URL = os.getenv("SELENIUM_REMOTE_URL", "http://selenium:4444/wd/hub") driver = webdriver.Remote( command_executor=SELENIUM_REMOTE_URL, options=chrome_options ) # Открываем тестовую страницу driver.get("https://www.simple-server.tech") time.sleep(9999) # Завершаем работу WebDriver driver.quit()

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

    attrs==25.1.0 certifi==2025.1.31 h11==0.14.0 idna==3.10 outcome==1.3.0.post0 PySocks==1.7.1 selenium==4.28.1 sniffio==1.3.1 sortedcontainers==2.4.0 trio==0.28.0 trio-websocket==0.11.1 typing_extensions==4.12.2 urllib3==2.3.0 websocket-client==1.8.0 wsproto==1.2.0

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

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

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

    docker exec -it selenium-container bash

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

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

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


    Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация? Посмотрите все доступные тарифы

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны