为了账号安全,请及时绑定邮箱和手机立即绑定

最佳实践 puppeteer waitForSelector 或 setTimeout

最佳实践 puppeteer waitForSelector 或 setTimeout

当年话下 2021-06-10 14:49:00
我试图找到“等到完整网站加载完毕”的最佳方法。而这似乎是一件棘手的事情。我在谷歌上搜索了很多,看到有两种方法:waitForSelector 和 SetTimout。我的问题是,即使我等待 Selector #CheckSelectAll 来检查这个 Checkbox 似乎总是为时过早。所以我不得不添加 2 秒的延迟。这对我来说看起来很不专业。我想为此使用最佳实践。这应该是每个人在使用具有不同页面和表单的 puppeteer 时总是需要的问题。如果选择器在Iframe内部时,此Waitforselector是否可能无法正常工作?感谢您的任何建议和帮助!  function delay(time) {    return new Promise(function(resolve) {         setTimeout(resolve, time)    });  await page.waitForSelector('#CheckSelectAll');  await delay(2000);  await page.click('#CheckSelectAll');
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

如果你想让它成为真正的“木偶”方式,看看这个。

有几个选项可供选择,但在我的实践中,我发现最有用的networkidle2.

如文档中所述,您的脚本将等到


至少 500 毫秒的网络连接不超过 2 个。


await page.waitForNavigation({ waitUntil: 'networkidle2' })


但是,如果由于某种原因内置解决方案无法处理您的情况,则可以像您一样制作自定义等待功能。

这是很好的一行,可以编写更少的代码:

await new Promise(resolve => setTimeout(resolve, 2000))



最后一个选项,您可以访问 DOMpage.evaluate()并验证元素是否可见。


const visibleVerification = await page.evaluate(() => { 

   // your verify logic.

   // return boolean, if element exists on page

   return true;

})


查看完整回答
反对 回复 2021-06-18
  • 1 回答
  • 0 关注
  • 2780 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信