在Puppeteer中禁用下载

问题描述 投票:2回答:2

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

编辑:

我事先并不知道将访问哪个网址以及将返回该网址的内容。

node.js puppeteer webautomation
2个回答
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,它将下载一个zip存档并传递其余的请求。

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


1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.