
本文详解如何在 Selenium 4.12 及以上版本中正确启用浏览器下载管理能力,解决 WebDriverException: You must enable downloads 错误,并演示获取可下载文件列表、触发下载及保存文件的全流程。
本文详解如何在 selenium 4.12 及以上版本中正确启用浏览器下载管理能力,解决 `webdriverexception: you must enable downloads` 错误,并演示获取可下载文件列表、触发下载及保存文件的全流程。
在 Selenium 4.12+ 版本中,原生支持了服务端托管式文件下载管理(Managed Downloads),但该功能默认关闭。仅配置 Chrome 的 download.default_directory 等偏好设置(prefs)已不再足够——必须显式启用下载管理能力,否则调用 driver.get_downloadable_files() 将抛出 WebDriverException: You must enable downloads in order to work with downloadable files.。
✅ 正确启用下载功能的三要素
要成功使用 get_downloadable_files() 和 download_file(),需同时满足以下三点:
- 客户端启用下载能力:通过 options.enable_downloads = True 设置 WebDriver 选项;
- 服务端启用托管下载(适用于 Remote WebDriver / Grid):启动 Selenium Server 或 Grid 节点时添加 --enable-managed-downloads true 参数;
- 保留传统下载路径配置(可选但推荐):仍需设置 download.default_directory 以确保浏览器 UI 下载行为一致(如手动点击下载链接时生效)。
⚠️ 注意:若使用本地 webdriver.Chrome()(非 Remote),第 2 点不适用;但 enable_downloads = True 仍是强制要求,且必须在初始化 driver 前设置。
95Shop仿醉品商城下载95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we
✅ 完整可运行示例(本地 Chrome)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os
# 1. 配置 Chrome 选项
options = Options()
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-popup-blocking")
# ✅ 关键:启用 Selenium 托管式下载(必需)
options.enable_downloads = True
# ✅ 传统下载路径(兼容手动下载与 UI 行为)
download_dir = os.path.abspath("/Users/abderrahim/Documents/cv_apec")
options.add_experimental_option(
"prefs",
{
"download.default_directory": download_dir,
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": False,
},
)
# 2. 启动浏览器
driver = webdriver.Chrome(options=options)
try:
# 访问含下载链接的页面(示例)
driver.get("https://example.com/resume.pdf") # 或触发下载的页面
# 3. 获取当前页面所有可被 Selenium 识别的待下载文件(需页面已触发下载请求)
downloadable_files = driver.get_downloadable_files()
print(f"发现 {len(downloadable_files)} 个待下载文件:{downloadable_files}")
# 4. 下载第一个文件到指定目录(自动重命名避免冲突)
if downloadable_files:
target_path = os.path.join(download_dir, "fetched_resume.pdf")
driver.download_file(downloadable_files[0], target_path)
print(f"✅ 已下载至:{target_path}")
finally:
driver.quit()⚠️ 常见问题与注意事项
get_downloadable_files() 返回空列表?
请确认:① 页面中已实际触发下载请求(如点击 或提交表单);② 下载请求由当前会话发起(跨域或 iframe 内下载可能不可见);③ 浏览器未拦截弹窗或安全策略阻止下载。-
Remote WebDriver / Grid 用户必看:
启动 Selenium Standalone 或 Node 时,必须添加参数:java -jar selenium-server-4.x.jar standalone --enable-managed-downloads true
或在 Node 配置中加入 "enableManagedDownloads": true。
-
不支持旧版 Selenium(:
enable_downloads 属性和 get_downloadable_files() 是 4.12+ 新增 API,升级命令:pip install --upgrade selenium
替代方案(不依赖托管下载):
若因环境限制无法启用托管下载,可改用「监听下载目录变化」方式(如轮询 os.listdir() + 文件大小稳定判断),但该方法鲁棒性较低,不推荐用于生产环境。
✅ 总结
Selenium 的现代下载管理是一套协同机制:客户端开启 options.enable_downloads 是前提,服务端配合 --enable-managed-downloads 是保障,而传统 prefs 配置则是用户体验兜底。三者结合,才能稳定调用 get_downloadable_files() 与 download_file(),实现自动化文件抓取闭环。务必检查 Selenium 版本并按规范配置,即可彻底解决下载启用异常问题。










