news 2026/8/28 12:49:58

Browser-Use 文件下载自动化实战:2个参数跑通全链路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Browser-Use 文件下载自动化实战:2个参数跑通全链路

Browser-Use 文件下载自动化实战:2个参数跑通全链路

【免费下载链接】browser-use🌐 Make websites accessible for AI agents. Automate tasks online with ease.项目地址: https://gitcode.com/GitHub_Trending/br/browser-use

让 Agent 去 file-examples.com 下载最小的 DOC 文件,文件自动落到~/Downloads/tmp,全程无人值守——这就是 Browser-Use 文件下载自动化的核心效果。你只需要给它一个自然语言任务和一个downloads_path,剩下的导航、识别、落盘由库里的下载监控器包办。

先跑通:一份能直接复制的最小脚本 ⬇️

下面这段脚本做一件事:让 LLM 驱动的 Agent 访问示例站,把最小的 DOC 文件下下来。

import asyncio import os from browser_use import Agent, Browser, ChatGoogle # 用 Gemini 做决策,浏览器只负责下载落盘 llm = ChatGoogle(model='gemini-2.5-flash', api_key=os.getenv('GOOGLE_API_KEY')) browser = Browser(downloads_path='~/Downloads/tmp') async def main(): agent = Agent( task='Go to "https://file-examples.com/" and download the smallest doc file.', llm=llm, browser=browser, ) await agent.run(max_steps=25) asyncio.run(main())

运行成功后,日志里会看到类似这样的两行,说明文件已经落盘:

[DownloadsWatchdog] ⬇️ File download starting: document-sample.doc [DownloadsWatchdog] ✅ Found downloaded file: /home/user/Downloads/tmp/document-sample.doc (251400 bytes)

完整可运行的版本参考官方示例脚本 examples/features/download_file.py。

能力拆解:一条下载链路上的3个部件

跑通之后回头看,它为什么能跑通。整条链路只有3个部件。

  • 下载监控器:浏览器一启动,它就接管所有下载事件,从开始、进度到完成全程跟踪,详见 browser_use/browser/watchdogs/downloads_watchdog.py。
  • 浏览器配置downloads_path存在 profile 里,没指定时自动建一个临时目录,定义见 browser_use/browser/profile.py。
  • 事件系统FileDownloadedEvent在文件真正写盘后发出,带上路径、大小、类型,定义见 browser_use/browser/events.py。

监控器的几个行为值得知道:它用 CDP 回调捕获downloadWillBegin/downloadProgress;启动时先对目录做一次"快照",新出现的文件才算下载,天然防重复;同名文件自动追加(1)(2),不会覆盖。

配置详解:downloads_path 怎么写、task 怎么描述 📂

先装环境,仓库地址固定用 gitcode 镜像:

git clone https://gitcode.com/GitHub_Trending/br/browser-use cd browser-use pip install -e .

downloads_path支持~展开、相对路径和绝对路径,目录不存在会自动创建(监控器启动时还会再mkdir一次兜底);不传则落到系统临时目录。Browser(downloads_path=...)只是语法糖,等价于往 profile 里写同一个字段。

task 的描述直接决定下载成败,三个要素建议写全:去哪个站点、要什么格式的文件、要几个。写得越具体,LLM 越少在页面上兜圈子;max_steps给到 20~30,给多文件任务留足余量。

进阶:自动 PDF 与下载后处理 ⚙️

profile 里auto_download_pdfs默认开启:Agent 导航到 PDF 页面时,监控器会通过浏览器内的 fetch 直接把 PDF 拉进downloads_path,并按 URL 缓存去重,同一个文件一个会话只下一次。

后处理靠事件。监控器在每次落盘后发出FileDownloadedEvent,载荷包含pathfile_namefile_sizefile_typemime_type等字段(字段定义见 browser_use/browser/events.py)。拿到文件信息后,后处理逻辑就交给普通的 Python 代码,例如按扩展名把文件归档到不同子目录:

import shutil from pathlib import Path target = Path('~/Downloads/tmp').expanduser() # 按后缀归档,zip 另进解压目录 for f in target.glob('*.zip'): shutil.move(f, target / 'archives')

把这段换成解压、格式转换或上传云盘,就是完整的下载后处理流水线。

实战:3个可以直接抄的任务 📂

改 task 字符串即可,代码不用动:

  • 批量报表task='访问内部报表系统,下载2025年9月各部门财务报表,每个文件确认下载完成'——适合 Python 网页文件批量下载场景,配合downloads_path指向专用目录,下完直接按部门整理。
  • 邮件附件:结合 Gmail 集成(参考 examples/integrations/gmail_2fa_integration.py 的登录与二次验证处理),task 写成"检查收件箱主题含'每日销售数据'的邮件,下载全部 CSV 附件",AI 浏览器文件下载也能顺手把登录环节做了。
  • 多站点轮询:task 里直接写死多个站点地址,"依次访问 A、B、C 三个站点,各下载最新的月度报告 PDF",一个 Agent 串行跑完,文件按站点名归档。

Browser-Use 文件下载自动化把"点链接、等下载、收文件"这段机械活压缩成了两个参数。想看完整示例,从 examples/features/download_file.py 起步,配置细节在 browser_use/browser/profile.py,监控逻辑的边界情况都能从 browser_use/browser/watchdogs/downloads_watchdog.py 里读到。

【免费下载链接】browser-use🌐 Make websites accessible for AI agents. Automate tasks online with ease.项目地址: https://gitcode.com/GitHub_Trending/br/browser-use

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 12:47:21

数学建模竞赛实战指南:从团队分工到72小时极限攻关

1. 项目概述:一次从零到一的数模竞赛深度复盘 “2021全国数学建模大学”——这个标题,对于所有经历过那场鏖战的大学生和指导老师而言,瞬间就能唤起一段刻骨铭心的记忆。它指的并非一所实体大学,而是那场在2021年秋季,…

作者头像 李华
网站建设 2026/8/28 12:44:41

NeSy-RAG:面向可解释问答的神经符号检索增强生成架构

这次我们来看一个比较新的 RAG 方向:NeSy-RAG,全称是 Neuro-Symbolic RAG for Explainable Question Answering 。它要解决的问题很直接:普通 RAG 能告诉你在哪几个文档片段里找到了答案,但很难告诉你这个答案是通过什么逻辑推理…

作者头像 李华
网站建设 2026/8/28 12:44:24

从阶乘约数问题看数论与算法优化:质因数分解与勒让德定理实战

1. 项目概述:从一道竞赛题看算法思维的深度与广度最近在复盘一些经典的算法竞赛题目,蓝桥杯国赛的“阶乘约数”问题又一次引起了我的注意。这道题表面上是一个简单的数论问题:给定一个正整数 n,求 n!(n的阶乘&#xff…

作者头像 李华
网站建设 2026/8/28 12:43:41

C++模板编程:从泛型基础到高级应用全解析

1. 从“重复造轮子”到“一劳永逸”:为什么我们需要模板? 如果你写过一段时间的C,尤其是写过一些需要处理多种数据类型的工具函数或数据结构,你大概率经历过这种痛苦:为了给 int 、 double 、 string 分别实现一…

作者头像 李华