Selenium и Chromedriver¶
Облако Амвера использует под капотом контейнеры. Чтобы было возможно использовать selenium в контейнере, надо поставить необходимые библиотеки и указать порт дисплея в этом контейнере.
Использование готового образа¶
В этом образе уже имеется нужный нам ChromeDriver и Chrome
Шаги установки:
Создаем Dockerfile в директории проекта.
В Dockerfile указываем образ c
FROM joyzoursky/python-chromedriver:3.9
Назначаем WORKDIR и указываем файлы приложения, которые будут включены в итоговый образ (все файлы в папке проекта):
WORKDIR /app COPY . /app
Добавляем команду на установку зависимостей (укажем их чуть позже):
RUN pip install -r requirements.txt
Задаём команду для запуска приложения:
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