puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决

在官方文档(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/yyy

Google 了一轮,发现相关的 issue 很少,只找到了这么一个: Page.setRequestInterception Redirection Issue · Issue #3421 · GoogleChrome/puppeteer ·…

官方已经把它定义为一个 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!',
});
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值