可通过Chrome扩展监听downloads API、Native Messaging调用本地脚本、轮询监控下载目录或Chrome远程调试配合外部调度器四种方式实现下载完成自动触发本地脚本。

如果您在使用谷歌浏览器下载文件后,希望自动触发本地脚本(如重命名、移动、校验或通知),但浏览器原生不支持下载完成事件回调,则需借助外部机制监听下载目录变化或注入扩展逻辑。以下是实现该目标的多种配置方式:
一、通过Chrome扩展监听downloads API
Chrome提供chrome.downloads API,可在权限允许下监听下载完成事件并执行自定义逻辑,适用于需与浏览器深度集成的场景。
1、创建manifest.json文件,声明必要权限和后台脚本:
2、在manifest.json中添加"permissions": ["downloads", "downloads.shelf"]及"background": {"service_worker": "background.js"}字段。
3、编写background.js,监听chrome.downloads.onChanged事件并过滤state: "complete"状态:
4、在事件处理函数中调用chrome.runtime.sendNativeMessage向本地已注册的Native Host程序发送下载路径信息。

二、使用Native Messaging配合本地脚本
通过Chrome扩展与本地可执行程序通信,可绕过浏览器沙箱限制,直接调用Shell脚本、Python或二进制程序,实现下载后任意自动化操作。
1、编写本地脚本(如download_handler.py),接收JSON输入并执行文件移动、哈希校验等动作。
2、创建com.example.downloadhandler.json清单文件,指定脚本路径及可访问扩展ID。
3、将清单文件复制到系统Native Host注册目录:Windows为%LOCALAPPDATA%\Google\Chrome\User Data\NativeMessagingHosts\,macOS为~/Library/Application Support/Google/Chrome/NativeMessagingHosts/,Linux为~/.config/google-chrome/NativeMessagingHosts/。
4、在扩展的background.js中使用chrome.runtime.sendNativeMessage传入下载项filename与saveAsFilename字段。

三、轮询监控默认下载目录
当无法部署扩展时,可采用轻量级轮询方案:独立运行一个守护进程,持续检查Chrome默认下载目录中新增的已完成文件(依据文件大小稳定、无.tmp后缀等特征)。
1、确定Chrome默认下载路径:Windows通常为%USERPROFILE%\Downloads,macOS为~/Downloads,Linux为~/Downloads。
2、编写Python脚本,使用watchdog库监听目录Created与Modified事件,并加入1秒延迟判断文件是否写入完成。
3、对每个新稳定文件,读取其Content-Type或扩展名,匹配预设规则(如.zip→解压,.pdf→转文字)。
4、执行对应操作后,将文件移入processed/子目录,避免重复处理。

四、利用Chrome启动参数配合外部调度器
通过修改Chrome启动方式,使其在下载行为发生时由外部进程接管上下文,适用于CI/CD环境或固定工作流场景。
1、关闭Chrome所有实例,以命令行启动并启用远程调试端口:google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-test-profile。
2、使用Selenium或Puppeteer连接该调试地址,通过Page.setDownloadBehavior设置behavior: "allow"并指定downloadPath。
3、在脚本中调用Page.navigate触发下载后,立即启动独立的文件监控线程,等待目标文件出现在downloadPath中。
4、文件出现后,终止当前页面会话,执行后续脚本逻辑,再重启Chrome实例保持隔离性。



















