Python,Selenium和Docker

tools
tome-of-xp
作者

Luozx

发布于

2024-11-29 00:00

分别单独运行Selenium的容器和包含Python代码的容器。 在Pyton中使用如下方式连接到Selenium容器:

from selenium import webdriver
def _init_driver(self): 
        chrome_options = Options()
        chrome_options.add_argument("--headless")
        chrome_options.add_argument("--disable-gpu")
        chrome_options.add_argument("--no-sandbox")
        return webdriver.Remote(
            command_executor='http://selenium:4444/wd/hub',
            options=chrome_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
回到顶部

二次使用