在官方文档(puppeteer/api.md at master · GoogleChrome/puppeteer · GitHub)中,中断 redirect 的标准做法是这样的:const puppeteer = require(‘puppeteer’);puppeteer.launch().then(async browser => { const page = await browser.newPage(); await page.setRequestInterception(true); page.on(‘request’, interceptedRequest => { if (interceptedRequest.url().endsWith(’.png’) || interceptedRequest.url().endsWith(’.jpg’)) interceptedRequest.abort(); else interceptedRequest.continue(); }); await page.goto(‘https://example.com’); await browser.close();});这样一开始也是没有什么问题,但是偶尔会遇到这样情况:Error: net::ERR_FAILED at http://xxx.com/yyyGoogle 了一轮,发现相关的 issue 很少,只找到了这么一个:Page.setRequestInterception Redirection Issue · Issue #3421 · GoogleChrome/puppeteer · GitHub官方已经把它定义为一个 Bug 了,也有一些相关的解决方案:umbrella Fix Request Interception · Issue #3471 · GoogleChrome/puppeteer · GitHub不过其他人遇到的情况是 abort() 之后无法结束的问题,而我是抛出异常的问题,所以我自己摸索了一下,总结出一个比较合适的办法:就是用 respond 代替 abort。比如:// request.abort();request.respond({ status: 404, contentType: ’text/plain’, body: ‘Not Found!’,});