在Puppeteer中禁用下载

时间:2019-02-15 13:24:28

标签: node.js puppeteer webautomation

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

编辑:

我事先不知道将访问哪个URL,什么将返回该URL。

2 个答案:

答案 0 :(得分:3)

对我有用的解决方案:

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的建议。

答案 1 :(得分:1)

如果这是页面生成的请求,则可以使用setRequestIntercept

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

这是请求拦截。这意味着您应该能够推断出您将在发出请求之前下载文件。 响应拦截尚未实现。因此,我认为这是您现在可以获得的最好的解决方案。