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 · 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!',
});
    原文作者:panyanyany
    原文地址: https://segmentfault.com/a/1190000018313877
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞