Selenium и Chromedriver

Облако Амвера использует под капотом контейнеры. Чтобы было возможно использовать selenium в контейнере, надо поставить необходимые библиотеки и указать порт дисплея в этом контейнере.

Использование готового образа

В этом образе уже имеется нужный нам ChromeDriver и Chrome

Шаги установки:

  1. Создаем Dockerfile в директории проекта.

  2. В Dockerfile указываем образ c

    FROM joyzoursky/python-chromedriver:3.9
    
  3. Назначаем WORKDIR и указываем файлы приложения, которые будут включены в итоговый образ (все файлы в папке проекта):

    WORKDIR  /app
    COPY  .  /app
    
  4. Добавляем команду на установку зависимостей (укажем их чуть позже):

    RUN  pip  install  -r  requirements.txt
    
  5. Задаём команду для запуска приложения:

    CMD ["python", "main.py"]
    

Получившийся Dockerfile:

FROM  joyzoursky/python-chromedriver:3.9
WORKDIR  /app
COPY  .  /app
RUN  pip  install  -r  requirements.txt
CMD  ["python",  "main.py"]

Примечание

Вместо версии 3.9 можно указать другую версию Python, которая вам нужна и поддерживается автором образа.

Создание своего образа с ChromeDriver

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

В приведенном примере за базовый образ взят образ python:3.8 который можно заменить на подходящий.

# задаем базовый образ (вместо 3.8 можно указать другую версию Python)
FROM python:3.8

# устанавливаем google-chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
RUN apt-get -y update
RUN apt-get install -y google-chrome-stable

# выставляем нужный порт дисплея
ENV DISPLAY=:99

Пример

Пример будет выводить Title страницы www.python.org

Добавим в корень проекта следующеие файлы:

  • requirements.txt

    selenium==4.17.2
    
  • amvera.yml

    meta:
      environment: docker
      toolchain:
        name: docker
        version: latest
    build:
      dockerfile: Dockerfile
      skip: false
    run:
      persistenceMount: /data
      containerPort: 80
    
  • Dockerfile

    FROM  joyzoursky/python-chromedriver:3.9
    WORKDIR  /app
    COPY  .  /app
    RUN  pip  install  -r  requirements.txt
    CMD  ["python",  "main.py"]
    
  • main.py

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    
    driver = webdriver.Chrome(options=chrome_options)
    driver.get("https://www.python.org")
    print(driver.title)
    
    driver.close()
    

В случае правильной работы программы в консоль выведется текст: Welcome to Python.org

Видеопример депдлоя Python-приложения с Selenium