在使用 Google Antigravity IDE 或其他基于 Playwright 的浏览器自动化工具时,遇到一个困扰的问题:下载的文件被自动重命名为 UUID 格式,并保存到临时目录,这导致博主在下载东西时无法自动化,反而降低了效率。本文深入分析这个问题的原因,并提供详细的解决方案。

问题现象

当使用 Antigravity IDE 控制 Chrome 浏览器下载文件时,出现以下异常行为:

  1. 文件名变成 UUID:如 f6746de9-95f6-4c06-b636-3ac7c2fb73bc,而非原始文件名
  2. 保存位置异常:文件被保存到 C:\Users\<用户名>\AppData\Local\Temp\playwright-artifacts-xxxxx 临时目录
  3. 每次会话独立:每次启动浏览器都会创建新的临时目录

问题原因分析

Playwright 的下载拦截机制

Playwright 是一个强大的浏览器自动化框架,被许多 IDE 和测试工具采用(如 Google Antigravity)。它默认会拦截所有下载操作,这是其核心设计特性。

通过分析 Playwright 源码 crBrowser.ts,可以找到问题的根源:

1
2
3
4
5
6
7
8
9
// CRBrowserContext._initialize() 中的代码
if (this._options.acceptDownloads !== 'internal-browser-default') {
  promises.push(this._browser._session.send('Browser.setDownloadBehavior', {
    behavior: this._options.acceptDownloads === 'accept' ? 'allowAndName' : 'deny',
    browserContextId: this._browserContextId,
    downloadPath: this._browser.options.downloadsPath,
    eventsEnabled: true,
  }));
}

CDP Browser.setDownloadBehavior 参数解析

Playwright 使用 Chrome DevTools Protocol (CDP) 的 Browser.setDownloadBehavior 命令来控制下载行为:

behavior 值 行为描述 文件名 downloadPath
deny 拒绝所有下载 N/A 不需要
allow 允许下载,使用原始文件名 原始名 必须指定
allowAndName 允许下载,使用 GUID 命名 UUID 必须指定
default 浏览器默认行为 原始名 可省略

关键区别

  • allow:虽然保留原始文件名,但必须指定 downloadPath,文件仍会保存到指定目录
  • default:使用浏览器原生下载行为,可以省略 downloadPath,文件保存到浏览器默认下载目录

问题根源:Playwright 硬编码使用了 allowAndName 模式,这是有意设计,目的是:

  • 防止多次下载时的文件名冲突
  • 确保自动化测试的隔离性
  • 便于 Playwright 追踪和管理下载

解决方案

修改 Playwright 源码

找到并修改 Playwright 核心文件:

文件路径

1
C:\Users\<用户名>\AppData\Local\ms-playwright-go\1.50.1\package\lib\server\chromium\crBrowser.js

修改内容:将 allowAndName 改为 allow,并移除 downloadPath 参数

1
2
3
4
5
- behavior: this._options.acceptDownloads === 'accept' ? 'allowAndName' : 'deny',
- browserContextId: this._browserContextId,
- downloadPath: this._browser.options.downloadsPath,
+ behavior: this._options.acceptDownloads === 'accept' ? 'allow' : 'deny',
+ browserContextId: this._browserContextId,

说明:使用 allow 行为并移除 downloadPath,让浏览器使用其原生下载目录(通常是用户的”下载”文件夹)。

重要提示:修改后需要重启 Antigravity IDE(或相关应用程序)才能生效。验证步骤:

  1. 关闭所有由 Antigravity 控制的 Chrome 浏览器窗口
  2. 完全退出 Antigravity IDE
  3. 重新启动 Antigravity
  4. 测试下载功能

相关 GitHub Issues

Issue 描述 状态
#32692 请求支持用户指定的下载文件名 Open
#7464 UUID 文件名是否是预期行为 Closed
#2058 允许使用自然浏览器文件名 Closed

总结

Playwright 的下载拦截行为是有意设计的,目的是确保自动化测试的隔离性。对于 Antigravity 用户,需要修改 crBrowser.js

  1. allowAndName 改为 allow
  2. 移除 downloadPath 参数

修改后关闭浏览器并重启 Antigravity 即可恢复正常下载行为,文件将保存到浏览器默认下载目录。


参考资料: