0

0

使用 Selenium 4.12+ 实现浏览器文件自动下载的完整配置指南

聖光之護

聖光之護

发布时间:2026-02-16 10:22:01

|

836人浏览过

|

来源于php中文网

原创

使用 Selenium 4.12+ 实现浏览器文件自动下载的完整配置指南

Selenium 4.12 起新增原生下载管理能力,需显式启用 enable_downloads 并配合 Grid 参数,才能调用 get_downloadable_files() 和 download_file() 等方法,否则会抛出“WebDriverException: You must enable downloads”错误。

selenium 4.12 起新增原生下载管理能力,需显式启用 `enable_downloads` 并配合 grid 参数,才能调用 `get_downloadable_files()` 和 `download_file()` 等方法,否则会抛出“webdriverexception: you must enable downloads”错误。

在 Selenium 4.12 及更高版本中,浏览器文件下载已从“依赖前端行为模拟”升级为 WebDriver 原生支持的能力。这意味着你不再需要监听网络请求、解析响应头或手动触发 click() + time.sleep() 等不可靠方式——而是可通过标准化 API 安全、可靠地获取待下载项并执行本地保存。但该功能默认关闭,必须同时满足服务端与客户端双重启用条件。

✅ 正确启用下载管理的两个必要条件

  1. 服务端(Grid / Standalone Server)启用托管下载
    启动 Selenium Server(如 selenium-server-4.x.jar)时,必须添加参数:

    java -jar selenium-server-4.18.1.jar standalone --enable-managed-downloads true

    ⚠️ 注意:若使用 webdriver.Remote() 连接远程服务(包括 Docker、云平台或本地 Grid),此参数必不可少;若使用 webdriver.Chrome() 直连本地浏览器(即非 Remote 模式),则无需此参数,但仍需客户端启用。

  2. 客户端(Python 脚本)启用下载能力
    在初始化 ChromeOptions 时,必须设置 options.enable_downloads = True(这是关键!旧版 prefs 配置仅影响浏览器 UI 行为,不激活 WebDriver 下载 API):

    from selenium import webdriver
    
    options = webdriver.ChromeOptions()
    options.add_argument("--disable-popup-blocking")
    # ✅ 必须启用:激活 WebDriver 原生下载管理
    options.enable_downloads = True
    
    # ? 可选:指定默认下载目录(仅影响浏览器 UI,不影响 download_file())
    options.add_experimental_option("prefs", {
        "download.default_directory": r"/Users/abderrahim/Documents/cv_apec",
        "download.prompt_for_download": False,
        "safebrowsing.enabled": False  # 防止 Chrome 安全拦截
    })
    
    # 若连接远程服务(如 Grid)
    driver = webdriver.Remote(
        command_executor="http://localhost:4444/wd/hub",
        options=options
    )
    
    # 若本地启动 Chrome(无需 Grid)
    # driver = webdriver.Chrome(options=options)

✅ 使用下载 API 的标准流程

启用后,即可按三步安全操作:

# 1. 导航到含下载链接的页面
driver.get("https://example.com/resume.pdf")

# 2. 获取当前页面所有可下载资源(返回 DownloadableFile 对象列表)
files = driver.get_downloadable_files()
print(f"发现 {len(files)} 个待下载文件")
for f in files:
    print(f"- {f.name} ({f.url}, {f.mime_type})")

# 3. 下载指定文件到目标路径(支持自定义文件名和目录)
if files:
    target_path = "/Users/abderrahim/Documents/cv_apec/fetched_resume.pdf"
    driver.download_file(files[0], target_path)  # 自动处理重命名、覆盖、权限等
    print(f"✅ 已下载至: {target_path}")

? download_file(downloadable_file, target_path) 会自动处理:

搜狐资讯
搜狐资讯

AI资讯助手,追踪所有你关心的信息

下载
  • 文件重命名冲突(如添加 (1) 后缀)
  • 权限检查与创建缺失目录
  • HTTP 重定向与认证头透传
  • 下载超时与失败重试(默认 60 秒)

⚠️ 常见误区与注意事项

  • ❌ 错误:仅配置 download.default_directory 但未设 options.enable_downloads = True → 报错 You must enable downloads

  • ❌ 错误:使用 driver.find_element(...).click() 触发下载后,立即调用 get_downloadable_files() → 返回空列表(因下载尚未被 WebDriver 捕获)
    ✅ 正确做法:等待 driver.get_downloadable_files() 返回非空结果(建议加显式等待):

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    WebDriverWait(driver, 30).until(
        lambda d: len(d.get_downloadable_files()) > 0
    )
  • ❌ 错误:在无 Grid 环境下仍添加 --enable-managed-downloads true → 启动失败(该参数仅对 standalone/node 有效)

  • ✅ 推荐:始终关闭 safebrowsing.enabled,避免 Chrome 对 .exe/.pdf 等文件弹出“不安全”警告阻断下载。

✅ 总结

Selenium 的原生下载能力是稳定自动化文件采集的关键升级。请严格遵循:
? 服务端:--enable-managed-downloads true(Remote 场景必需)
? 客户端:options.enable_downloads = True(绝对不可省略)
? 调用链:get_downloadable_files() → 显式等待 → download_file()
完成配置后,即可告别不可靠的 time.sleep() 和文件系统轮询,构建健壮、可维护的下载工作流。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

953

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

779

2023.11.06

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

265

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

512

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

410

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

446

2024.04.08

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

11

2026.02.11

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

465

2023.11.09

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

TypeScript全面解读课程
TypeScript全面解读课程

共26课时 | 5.1万人学习

前端工程化(ES6模块化和webpack打包)
前端工程化(ES6模块化和webpack打包)

共24课时 | 5.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号