木偶-Handlin page.waitForSelector()失败

时间:2018-07-26 14:33:36

标签: node.js async-await puppeteer

如果page.waitForSelector()失败,则会引发错误。由于这是在异步函数内部运行的,因此直接进入代码的catch部分。

如果page.waitForSelector()失败,是否有可能在下面一行执行代码?

像这样(伪代码):

if ( (await page.waitForSelector('.test') == null) { //do X}

通过API:

  

如果选择器在等待超时毫秒后仍未显示,则该函数将抛出。

我如何在同一个代码块中管理该抛出,好像功能会成功执行?

2 个答案:

答案 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')