puppeteer 在按钮点击后等待页面更新(无导航)

rev*_*evy 6 javascript puppeteer

第一次尝试木偶戏,真是太棒了。单击按钮后,我需要等待页面获取并呈现新数据。这不会导致导航(网址相同),因此以下代码不起作用(它给出超时异常):

await Promise.all([
    myButton.click()
    page.waitForNavigation()
])
Run Code Online (Sandbox Code Playgroud)

等待页面在点击时获取/呈现异步数据的正确方法是什么?

Tom*_*sek 6

假设 DOM 以某种方式发生变化,您可以等待特定的元素或选择器。

可能会出现图像。

await myButton.click();
await page.waitForSelector('img.success');

Run Code Online (Sandbox Code Playgroud)

也许某些具有 ID 属性的元素被插入到 DOM 中。

await myButton.click();
await page.waitForSelector('#newElementThatAppeared');

Run Code Online (Sandbox Code Playgroud)

如果您不熟悉 DOM 选择器,您可以阅读这里这里。它们功能强大且易于使用。

更新- 自定义等待谓词。

如果我们总是知道长度...

await myButton.click();
await page.waitFor(() => document.querySelectorAll('ul.specialList li').length > 5);
Run Code Online (Sandbox Code Playgroud)

如果我们知道长度会增加

const listSize = await page.evaluate(() => document.querySelectorAll('ul.specialList li').length);
await myButton.click();
await page.waitFor(() => document.querySelectorAll('ul.specialList li').length > listSize);
Run Code Online (Sandbox Code Playgroud)