首页 > 解决方案 > 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 个响应。

我尝试过的: 我尝试过更改teacherPromiseto 调用page.on('request', ...),但它仍然只捕获了第一个请求。我曾短暂考虑过将 Promise 放在 for 循环中,但这似乎很混乱。

任何建议表示赞赏!

标签: javascriptpuppeteeres6-promisejest-puppeteer

解决方案


我认为您不能仅通过触发 goto 并检查 url 来做到这一点。如果您想访问请求时间线(就像我们通常从网络选项卡一样),我相信您需要页面跟踪,请查看: https ://pptr.dev/#?product=Puppeteer&version=v10.0.0 &show=api-pagetracing

如果这不是您要查找的内容,请尝试发布有关您的问题的更多信息,例如打开页面后的响应可能是网络选项卡的屏幕截图。


推荐阅读