捕获 waitForSelector 错误
Catching waitForSelector Errors
我使用了一个名为 Puppeteer 的模块。
我尝试在我的页面上等待可能不会出现的选择器。在我采用的两种方法中,只有 try-catch 方法有效。
try-catch 块 - 工作
try {
await page.waitForSelector('.element');
//element appeared
} catch (error) {
//element did not appear
}
承诺链接 - 不工作
await page.waitForSelector('.element')
.catch((error) => {
//element did not appear
})
.then(() => {
//element appeared
});
似乎 waitForSelector
做了 return 一个 Promise,如 API 中所示,但我不明白为什么后一种方法不起作用。无论如何它都抛出了错误。
有人遇到过同样的问题吗?
您应该重构您的 Promise Chaining 示例以使用 then()
method before the catch()
方法。
考虑以下使用 page.waitForSelector()
的示例:
// Correct Method
await page.waitForSelector('#example').then(() => {
console.log('SUCCESS');
}).catch(e => {
console.log('FAIL');
});
如果该元素不存在,则 FAIL
将被记录到控制台。否则,如果该元素确实存在,则输出将为 SUCCESS
.
另一方面,看看下面的示例,其中 then()
and catch()
被反转:
// Incorrect Method
await page.waitForSelector('#example').catch(e => {
console.log('FAIL');
}).then(() => {
console.log('SUCCESS - not necessarily');
});
如果元素不存在,那么FAIL
会被记录到控制台,但是不管元素是否存在,SUCCESS
也会被写入控制台。这是因为记录 SUCCESS
是尝试捕获错误后链中的下一个直接步骤。
我使用了一个名为 Puppeteer 的模块。
我尝试在我的页面上等待可能不会出现的选择器。在我采用的两种方法中,只有 try-catch 方法有效。
try-catch 块 - 工作
try {
await page.waitForSelector('.element');
//element appeared
} catch (error) {
//element did not appear
}
承诺链接 - 不工作
await page.waitForSelector('.element')
.catch((error) => {
//element did not appear
})
.then(() => {
//element appeared
});
似乎 waitForSelector
做了 return 一个 Promise,如 API 中所示,但我不明白为什么后一种方法不起作用。无论如何它都抛出了错误。
有人遇到过同样的问题吗?
您应该重构您的 Promise Chaining 示例以使用 then()
method before the catch()
方法。
考虑以下使用 page.waitForSelector()
的示例:
// Correct Method
await page.waitForSelector('#example').then(() => {
console.log('SUCCESS');
}).catch(e => {
console.log('FAIL');
});
如果该元素不存在,则 FAIL
将被记录到控制台。否则,如果该元素确实存在,则输出将为 SUCCESS
.
另一方面,看看下面的示例,其中 then()
and catch()
被反转:
// Incorrect Method
await page.waitForSelector('#example').catch(e => {
console.log('FAIL');
}).then(() => {
console.log('SUCCESS - not necessarily');
});
如果元素不存在,那么FAIL
会被记录到控制台,但是不管元素是否存在,SUCCESS
也会被写入控制台。这是因为记录 SUCCESS
是尝试捕获错误后链中的下一个直接步骤。