You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Puppeteer中禁用或取消所有自动下载操作

解决方案

1. 配置浏览器下载行为

在创建页面前,通过CDP命令直接控制浏览器的下载偏好,将自动下载的文件导向系统空设备,避免本地生成下载文件:

const browser = await puppeteer.launch({
  headless: "new",
  defaultViewport: null
});

const page = await browser.newPage();

// 根据系统设置空设备路径:Linux/macOS用/dev/null,Windows用NUL
const nullDevicePath = process.platform === 'win32' ? 'NUL' : '/dev/null';
await page._client.send('Page.setDownloadBehavior', {
  behavior: 'allow',
  downloadPath: nullDevicePath,
  eventsEnabled: false
});

2. 优化文件保存逻辑

你之前的代码通过page.evaluate二次发起fetch请求属于重复操作,直接使用response.buffer()即可获取响应内容,更高效且避免环境限制:

page.on("response", async (response) => {
  // 可选:过滤不需要保存的资源(比如样式、图片等,按需调整)
  if (!response.ok() || response.url().match(/\.(css|png|jpg)$/)) {
    return;
  }

  try {
    const buffer = await response.buffer();
    // 替换为你的目标保存路径与文件名
    const targetFileName = new URL(response.url()).pathname.split('/').pop();
    fs.writeFileSync(`./your-save-dir/${targetFileName}`, buffer);
  } catch (err) {
    console.error(`保存文件失败:${response.url()}`, err);
  }
});

await page.goto('https://www.7-zip.org/a/7z2201-x64.exe', { waitUntil: "load", timeout: 120000 });

关键说明

  • Page.setDownloadBehavior是Puppeteer底层的CDP命令,无需预设MIME类型,就能强制所有自动下载的文件流向空设备,不会占用本地存储。
  • 用response.buffer()替代二次fetch,减少网络请求开销,同时避免页面环境的跨域或权限限制导致的请求失败。

内容的提问来源于stack exchange,提问作者SomePerson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:05:24