在Ubuntu EC2实例上通过Selenium设置Chrome下载目录的问题
Ubuntu EC2实例中Selenium Chrome下载目录设置不生效问题解决
问题描述
在Ubuntu EC2实例上使用Selenium控制Chrome时,尝试将下载目录设置为/home/ubuntu/resolucion,但下载文件始终保存到脚本main.py所在的/home/ubuntu目录。已尝试直接写死绝对路径(不使用os模块),但仍未生效。该代码在本地电脑可正常运行,且浏览器日志、脚本执行过程无任何报错。
代码示例(main.py)
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import os options = webdriver.ChromeOptions() options.add_argument("--no-sandbox") options.add_argument("--headless") dir_base = os.path.abspath(os.curdir) carpeta_resolucion = os.path.join(dir_base, "resolucion") options.add_experimental_option("prefs", { "download.default_directory": carpeta_resolucion, "browser.downloads.dir": carpeta_resolucion, "directory_upgrade": True, "download.prompt_for_download": False, "download.extensions_to_open": "application/xml", "safebrowsing.enabled": True }) print(options.to_capabilities()) driver = webdriver.Chrome(service=Service( ChromeDriverManager().install()), options=options)
options.to_capabilities()输出
{'browserName': 'chrome', 'pageLoadStrategy': 'normal', 'goog:chromeOptions': {'prefs': {'download.default_directory': '/home/ubuntu/resolucion', 'browser.downloads.dir': '/home/ubuntu/resolucion', 'directory_upgrade': True, 'download.prompt_for_download': False, 'download.extensions_to_open': 'application/xml', 'safebrowsing.enabled': True}, 'extensions': [], 'args': ['--no-sandbox', '--headless']}}
解决步骤
- 检查并修复目录权限
确保目标下载目录存在且当前用户拥有读写权限:
mkdir -p /home/ubuntu/resolucion chown ubuntu:ubuntu /home/ubuntu/resolucion chmod 755 /home/ubuntu/resolucion
- 添加
--disable-dev-shm-usage参数
EC2实例默认/dev/shm空间较小,可能导致Chrome配置异常,在ChromeOptions中添加该参数:
options.add_argument("--disable-dev-shm-usage")
- 直接使用绝对路径
避免依赖当前工作目录,直接指定完整绝对路径:
carpeta_resolucion = "/home/ubuntu/resolucion"
- 调整下载偏好配置
移除或修正与下载文件类型不匹配的配置项,确保目录升级设置生效:
options.add_experimental_option("prefs", { "download.default_directory": "/home/ubuntu/resolucion", "download.directory_upgrade": True, "download.prompt_for_download": False, "safebrowsing.enabled": True, # 若下载文件不是XML格式,注释或删除此行 # "download.extensions_to_open": "application/xml" })
- 验证Chrome与ChromeDriver版本匹配
确保两者版本一致(允许相差1个大版本),执行以下命令检查:
google-chrome --version chromedriver --version
内容的提问来源于stack exchange,提问作者Rohalt
相关产品推荐
相关产品推荐

