我正在使用长时间等待页面延迟(8000),只是为了确保下拉列表中的所有数据都已加载。我认为必须有一种方法可以等待,直到下拉框中的所有数据都加载完毕,然后自动进行下一步。
我尝试对选择器使用验证,但是我们无法对查询中填充的动态数据进行验证,也尝试使用await page.delay(n),但这不是正确的方法,因为有时运行查询可能会占用一段时间。
page.click(selectors.xxx.nnn)
await delay (1000)
page.keyboard.type('abc')
await delay(8000)
page.keyboard.press('ArrowDown')
page.keyboard.press('ArrowDown')
page.keyboard.press('Enter')
await page.waitFor(selectors.xxx.nnn)
page.click(selectors.xxx.nnn)
await page.waitFor(selectors.xxx.abc)
因此,使用延迟可能是一种解决方案,但不是适当的解决方案。如果有办法,我可以让puppeteer中的浏览器自动化,而不是选择器,而是后端的数据。确保下拉列表中的所有预期列表都已填充并可以选择,这将是很好的选择。
答案 0 :(得分:0)
您可以使用page.waitForFunction
等待特定函数返回true。在您的情况下,您可以计算下拉框的选项。我假设“下拉框”是一个简单的<select>...</select>
HTML元素。
代码示例
await page.waitForFunction(() => document.querySelector('#id-of-selectbox').length > 0);
当选择框上的length
属性返回其中的选项数量时,此代码将等待,直到选择框内至少有一个选项为止。
答案 1 :(得分:0)
await page.waitForResponse(response => response.status() === 200)
或
await page.waitForResponse(response => response.ok())
这都允许自动化程序等待所有响应都成功