【问题标题】:Puppeteer: how to listen for http responses until you get to the right one?Puppeteer:如何监听 http 响应,直到找到正确的响应?
【发布时间】:2021-08-25 22:54:30
【问题描述】:

目标: 我正在写一个 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 更改为调用page.on('request', ...),但它仍然只捕获了第一个请求。我曾短暂考虑过将 Promise 放入 for 循环中,但这似乎很混乱。

任何建议表示赞赏!

【问题讨论】:

    标签: javascript puppeteer es6-promise jest-puppeteer


    【解决方案1】:

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

    如果这不是您要查找的内容,请尝试发布有关您的问题的更多信息,例如,一旦您打开页面,您会得到什么样的响应,可能是网络标签的屏幕截图。

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 2018-11-01
      • 2015-12-04
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多