是否可以禁用特定MIME类型的下载。例如,导航到默认情况下将下载zip存档的url,应该什么都不做。
编辑:
我事先不知道将访问哪个URL,什么将返回该URL。
答案 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();
});
这是请求拦截。这意味着您应该能够推断出您将在发出请求之前下载文件。 响应拦截尚未实现。因此,我认为这是您现在可以获得的最好的解决方案。