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

Docker环境下Python+Selenium无法加载Chrome配置文件及Cookie

解决方案:Docker环境下Selenium加载Chrome配置文件丢失Cookie问题

问题根源

  1. 跨平台配置不兼容:Windows本地的Chrome用户数据目录结构、权限模型与Linux容器内的Chrome不匹配,直接挂载会导致Linux Chrome无法识别原有配置,甚至清空数据。
  2. 权限破坏:容器内以root用户运行Chrome,会修改挂载目录的文件权限,不仅导致配置加载异常,还会破坏本地Windows目录的可访问性。
  3. 版本不匹配:代码中通过ChromeDriverManager自动下载的ChromeDriver版本,与容器内预安装的Chrome版本不一致,引发兼容性问题。

具体解决步骤

1. 生成Linux兼容的Chrome配置目录

不要直接复用Windows下的profile1目录,先在容器内创建适配Linux的配置:

# 临时启动容器进入交互模式
docker run -it --rm -v $(pwd)/profile1:/profile1 tst_docker bash

# 在容器内启动Chrome,登录目标站点保存Cookie后退出
google-chrome --user-data-dir=/profile1

退出容器后,本地profile1目录已转为Linux兼容格式,后续挂载即可正常读取Cookie。

2. 修复目录权限问题

避免以root用户运行Chrome,防止权限破坏:

  • 修改Dockerfile,创建非root用户并切换:
# 在Dockerfile末尾添加以下内容
RUN useradd -m selenium-user
USER selenium-user
  • Linux主机提前调整本地目录权限:
chown -R 1000:1000 ./profile1

3. 强制Chrome与ChromeDriver版本匹配

弃用自动下载的ChromeDriver,直接使用容器内预安装的版本:
修改main.py中的Chrome启动代码:

# 替换原Chrome启动代码
with Chrome(service=ChromeService('/usr/bin/chromedriver'), options=options) as driver:
    driver.get('https://www.google.com/')
    time.sleep(10)
    driver.save_screenshot(f'tst1.png')

也可以在Dockerfile中固定Chrome和ChromeDriver版本,彻底避免版本差异:

# 替换原Chrome/ChromeDriver下载段,指定固定版本(示例为118.0.5993.70)
ENV CHROME_VERSION=118.0.5993.70
RUN wget --no-verbose -O google-chrome.deb "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" && \
    dpkg -i google-chrome.deb && \
    apt-get install -y -f --no-install-recommends && \
    rm google-chrome.deb

RUN wget --no-verbose https://chromedriver.storage.googleapis.com/${CHROME_VERSION}/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip -d /usr/bin && \
    chmod +x /usr/bin/chromedriver && \
    rm chromedriver_linux64.zip

4. 优化Selenium配置

调整ChromeOptions参数,提升配置兼容性:

def set_options():
    options = ChromeOptions()

    options.add_argument("start-maximized")
    options.add_argument("--headless=new")  # 新版无头模式兼容性更强
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--disable-browser-side-navigation")
    options.add_argument("--disable-gpu")
    options.add_argument("--window-size=1920,1080")
    options.add_argument('--ignore-certificate-errors')
    options.add_argument('--allow-running-insecure-content')

    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument('--user-data-dir=/profile1')
    # 若配置目录下有多个子配置,可指定具体目录
    # options.add_argument('--profile-directory=Default')

    return options

额外注意事项

  • 禁止在Windows和Linux容器之间共享同一个配置目录,二者的Chrome配置结构存在差异,会互相破坏数据。
  • 若需迁移Windows下的Cookie,可手动导出为JSON格式,通过driver.add_cookie()逐个添加,避免跨平台配置冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:17:22