当我在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();
});
我该如何解决?感谢所有建议
答案 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)
就像其他人所说的那样,您可以使用waitForSelector和waitForNavigation来解决您的问题,但是您可以更好地处理该问题,以防止错误失控。
例如,您可以执行以下操作:
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();
}
});
希望对您有帮助!