puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
在官方文檔(puppeteer/api.md at master · GoogleChrome/puppeteer · GitHub)中,中斷 redirect 的標(biāo)準(zhǔn)做法是這樣的:
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();elseinterceptedRequest.continue();});await page.goto('https://example.com');await browser.close(); });這樣一開(kāi)始也是沒(méi)有什么問(wèn)題,但是偶爾會(huì)遇到這樣情況:
Error: net::ERR_FAILED at http://xxx.com/yyy
Google 了一輪,發(fā)現(xiàn)相關(guān)的 issue 很少,只找到了這么一個(gè):
Page.setRequestInterception Redirection Issue · Issue #3421 · GoogleChrome/puppeteer · GitHub
官方已經(jīng)把它定義為一個(gè) Bug 了,也有一些相關(guān)的解決方案:umbrella Fix Request Interception · Issue #3471 · GoogleChrome/puppeteer · GitHub
不過(guò)其他人遇到的情況是 abort() 之后無(wú)法結(jié)束的問(wèn)題,而我是拋出異常的問(wèn)題,所以我自己摸索了一下,總結(jié)出一個(gè)比較合適的辦法:
就是用 respond 代替 abort。
比如:
// request.abort(); request.respond({status: 404,contentType: 'text/plain',body: 'Not Found!', });總結(jié)
以上是生活随笔為你收集整理的puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 24、springboot与缓存(2)
- 下一篇: 深度学习(四十二)——深度强化学习(5)