Python,Selenium和Docker
tools
tome-of-xp
分别单独运行Selenium的容器和包含Python代码的容器。 在Pyton中使用如下方式连接到Selenium容器:
from selenium import webdriver
def _init_driver(self):
= Options()
chrome_options "--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument(return webdriver.Remote(
='http://selenium:4444/wd/hub',
command_executor=chrome_options
options )
http://selenium:4444
是关键,其中是Selenium容器的名称。
在启动Python容器之前,先启动Selenium容器:
docker network create my-network
docker run -d \
--name selenium \
--network my-network \
-p 4444:4444 \
-e SE_NODE_MAX_SESSIONS=2 \
-e SE_NODE_OVERRIDE_MAX_SESSIONS=true \
-e SE_SESSION_REQUEST_TIMEOUT=300 \
-e SE_SESSION_RETRY_INTERVAL=2 \
-e SE_START_XVFB=false \
-e DISABLE_TELEMETRY=true \
-e SE_OTEL_TRACES_ENABLED=false \
-e SE_ENABLE_TRACING=false \
selenium/standalone-chrome
为了让Python容器中连接到Selenium容器,需要在同一个网络中启动Python容器:
docker run -d --name my-python-service\
--network my-network \
ghcr.io/my-python-service:latest
Docker Compose:
# docker-compose.yml
version: '3.9'
services:
selenium:
image: 'selenium/standalone-chrome:latest'
container_name: selenium
environment:
- SE_NODE_MAX_SESSIONS=2
- SE_NODE_OVERRIDE_MAX_SESSIONS=true
- SE_SESSION_REQUEST_TIMEOUT=300
- SE_SESSION_RETRY_INTERVAL=2
- SE_START_XVFB=false
- DISABLE_TELEMETRY=true
- SE_OTEL_TRACES_ENABLED=false
- SE_ENABLE_TRACING=false
ports:
- '4444:4444'
networks:
- my-custome-network
my-python-service:
image: 'my-python-service:latest'
container_name: my-python-service
depends_on:
- selenium
networks:
- my-custome-network
volumes:
- ./data:/app/data
environment:
- 'SELENIUM_URL=http://selenium:4444/wd/hub'
command: 'python3 src/main.py'
networks:
my-custome-network:
driver: bridge