如何处理 puppeteer 中 ajax 请求后加载的元素

2023-12-10

我正在尝试使用 puppeteer 进行网页抓取。我最近需要处理负载的元素。当我单击搜索按钮时,结果会在 AJAX 中加载,并且我需要选择我尝试选择的元素位于搜索结果中,但不在页面的初始加载中。它生成的页面屏幕截图也包含搜索结果,如果它输出 HTML 源,我也可以看到那里的元素。但不知道为什么我不能选择它。


您可以使用await page.waitForSelector(cssSelector);要求 Puppeteer 等待 UI 中显示任何元素,然后再继续执行脚本中的进一步步骤。默认情况下,等待超时为 30 秒,但您可以将其设置为您希望的任何超时。

所以对于你的情况我会:

  • 在搜索栏中输入您的搜索文本。
  • 单击搜索按钮(这将执行 AJAX 调用来加载结果)。
  • Use await page.waitForSelector(cssSelector);要求 Puppeteer 等待,直到您确定某个元素将显示在 UI 中after执行搜索是可见的。
  • 现在 Puppeteer 已将该元素注册为可见,您知道您希望对其执行的任何操作也将正确执行。

如果你不使用它,你可能会发现会发生什么waitForSelector()调用是显示元素,但 Puppeteer 会超时,例如,如果您想执行click对元素的命令。这是因为超时click事件(以及与元素交互的其他 Puppeteer 事件)非常短,有时脚本(尤其是在无头模式下)可能会太快地移动到下一条指令,以至于无法让 UI 更新得足够快以跟上。

所以通过添加额外的waitForSelector调用,您还可以使您的脚本更加健壮。特别是当数据像您的情况一样动态生成时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 puppeteer 中 ajax 请求后加载的元素 的相关文章

随机推荐

  • Django Rest Api - ManyToManyField,在练习数组中显示“标题”而不是“id”

    Django Rest Api ManyToManyField 在练习数组中显示 标题 而不是 id HTTP 200 OK Allow GET POST PUT DELETE PATCH Content Type application
  • 如何从 python 脚本调用现有的 LibreOffice python 宏

    目前 我使用以下命令调用现有的 LibreOffice 宏 def OnLOtimestamp self try pid Popen lowriter vnd sun star script fs2TimeStamp py fs2 Time
  • 如何在 Django 1.4 中使用 DB 路由器

    我一直在尝试设置 Django 1 4 3 以使用多个数据库 但我一生都无法让它工作 我阅读了有关 SO 的文档和帖子 并执行了以下操作 1 添加第二个数据库配置settings py 如下 DATABASES default ENGINE
  • 定义自定义属性

    我需要实现我自己的属性 例如com android R attr 在官方文档中找不到任何内容 因此我需要有关如何定义这些属性以及如何从我的代码中使用它们的信息 目前最好的文档是源代码 你可以看一下这里 attrs xml 您可以在顶部定义属
  • 我可以用 Objective-C 以外的任何语言编写 iPhone 应用程序吗?

    是否可以用 Objective C 以外的任何语言编写 iPhone 应用程序 基本上 iPhone iOS 编程有 3 个主要选项 Objective C MonoTouch 适用于 iOS 的 C Adobe AIR 可能还有其他一些可
  • DAO 和依赖注入,有建议吗?

    这是我第一次使用 DAO 模式 从我所得到的read到目前为止 实现这种模式将帮助我将调用代码 控制器 与任何持久性实现分开 这正是我想要的 也就是说 我不想被限制使用任何特定的数据库或第三方库 我正在使用 MongoDB 和吗啡 作为示例
  • 无法安装 ASP.NET MVC 3 RC

    Web 平台安装程序给了我一条成功消息 但 MVC 3 不存在于我的系统上 在 VS 或控制面板中 我下载了安装程序 它告诉我 OS Version 6 0 6000 Platform 2 12 10 2010 11 50 9 OS Des
  • 如何使用平面映射java8根据值的键数量对哈希映射进行排序?

    这是后续的如何使用 lambda 获取哈希映射中值的键数 我有一个HashMap我想找到每个值的键数 Map
  • 在 Windows 上设置 Python 终端编码

    我碰巧在 Windows 上的 Python 终端中设置字符编码失败 根据官方指南 这是小菜一碟 coding utf 8 好的 现在测试 print 生产一块mojibake 我做错了什么 P S 如果重要的话 IDE 是 Visual
  • 是否有与 tab20c 类似且颜色数量更多的调色板?

    这是参考关于颜色图 Here s the tab20c colormap 我想要一个类似的颜色图 这样每种颜色都彼此不同 但它应该包含 20 多种颜色 还有其他选择吗 如果您能找到您喜欢的不同颜色图您链接的页面 您可以使用轻松生成自己的分段
  • selenium-server-standalone 和 selenium-server 有什么区别?

    我可以在 Maven Central 存储库中看到两个存储库 请澄清两个罐子之间的区别 这在硒文档 您可能需要也可能不需要 Selenium 服务器 具体取决于您的方式 打算使用Selenium WebDriver 如果您的浏览器和测试都可
  • 如何使用 Wea​​therKit Swift 框架在小部件扩展中获取天气?

    我无法使用小组件扩展中的 WeatherKit 框架获取天气 这是我为本示例创建的一个项目 该小部件显示样本位置的湿度 这是代码 import WidgetKit import SwiftUI import WeatherKit impor
  • 在 BlackBerry JDE 4.5.0 的状态栏添加通知图标

    我正在编写一个 Java 应用程序黑莓JDE 4 5 将在启动时开始侦听某些事件 我想在状态栏显示一个小图标 我知道 BlackBerry API 4 6 0 版本支持 ApplicationIcon ApplicationIndicato
  • 加密(模式和填充)

    我的任务是编写一个涉及加密的小型 Java 控制台应用程序 我对加密不熟悉 所以我必须先阅读一些内容 到目前为止 给出的高级要求是应使用 AES 256 生成一次性密钥来加密文件 之后 应使用接收者的公钥 RSA 2048 来加密该 AES
  • 是否有任何“DOM 更改”事件? [复制]

    这个问题在这里已经有答案了 可能的重复 检测 DOM 中的变化 我需要设置一个事件处理程序 每当在 DOM 上添加 更改 删除某些内容时 该事件处理程序就会触发 这个答案在我的情况下不起作用 第三方开发人员可以修改 DOM 每次 DOM 更
  • 使用文件字段保存节点

    我正在为 Drupal 站点创建批量上传功能 使用 flash 我可以将文件上传到特定的 url 然后由该 url 处理这些文件 我想要做的不仅仅是上传文件 而是创建一个特定类型的节点 并将文件保存到已使用 CCK 设置的文件字段中 由于这
  • 将事件绑定到文本节点

    这是我的 HTML 我需要将点击事件绑定到 someText div someText a href A link a div someText 可以是任何文本字符串 使用 jQuery 将文本节点包裹起来 span 单击该位置 试试看 h
  • c-ares 指定 DNS 解析的网络接口

    有没有办法可以设置 DNS 请求绑定到的网络接口 我们有一个项目 需要使用高优先级流会话通过一个接口 而所有其他请求通过第二个接口传递 示例 设置 eth0 以便所有 ares 请求将通过 eth0 而不是 wlan0 我无法在 c are
  • pyqtgraph中子图大小不等

    我试图解决在 pyqtgraph 布局中为子图设置不同大小比例的问题 但没有成功 代码如下所示 from pyqtgraph Qt import QtGui QtCore import pyqtgraph as pg import pyqt
  • 如何处理 puppeteer 中 ajax 请求后加载的元素

    我正在尝试使用 puppeteer 进行网页抓取 我最近需要处理负载的元素 当我单击搜索按钮时 结果会在 AJAX 中加载 并且我需要选择我尝试选择的元素位于搜索结果中 但不在页面的初始加载中 它生成的页面屏幕截图也包含搜索结果 如果它输出