是否可以禁用特定mime类型的下载。例如,导航到默认情况下将下载zip存档的URL,应该什么都不做。
编辑:
我事先并不知道将访问哪个网址以及将返回该网址的内容。
对我有用的解决方案:
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。
如果它是页面生成的请求,您可以使用setRequestIntercept
停止请求
await page.setRequestInterception(true);
page.on('request', request => {
if (request.url().endsWith('.zip'))
request.abort();
else
request.continue();
});
这是一个请求拦截。这意味着您应该能够在发出请求之前推断出您将下载文件。响应拦截尚未实施。所以我认为这是你现在能得到的最好的。