如何在启动Selenium Firefox浏览器后修改下载路径
解决方案
浏览器启动后,修改初始的optns对象不会生效,因为浏览器已经基于初始配置完成初始化。你需要直接操作浏览器实例来动态修改当前会话的下载路径,具体实现如下:
核心思路
- 使用浏览器实例的
set_preference()方法,直接修改当前会话的下载路径配置 - 每次切换路径前,确保目标文件夹已创建,避免下载失败
- 循环中依次切换路径,执行对应下载操作
完整代码示例
from selenium import webdriver from selenium.webdriver.firefox.options import Options import os import time # 初始化浏览器基础配置 optns = Options() optns.set_preference("browser.download.folderList", 2) # 使用自定义下载路径 optns.set_preference("browser.download.manager.showWhenStarting", False) # 隐藏下载启动提示 optns.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/x-gzip") # 指定自动保存的文件类型 # 启动浏览器 browser = webdriver.Firefox(options=optns) # 定义每个文件对应的目标下载文件夹 download_targets = [ {"url": "https://example.com/file1.gz", "folder": "/Users/emrevolkanucar/Work/Ekap Py/Files/Folder1"}, {"url": "https://example.com/file2.gz", "folder": "/Users/emrevolkanucar/Work/Ekap Py/Files/Folder2"}, {"url": "https://example.com/file3.gz", "folder": "/Users/emrevolkanucar/Work/Ekap Py/Files/Folder3"} ] for target in download_targets: target_folder = target["folder"] download_url = target["url"] # 确保目标文件夹存在,不存在则创建 if not os.path.isdir(target_folder): os.makedirs(target_folder) # 动态修改当前会话的下载路径 browser.set_preference("browser.download.dir", target_folder) # 执行下载操作(示例为直接访问下载链接) browser.get(download_url) # 等待下载完成(根据文件大小调整等待时长,或用更精准的文件检测逻辑) time.sleep(6) # 关闭浏览器 browser.quit()
关键说明
- 动态修改配置:必须调用
browser.set_preference(),而非修改初始的optns对象,因为浏览器启动后仅读取当前会话的配置 - 文件夹预创建:用
os.makedirs()确保目标路径存在,否则Firefox会默认下载到系统默认路径 - 等待逻辑:建议根据实际场景优化等待方式,比如检测目标文件夹内是否出现对应文件,替代固定时长的
time.sleep()
内容的提问来源于stack exchange,提问作者Emre Volkan UCAR
相关产品推荐
相关产品推荐

