在 Puppeteer 中禁用下载

Disable downloads in Puppeteer

是否可以禁用特定 MIME 类型的下载。例如导航到默认情况下将下载 zip 存档的 url,应该什么都不做。

编辑:

我事先不知道 url 会访问什么以及 url 会访问什么 return。

如果它是由页面生成的请求,您可以使用 setRequestIntercept

停止请求
await page.setRequestInterception(true);
page.on('request', request => {
    if (request.url().endsWith('.zip'))
        request.abort();
    else
      request.continue();
});

这是请求拦截。这意味着您应该能够在发出请求之前推断出您将下载文件。 响应拦截还没有实现。所以我认为这是你现在能得到的最好的。

对我有用的解决方案:

const client = await page.target().createCDPSession();

// intercept request when response headers was received
await client.send('Network.setRequestInterception', {
  patterns: [{
      urlPattern: '*',
      resourceType: 'Document',
      interceptionStage: 'HeadersReceived'
  }],
});

await client.on('Network.requestIntercepted', async e => {
    let headers = e.responseHeaders || {};
    let contentType = headers['content-type'] || headers['Content-Type'] || '';
    let obj = {interceptionId: e.interceptionId};
    if (contentType.indexOf('application/zip') > -1) {
        obj['errorReason'] = 'BlockedByClient';
    }

    await client.send('Network.continueInterceptedRequest', obj);
});

这段代码阻止导航到 url,它将下载 zip 存档并传递其余请求。

感谢@hardkoded 建议访问 github.com/GoogleChrome/puppeteer/issues/1191