有没有办法让 puppeteer 的 waitUntil “networkidle” 只考虑 XHR (ajax)请求?

2024-01-05

我正在使用 puppeteer 来评估我的测试应用程序中基于 javascript 的网页 HTML。

这是我用来确保加载所有数据的行:

await page.setRequestInterception(true);
page.on("request", (request) => {
  if (request.resourceType() === "image" || request.resourceType() === "font" || request.resourceType() === "media") {
    console.log("Request intercepted! ", request.url(), request.resourceType());
    request.abort();
  } else {
    request.continue();
  }
});
try {
  await page.goto(url, { waitUntil: ['networkidle0', 'load'], timeout: requestCounterMaxWaitMs });
} catch (e) {

}

这是最好的等待方式吗阿贾克斯请求要完成的?

感觉不错,但我不确定是否应该使用 networkidle0、networkidle1 等?


您可以使用待处理的 xhr-puppeteer https://github.com/jtassin/pending-xhr-puppeteer,一个公开承诺等待所有待处理的 xhr 请求得到解决的库。

像这样使用它:

const puppeteer = require('puppeteer');
const { PendingXHR } = require('pending-xhr-puppeteer');

const browser = await puppeteer.launch({
  headless: true,
  args,
});

const page = await browser.newPage();
const pendingXHR = new PendingXHR(page);
await page.goto(`http://page-with-xhr`);
// Here all xhr requests are not finished
await pendingXHR.waitForAllXhrFinished();
// Here all xhr requests are finished

免责声明:我是pending-xhr-puppeteer的维护者

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

有没有办法让 puppeteer 的 waitUntil “networkidle” 只考虑 XHR (ajax)请求? 的相关文章

  • 箭头函数不会在 ES6 类中绑定 `this` 吗? [复制]

    这个问题在这里已经有答案了 我很惊讶这不起作用 我在跑iojs2 3 0 与 harmony arrow functions flag class Foo constructor this foo foo sayHi return gt t
  • 如何覆盖 DOMParser 上的 node/xmldom errorHandler?

    I use https github com jindw xmldom https github com jindw xmldom并想要检查 XML 文件的解析错误 文档中写道 有必要在 DOMParser 的构造函数上覆盖 locator
  • 为什么人们将 typescript 的类型存储为 package.json 中的依赖项(而不是 devDep)? [复制]

    这个问题在这里已经有答案了 我注意到在几乎所有关于 typescript 的教程或博客文章中 人们只是通过 npm 安装类型和 或 typescript 相关模块的软件包作为依赖项 这是与编译时相关的事情 最终用户永远不必加载它 所以对我来
  • 如何从 puppeteer-sharp 中获取可读的浏览器/页面错误?

    我正在使用 puppeteer sharp 将某些页面呈现为 PDF 我想知道页面在浏览器中运行时渲染时是否存在任何问题 因此我设置了一些事件处理程序 page Error sender args gt logger LogCritical
  • 如何在没有到期时间的情况下使 JWT 令牌失效

    正在使用 JWT 创建一个 Node js 后端应用程序 对我来说 要求很简单 授权令牌不应该有任何到期时间 但是当用户更改密码时 我在使 JWT 失效期间遇到问题 当用户更改密码时 我将创建一个新的 JWT 令牌 并删除旧的令牌 但用户仍
  • 填充对象 ID 数组

    我的架构 var playlistSchema new Schema name type String require true videos type mongoose Schema Types ObjectId ref Video co
  • 无法使用IP地址访问WebStorm内部服务器

    我在 PC 上安装了 WebStorm 并启动了 NodeJS 服务器 我可以使用 Chrome 和 Firefox 浏览器访问它localhost但不是我电脑的 IP 地址 我按照给出的指示进行操作here https intellij
  • 使用核心 Node.js 进行会话管理,无需 Express.js

    如何在核心 Node js 非express js 项目中处理 创建用于服务器端会话管理的中间件 我可以找到基于 Express 的项目的模块 但不能找到核心 Node js 的模块 请向我推荐任何用于非express js 项目的模块或中
  • 脚本不会从nodejs应用程序中的ejs文件运行

    我正在尝试使用nodejs express mysql和ejs让网页显示图表 但我显然不明白ejs javascript等是如何工作的 我需要运行一个脚本来设置图表 来自 Chart js 模块 但它不会输出任何类型的图表 我尝试过的 将
  • 检查redis是否正在运行->node js

    我只是想知道 在 NodeJS 进程开始时 Redis 是否启动 因此用户会话是否会被存储 这是我目前所拥有的 var session require express session var RedisStore require conne
  • 要求返回一个空对象

    我有一个文件夹 其中有 index js 和几个模型 类 索引 js module exports Book require book Author require author book js var Author require aut
  • 通过签名 url 将图像上传到 AWS-S3 时图像损坏

    我正在尝试通过 NodeJS 服务器 而不是浏览器 的签名 URL 将图像上传到 aws s3 要上传的图像已由 NodeJS 生成 我从 aws 获取签名 URL 并成功将其上传到 s3 但我的形象已经被破坏了 由于某种原因 S3 向我的
  • 如何在 Node 中发送 OAuth 请求

    我想访问node js中的WS REST API 我有oauth consumer key和oauth token和 API 端点 oauth signature method 是 HMAC SHA1 如何在 Node 中发送 OAuth
  • Heroku 无法获取 /

    我是 Heroku 的新手 相信我正在按照 Heroku 网站上概述的所有步骤通过 node js 进行部署 https devcenter heroku com articles getting started with nodejs h
  • 确定预保存回调中的记录是否“是新的”

    有没有办法在猫鼬模型模式的预保存回调中找出记录是否 是新的 尚未保存 是的 有一个isNew http mongoosejs com docs api html document Document isNew模型实例上指示这一点的布尔属性
  • 在 NodeJs 中使用 Jest 模拟 Http Post 请求

    我有一个使用本机 https request 使用 Azure Function 内的 Node Js 构建的外部 POST API 一切正常 现在我正在尝试构建单元测试用例 并对模拟 Request 方法感到震惊 回调响应具有 on 功能
  • Node.js -Firebase 服务帐户私钥无法解析

    I use env我的 app js 文件中的变量用于访问密钥 一切都工作正常 直到我下载了一个新的Firebase Service Account Private Key 当我用新值替换旧值时 我无法再访问该密钥 因为terminal当我
  • 递归process.nextTick警告

    作为我的应用程序的一部分 我有以下代码行 process nextTick function pre populate cache with all users console log scanning users table in ord
  • MongoDB 和 Mongoose 的区别

    我想使用 mongodb 数据库 但我注意到有两种不同的数据库 它们有自己的网站和安装方法 mongodb 和 mongoose 所以我问自己这个问题 我该使用哪一个 因此 为了回答这个问题 我向社区询问您是否可以解释一下这两者之间的区别是
  • Node.js 和 npm phoenix-client 包与 Kerberized Apache phoenix 的连接

    我正在尝试将 Kerberized Apache phoenix 与 node js 上的 npm jdbc 包连接起来 kerberized apache phoenix 的 node js 和 npm jdbc 包问题 https st

随机推荐

  • macOS:向 Cocoa 绑定公开 Swift 属性的正确方法

    我正在 Mac 上开发一个现有的 Swift Objective C 项目 并在代码中创建一些 UI 我根据我管理的 NSTableView 中的选择启用一个按钮without使用 NSArrayController 出于原因 我有一处房产
  • 为什么 as.data.frame 忽略 col.names = vector

    我顽固地尝试在一行中创建一个具有命名行和列的数据框 我意识到我可以通过使用 colnames forecast 轻松地做到这一点 但想简化一下 如果只是为了证明我可以做到这一点 以下不起作用 没有错误 但未设置列名 forecast lt
  • 如何在 iPad 中调整网页大小/重新缩放

    我有一个网站 其移动版本使用 jquery mobile 当我将其从纵向更改为横向时 它会正确放大 但当我翻转到纵向时 它会保持相同的缩放级别 并且比视图更宽 这会破坏用户体验 我使用常规 从我所做的所有搜索来看 这应该可以 不幸的是它不适
  • 处理“超规范化”数据

    我的雇主是一家小型办公用品公司 正在更换供应商 我正在浏览他们的电子内容 以得出一个强大的数据库模式 我们之前的模式几乎是在没有任何思考的情况下拼凑在一起的 这几乎导致了一个令人难以忍受的数据模型 其中包含损坏的 不一致的信息 新供应商的数
  • Laravel 控制器/模型/视图的命名约定是什么?

    我记得听说你应该以特殊的方式命名你的控制器 模型和视图 可以是单数 也可以是复数 我不记得要命名哪些内容 而且我在文档中找不到任何有关它的信息 我猜是这样的 控制器是复数 视图是复数的 模型是单一的 我走在正确的轨道上吗 我知道这只是一个惯
  • 移动时切比雪夫距离 x 坐标错误

    所以我正在复制移相器切比雪夫距离示例 并在解决方案之后here https stackoverflow com questions 75478712 this gamestate variable not recognized phaser
  • 如何在 Django REST Framework 的单元测试期间登录用户?

    这是我的 DRF 视图 api view GET permission classes IsAuthenticated def check user request user request user use user object her
  • mysql中三个表之间的内连接

    我有 3 个表叫做 公司 联系方式 活动 联系人具有公司的外键 公司拥有活动的外键 它们都有一个 名称 列 我需要一个连接表 其中包含联系人姓名 公司名称和活动名称 contact id name company id companies
  • 根据 Woocommerce 中选择的运输方式显示隐藏付款方式

    当我在灵活的运输插件表单 wpdesk 中选择指定的 运输方式 时 我想隐藏某些付款方式并启用另一种付款方式 我已经尝试过该代码 add filter woocommerce available payment gateways gatew
  • Sine CAShapeLayer 作为 CALayer 的掩模

    我正在尝试实现下一个奇怪的事情 我有一些点 我想将它们与正弦波联系起来 Next 方法返回用于绘制绘图的点数组 NSArray plotPointsBetweenPoint CGPoint pointA andPoint CGPoint p
  • 我有多个通过 StackView 推送的 qml 文件。如何将它们连接到 C++

    我的项目包含 6 个 qml 文件 main qml 打开一个新的 ApplicationWindow 并声明工具栏 它还使用 initalItem homescreen qml 初始化 StackView 在主屏幕上 我有不同的按钮 可以
  • 在元构建级别运行 sbt 命令

    sbt 允许我们在根项目级别运行 sbt 命令 如何在元构建级别运行命令 定义在root project project dir 我的用例是我的一些 sbt 插件具有相同依赖项的不同版本 并且较旧的依赖项被逐出 我想使用 sbt depen
  • 如何更改 Android Studio 中的语法突出显示颜色?

    在其他文本编辑器中 可以更改突出显示颜色 例如comment语言的PHP 如何在 Android Studio 中更改单独的突出显示颜色 前往设置 Ctrl Alt S 然后转到IDE 设置 gt 编辑器 gt 颜色和字体 从这里您可以选择
  • ManagedBean 参数不被接受并且 Bean 似乎不在范围内

    这使用来自相同的代码primefaces 树控件 http www primefaces org showcase labs ui treeEvents jsf ManagedBean name theName eager true 第一个
  • 使用 C# Nullable 引用类型将外部 dll 中的所有类型视为可为 null

    我在项目中使用 C Nullable 引用类型 并且引用了一些不支持 Nullable 引用类型的其他 dll 我可以以某种方式告诉编译器外部 dll 中的所有属性都可以为空吗 默认情况下 编译器将所有内容显示为非空 未注释代码中的值被视为
  • 如何在 Android Studio 中对齐/格式化代码?

    是否有一种方法 快捷方式 内置功能可以对齐操作数的代码 例如 符号 例如 有一个用于 Xcode 的 XAlign https github com qfish XAlign https github com qfish XAlign 允许
  • 使用 OCR python 读取图像上的数字

    我正在尝试使用 Python 和 tesseract 中的 OpenCV 提取图像上的数字 这是我的尝试 但我什么也没得到 该代码没有返回预期的数字 import fitz pytesseract os re import cv2 sTem
  • 如何设置Android应用程序的默认语言?

    我用两种语言创建了一个应用程序 第二个 英语 当用户的默认系统语言是英语时使用 如果不是 则使用第一个 我想将第二语言 即英语 设置为默认语言 这意味着当用户打开我的应用程序并且他的系统语言不是第一个语言 也不是英语时 英语将显示为默认语言
  • GSON解析未指定类型变量

    我使用 GSON 库解析服务器 JSON 响应 后端人员有时会告诉我 出于某种原因 我们无法在 JSON 中指定变量类型 旧的 php 他们不知道如何做到这一点等等 GSON 喜欢在其对象模型中使用强类型 所以我无法将对象解析为字符串 GS
  • 有没有办法让 puppeteer 的 waitUntil “networkidle” 只考虑 XHR (ajax)请求?

    我正在使用 puppeteer 来评估我的测试应用程序中基于 javascript 的网页 HTML 这是我用来确保加载所有数据的行 await page setRequestInterception true page on reques