javascript - Puppeteer:如何监听 http 响应,直到找到正确的响应?
问题描述
目标: 我正在编写一个 Puppeteer 测试,它需要监听某个响应,检查响应 url 是否具有某种格式,然后保存响应,以便以后可以使用正文中的值。
当前代码:
假设我们有一个 const teacherId
。现在我的代码如下所示:
await page.goto(`url/teacher-profile/${teacherId}`);
// eslint-disable-next-line jest/valid-expect-in-promise
const teacherPromise = page
.waitForResponse(
response =>
response.url().includes(`/teacher-profile/teachers/${teacherId}`) &&
response.status() === 200,
)
.then(res => res.json());
const teacher = await teacherPromise;
问题: 这很好用......在找到第一个http响应时。但我知道我正在寻找的 http 响应需要更长的时间。当我手动加载页面时,它始终是网络选项卡中的第 4-6 个响应。
我尝试过的:
我尝试过更改teacherPromise
to 调用page.on('request', ...)
,但它仍然只捕获了第一个请求。我曾短暂考虑过将 Promise 放在 for 循环中,但这似乎很混乱。
任何建议表示赞赏!
解决方案
我认为您不能仅通过触发 goto 并检查 url 来做到这一点。如果您想访问请求时间线(就像我们通常从网络选项卡一样),我相信您需要页面跟踪,请查看: https ://pptr.dev/#?product=Puppeteer&version=v10.0.0 &show=api-pagetracing
如果这不是您要查找的内容,请尝试发布有关您的问题的更多信息,例如打开页面后的响应可能是网络选项卡的屏幕截图。
推荐阅读
- python - 从 json 文件中提取字段
- java - Sakai 未在 Tomcat 服务器中启动
- sharepoint - 在 sharepoint 中创建文件夹时 - 如何设置文件夹标题?
- jira - Jira REST API - 创建问题:获取工作流转换验证器中定义的必填字段
- react-native - 使用导航进入新屏幕后如何卸载挂钩
- printing - 适用于多个用户/平台的本机 VPN 服务器
- angular - Angular中的树节点选择
- javascript - nuxt项目中如何实现svelte组件?
- hive - import-hive.sh:将 Hive 导入 Apache Atlas 不会导入现有的 Hive 数据库
- python - 如何在同一数据框中划分行