禁用 Puppeteer 中的下载功能

4

有没有可能禁用特定mime类型的下载。例如,访问默认会下载zip归档文件的url,应该不会有任何反应。

编辑:

我事先不知道将访问哪个url以及该url将返回什么。

2个回答

5

适合我的解决方案:

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,该URL将下载一个zip归档文件并传递其余的请求。感谢@hardkoded建议访问github.com/GoogleChrome/puppeteer/issues/1191

3

如果这是由页面生成的请求,您可以使用setRequestIntercept停止该请求。

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

这是一个请求拦截。这意味着您应该能够在请求发出之前推断出您将要下载的文件。

响应拦截尚未实现。所以我认为这是您现在可以得到的最好结果。


这是一个很好的解决方案,如果您事先知道url将返回zip存档。在我的情况下,我不知道将访问的页面上会有什么。 - Vitalie Maldur
2
你可能想要跟踪这个问题 https://github.com/GoogleChrome/puppeteer/issues/1191 - hardkoded
1
谢谢@hardkoded,我在你建议的页面上找到了解决方案。 - Vitalie Maldur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接