typescript - 我没有在 UI 中等待数据加载到下拉列表中的 puppeteer 上获得正确的脚本
问题描述
我正在使用长时间等待页面延迟(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 中的浏览器自动化等待,而不是选择器,而是来自后端的数据。确保填充下拉列表中的所有预期列表并且可以选择会很好。
解决方案
您可以使用page.waitForFunction
等待特定函数返回 true。在您的情况下,您可以计算下拉框的选项。我假设“下拉框”是一个简单的<select>...</select>
HTML 元素。
代码示例
await page.waitForFunction(() => document.querySelector('#id-of-selectbox').length > 0);
由于length
选择框上的属性返回里面的选项数量,所以这段代码将等到选择框内至少有一个选项,然后再继续。
推荐阅读
- c# - 如何在c#中使用变量拆分字符串?
- c++ - 我可以从 Windows-API 的睡眠功能中得到什么吗?
- google-apps-script - 使用应用脚本将数据整合到一个主 Google 工作表中
- typescript - React Native:编译时显示运行时错误(Typescript)
- azure - 无法在 Azure 存储资源管理器中按修改的日期/时间对文件进行排序
- android - Android ProgressBar 颜色无法在平板电脑上正确显示
- mongodb - 如何在反应弹簧中使用 Javers?
- python - 与python嵌套流控制混淆
- keras - 使用 plot_model tensorflow.keras 可视化模型
- azure-cosmosdb - 数据工厂:JSON 数据被解释为表达式 - ErrorCode=InvalidTemplate, ErrorMessage=Unable to parse expression