Docker中运行Selenium Grid无法自动下载文件的问题求助
解决方案
1. 配置Chrome自动下载PDF,禁用确认弹窗
在Python代码初始化ChromeDriver时,添加专属配置强制Chrome自动下载PDF到指定目录,彻底取消确认弹窗:
from selenium import webdriver from selenium.webdriver.chrome.options import Options def get_chrome_driver(): chrome_options = Options() # 设定下载目录(对应selenium容器内的挂载路径) download_path = "/home/seluser/Downloads" # 核心下载偏好设置 prefs = { "download.default_directory": download_path, "download.prompt_for_download": False, "profile.default_content_settings.popups": 0, # 强制PDF直接下载,不在浏览器内打开 "plugins.always_open_pdf_externally": True, # 关闭安全下载提示(部分远程环境需要) "safebrowsing.enabled": True } chrome_options.add_experimental_option("prefs", prefs) # 适配远程服务器的无头模式配置 chrome_options.add_argument("--headless=new") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") # 连接到Selenium Grid服务 driver = webdriver.Remote( command_executor="http://selenium-grid-service:4444/wd/hub", options=chrome_options ) return driver
2. 统一容器文件挂载目录,修复权限问题
当前两个服务的下载目录挂载路径不统一,且远程服务器可能存在权限限制,调整如下:
修改docker-compose.yml的挂载配置:
services: selenium-grid-service: # 保留原有其他配置 volumes: - ./downloaded_files:/downloads # 统一挂载到容器内/downloads目录 environment: - DOWNLOAD_DIR=/downloads # 可选:通过环境变量传递下载路径给代码 publican-back-service: # 保留原有其他配置 volumes: - ./downloaded_files:/downloads # 与selenium容器共享同一挂载目录
同时在远程服务器上执行命令,确保挂载目录权限符合要求:
# 创建目录(如果不存在) mkdir -p ./downloaded_files # 赋予容器内seluser用户(UID为1200)读写权限 chown 1200:1200 ./downloaded_files # 或者临时放宽权限测试 chmod 777 ./downloaded_files
3. 验证部署效果
重启容器后,检查以下内容:
- Selenium容器是否能正常向
/downloads目录写入文件 - Python应用是否能读取
/downloads下的PDF文件 - 确认代码中设置的下载路径与容器内挂载路径完全一致
内容的提问来源于stack exchange,提问作者Jesús Fragoso
相关产品推荐
相关产品推荐

