如果page.waitForSelector()
失败,则会引发错误。由于这是在异步函数内部运行的,因此直接进入代码的catch部分。
如果page.waitForSelector()
失败,是否有可能在下面一行执行代码?
像这样(伪代码):
if ( (await page.waitForSelector('.test') == null) { //do X}
通过API:
如果选择器在等待超时毫秒后仍未显示,则该函数将抛出。
我如何在同一个代码块中管理该抛出,好像功能会成功执行?
答案 0 :(得分:4)
为什么不捕捉page.waitForSelector
引发的错误,然后执行类似的操作-
(async() => {
try {
page.waitForSelector(selector);
} catch(error) {
// do as you wish with this error and then do your next actions
try {
page.goto('someUrl');
} catch(error) {
throw new Error(error);
}
}
})
答案 1 :(得分:0)
我要做的是检测像这样的循环中是否存在选择器:
if (await page.$('.test')) {
break
}
请记住,此后,您不需要waitForSelector
或任何waitFor
,因为您已经知道此选择器存在,因此只需继续执行程序即可,如下所示:
(仅出于演示目的,请勿以这种方式使用它...如果该网站具有任何“机器人保护”功能,它将在第二次重新加载后将您送出网站,可能您想为此添加一些超时时间,以便模拟用户重新加载的时间:await new Promise(resolve => setTimeout(resolve, 5000))
,重新加载之前
while(true) {
if (await page.$('.test')) {
break
}
page.reload()
}
page.click('.test')