我使用一个名为Puppeteer的模块。
我试图等待页面上可能没有出现的选择器。在我采用的两种方法中,只有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
确实返回了API中指示的Promise,但是我不知道为什么后一种方法不起作用。无论如何,它引发了错误。
有人遇到过同样的问题吗?
答案 0 :(得分:1)
您应该重组Promise Chaining示例,使其在then()
方法之前使用catch()
方法。
使用page.waitForSelector()
考虑以下示例:
// Correct Method
await page.waitForSelector('#example').then(() => {
console.log('SUCCESS');
}).catch(e => {
console.log('FAIL');
});
如果该元素不存在,那么FAIL
将被记录到控制台。否则,如果元素确实存在,则输出将为SUCCESS
。
另一方面,请看下面的示例,其中then()
和catch()
颠倒了:
// Incorrect Method
await page.waitForSelector('#example').catch(e => {
console.log('FAIL');
}).then(() => {
console.log('SUCCESS - not necessarily');
});
如果该元素不存在,那么FAIL
将被记录到控制台,但是无论该元素是否存在,SUCCESS
也将被写入控制台。这是因为记录SUCCESS
是尝试捕获错误之后链中的下一个直接步骤。