如何在Selenium+geckodriver+Firefox中设置指定下载路径?
Firefox Selenium 指定下载路径无效的修复方案
你的问题出在错误地用命令行参数(add_argument)配置Firefox下载偏好,Firefox的下载路径等设置属于浏览器内部偏好,需要用set_preference方法配置,而非add_argument。以下是具体修改点和完整代码:
核心修改点
- 替换所有下载相关的
add_argument为set_preference:这些配置是Firefoxabout:config中的偏好项,不是启动命令参数 - 使用绝对路径作为下载目录:相对路径可能因工作目录问题无法被正确识别
- 补充
browser.download.useDownloadDir偏好:明确启用自定义下载目录 - 可选:添加
pdfjs.disabled避免PDF在浏览器内打开(如果下载的是PDF文件)
修改后的完整代码
import time import os from selenium import webdriver from selenium.webdriver import FirefoxOptions from selenium.webdriver.common.by import By from selenium.webdriver.firefox.service import Service as FirefoxService from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 改为绝对路径,可根据实际情况替换 download_dir = os.path.abspath("/your/absolute/download/path") firefox_options = FirefoxOptions() firefox_options.add_argument("--headless") # 配置下载偏好(替换原来的add_argument) firefox_options.set_preference("browser.download.folderList", 2) # 2=自定义路径 firefox_options.set_preference("browser.download.manager.showWhenStarting", False) firefox_options.set_preference("browser.download.dir", download_dir) firefox_options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") firefox_options.set_preference("browser.download.useDownloadDir", True) # 如果下载PDF,添加这个避免在浏览器打开 firefox_options.set_preference("pdfjs.disabled", True) # 配置WebDriver service = FirefoxService("/usr/local/bin/geckodriver") driver = webdriver.Firefox(service=service, options=firefox_options)
额外注意事项
- 确保运行Selenium的用户对目标下载路径有读写权限,比如/root目录下的路径要确认当前用户拥有操作权限
- 如果仍有问题,可检查目标路径是否存在,不存在的话提前用
os.makedirs(download_dir, exist_ok=True)创建
内容的提问来源于stack exchange,提问作者Сергей Корягин
相关产品推荐
相关产品推荐

