Docker Y Docker-Compose Para Proyecto Con Selenium Y Python


Hace un tiempo estaba desarrollando un bot que interactuaba con una web. El bot estaba hecho en python y Selenium. Quería dockerizar la aplicación para correrla con un solo comando en cualquier parte y no me encontré con ninguna solución u opción que funcionara o que no tuviera que usar una imagen custom de docker, por lo que hize mi propia versión que corre con un docker seguro no custom en el cual se descargan e instalan todo lo necesario para poder correr tu script en python con selenium. También cree su docker-compose para hacerlo aún más sencillo y poder correrlo en modo gráfico y ver el navegador por pantalla si estoy testeando.


Aquí dejo lo archivos:


requeriments.txt

selenium==4.12.0

Se puede usar con otras versiones de Selenium.


main.py

from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver import ActionChains
...

def main():
tu_codigo.....

if __name__ == '__main__':
main()

Dockerfile

FROM python:3.9

# install google chrome
RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | \
tee -a /etc/apt/sources.list.d/google.list && \
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | \
apt-key add - && \
apt-get update && \
apt-get install -y google-chrome-stable libxss1


RUN BROWSER_MAJOR=$(google-chrome --version | sed 's/Google Chrome \([0-9]*\).*/\1/g') && \
wget https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_${BROWSER_MAJOR} -O chrome_version && \
wget https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/`cat chrome_version`/linux64/chromedriver-linux64.zip && \
unzip chromedriver-linux64.zip && \
mv chromedriver-linux64/chromedriver /usr/local/bin/ && \
DRIVER_MAJOR=$(chromedriver --version | sed 's/ChromeDriver \([0-9]*\).*/\1/g') && \
echo "chrome version: $BROWSER_MAJOR" && \
echo "chromedriver version: $DRIVER_MAJOR" && \
if [ $BROWSER_MAJOR != $DRIVER_MAJOR ]; then echo "VERSION MISMATCH"; exit 1; fi


COPY requirements.txt /app/
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt

COPY main.py .

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


docker-compose.yml

version: '3.8'

services:
selenium-script:
build: .
environment:
- DISPLAY=unix$DISPLAY
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
- .:/app
privileged: true
stdin_open: true
tty: true


Modo de uso


Para correrlo debes ejecutar:
docker-compose run selenium-script

Si quieres poder ver el navegador cuando corras el docker debes darle permiso al usuario docker para que acceda al servidor x11, que es la base de la interfaz gráfica de usuario en estos sistemas Unix.
xhost +local:docker



Espero les sirva
Saludos!!!

Via: www.blackploit.com
Docker Y Docker-Compose Para Proyecto Con Selenium Y Python Docker Y Docker-Compose Para Proyecto Con Selenium Y Python Reviewed by Zion3R on 18:51 Rating: 5