如何让 puppeteer 等到所有列表项都加载到容器元素中

问题描述 投票:0回答:1

如果我们不知道有多少列表项被获取,如何选择选择器并等待所有列表项被加载。让我们想象一下它们是通过 ajax 获取的。

可以说以下是获取的模糊 html 和最多 5 li 元素。我们还不知道特定提取中存在多少个。但也许在真实场景中可能有 100 个列表项。

    <ul class='container'>
        <li>item 1</li>
        <li>item 2</li>
        <li>item 3</li>
        <li>item 4</li>
        <li>item 5</li>
    </ul>

我们的 puppeteer wait api 应该是什么,或者任何合适的东西,这是最简单的获取方式,不会遗漏任何东西。

以下方法是否有效? (但它仍然看起来很模糊,并且主要导致导航或其他一些错误)

    await page.evaluate(() => 
          document.querySelector('.container').childNodes.length>3
    );
puppeteer
1个回答
0
投票

您可以使用

.waitForFunction
等到条件为
true

在这种情况下:等到

.container
最少有3个孩子

await page.waitForFunction(() => {
  return document.querySelector('.container').children.length > 3;
});

更简单的方法:

await page.waitForFunction(() => {
  return document.querySelector('.container').childElementCount > 3;
});
© www.soinside.com 2019 - 2024. All rights reserved.