提问人:anthumchris 提问时间:11/2/2020 最后编辑:Josh Correiaanthumchris 更新时间:7/16/2023 访问量:4676
我们可以明确地捕获 Puppeteer (Chrome/Chromium) 错误 net::ERR_ABORTED 吗?
Can we explicitly catch Puppeteer (Chrome/Chromium) Error net::ERR_ABORTED?
问:
我们可以明确和具体地捕获 Puppeteer (Chrome/Chromium) 错误吗?还是字符串匹配是目前唯一的选择?net::ERR_ABORTED
page.goto(oneClickAuthPage).catch(e => {
if (e.message.includes('net::ERR_ABORTED')) {}
})
/* "net::ERROR_ABORTED" occurs for sub-resources on a page if we navigate
* away too quickly. I'm specifically awaiting a 302 response for successful
* login and then immediately navigating to the auth-protected page.
*/
await page.waitForResponse(res => res.url() === href && res.status() === 302)
page.goto(originalRequestPage)
理想情况下,这类似于我们可以捕捉到的潜在事件page.on('requestaborted')
答:
-1赞
Ruben Verster
3/29/2022
#1
我建议将您的 api 调用等放在 trycatch 块中 如果失败,您将捕获错误,就像您当前所做的那样。但它看起来更好一点
try {
await page.goto(PAGE)
} catch(error) {
console.log(error) or console.error(error)
//do specific functionality based on error codes
if(error.status === 300) {
//I don't know what app you are building this in
//But if it's in React, here you could do
//setState to display error messages and so forth
setError('Action aborted')
//if it's in an express app, you can respond with your own data
res.send({error: 'Action aborted'})
}
}
如果 Puppeteer 中止时的错误响应中没有特定的错误代码,则意味着 Puppeteer 的 API 没有被编码为返回这样的数据,不幸的是:')
像您在问题中所做的那样进行错误消息检查的情况并不少见。不幸的是,这是我们唯一能做到这一点的方法,因为这是我们被赋予的工作:'P
-1赞
Logic
4/21/2023
#2
对于其他人
如果您在 https:ERR_ABORTED....
然后主要是由于互联网问题,快速导航或网站问题
,请尝试以下代码:
var count = 0;
const page = await browser.newPage()
page.setDefaultNavigationTimeout(0)
function loop() {
page.goto('Your URL').catch(err => {
// If any Error occurs then run the goto 3 or 4 times which worked for me
if (err && count < 4) {
console.log(count)
count++
if (count > 3) {
console.log("Internet/Website Problem")
page.close();
}
// Use Selector to wait for your element or thing to appear
page.waitForSelector(
"Your Element",
{ visible: true, timeout: ((count * 1000) + 1000)}).catch(() => { loop() }
)
}
})
}
await loop()
对于给定的问题
如果你想抓住Puppeteer (Chromme/Chromium)错误,如net::ERR_ABORTED?
然后你必须使用字符串格式的错误,根据我的研究,到目前为止我没有找到任何错误状态代码。
-1赞
Josh Correia
7/16/2023
#3
由于没有其他人直接回答您的问题,字符串匹配似乎仍然是唯一的选择。
以下是我在特别容易出现ERR_ABORTED错误的区域使用的一些示例代码:
try {
await page.goto(oneClickAuthPage)
} catch (err) {
if (err instanceof Error && err.message.startsWith('net::ERR_ABORTED')) {
console.log("Caught ERR_ABORTED")
// handle the error however you want
}
else {
throw err
}
}
这是我最初得到这个解决方案的地方,减去我为匹配您的问题而编辑的部分。
评论