猿问

最佳实践 puppeteer waitForSelector 或 setTimeout

我试图找到“等到完整网站加载完毕”的最佳方法。而这似乎是一件棘手的事情。我在谷歌上搜索了很多,看到有两种方法: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');


当年话下
浏览 2782回答 1
1回答

叮当猫咪

如果你想让它成为真正的“木偶”方式,看看这个。有几个选项可供选择,但在我的实践中,我发现最有用的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;})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答