You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中Python运行Selenium Chrome失败问题求助

解决Docker容器中Selenium Chrome无法启动的问题

本地正常运行的网页爬虫,在Docker容器中执行时触发SessionNotCreatedException,错误提示Chrome启动后异常退出、DevToolsActivePort文件不存在,核心修复点如下:


1. 修复Python代码中的ChromeOptions重置问题

原代码里配置完所有Chrome启动参数后,又重复执行了chrome_options = Options(),导致之前的所有配置全部丢失,这是Chrome无法启动的核心原因。同时补充缺失的依赖导入,并升级无头模式参数:

修复后的scrape_ev_files.py关键代码:

import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 补充缺失的Options导入
from selenium.webdriver.chrome.options import Options


def init_driver(local_download_path):
    os.makedirs(local_download_path, exist_ok=True)

    # Set Chrome Options    
    chrome_options = Options()
    # 使用Selenium 4.10+推荐的新版无头模式,兼容性更强
    chrome_options.add_argument("--headless=new")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--remote-debugging-port=9222")
    # 添加窗口大小参数,避免无头模式下布局异常
    chrome_options.add_argument("--window-size=1920,1080")

    prefs = {
        "download.default_directory": local_download_path,
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
        "safebrowsing.enabled": True
    }
    chrome_options.add_experimental_option("prefs", prefs)

    # Set up the driver
    service = Service()
    # 移除重复的chrome_options = Options(),保留之前的配置
    driver = webdriver.Chrome(service=service, options=chrome_options)

    # Set download behavior
    driver.execute_cdp_cmd("Page.setDownloadBehavior", {
        "behavior": "allow",
        "downloadPath": local_download_path
    })

    return driver

# 剩余主函数代码保持不变

2. 调整Dockerfile的权限与镜像优化

确保seluser对工作目录有读写权限,同时清理冗余缓存减小镜像体积:

修复后的Dockerfile:

FROM selenium/standalone-chrome:latest

# 设置工作目录
WORKDIR /usr/src/app

# 复制应用文件
COPY . .

# 以root用户安装Python依赖
USER root
RUN apt-get update && apt-get install -y --no-install-recommends python3 python3-pip python3-venv \
    && rm -rf /var/lib/apt/lists/*  # 清理APT缓存,减小镜像体积

# 创建虚拟环境并安装Python依赖
RUN python3 -m venv venv \
    && . venv/bin/activate && pip install --no-cache-dir -r requirements.txt

# 确保seluser拥有当前目录的读写权限
RUN chown -R seluser:seluser /usr/src/app

# 切换回seluser运行程序
USER seluser

# 启动命令
CMD ["/bin/bash", "-c", "source venv/bin/activate && python -m scrape_ev_files"]

3. 容器运行优化(可选)

运行容器时添加共享内存参数,避免容器内内存不足导致Chrome崩溃:

docker build -t my_scraper .
docker run --rm -t --shm-size=2g my_scraper

内容的提问来源于stack exchange,提问作者Max Power

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:10:05