木偶-无法读取未定义的属性“单击”

时间:2018-12-18 20:05:32

标签: javascript node.js puppeteer

当我在Puppeteer中设置无头:true(没有打开浏览器)时,我出现错误错误:

  

评估失败:TypeError:无法读取的属性“ click”   在 puppeteer_evaluation_script :3:115

中未定义

我补充说,如果没有头:false(使用打开的浏览器),脚本可以正常工作... 根据我的观察,似乎在执行此功能时发生了错误

await page.evaluate( () =>
    {
    Array.from( document.querySelectorAll( '.N3ewq' ) ).filter( element => element.textContent == 'Switch' )[0].click();
    });

我该如何解决?感谢所有建议

3 个答案:

答案 0 :(得分:0)

尝试等待页面完全加载后再进行评估:

await page.waitForNavigation({ waitUntil: 'networkidle2' });
await page.evaluate( () => {
    Array.from( document.querySelectorAll( '.N3ewq' ) ).filter( element => element.textContent == 'Switch' )[0].click();
});

答案 1 :(得分:0)

尝试使用wait for selector,这样您的代码就会变成这样

await page.waitForSelector('.N3ewq');
await page.evaluate(() => {
   Array.from(document.querySelectorAll( '.N3ewq')).filter(element => 
     element.textContent == 'Switch' )[0].click();
});

答案 2 :(得分:0)

就像其他人所说的那样,您可以使用waitForSelectorwaitForNavigation来解决您的问题,但是您可以更好地处理该问题,以防止错误失控。

例如,您可以执行以下操作:

await page.waitForSelector('.N3ewq',{timeout:3000}).catch(() => console.log('Class N3ewq doesn\'t exist!'));
await page.evaluate(() => {
          if(document.querySelectorAll('#step_next').length > 0){
              Array.from(document.querySelectorAll( '.N3ewq')).filter(element => element.textContent == 'Switch' )[0].click();
          }
      });

希望对您有帮助!