如果请求具有唯一的端点,那么等待请求就很容易。 但是,如果所有端点都相同,但请求负载不同,例如 GraqhQL 中间层,我们如何等待特定请求。 在这种情况下,所有后端调用都是使用
https://myapplication.com/graphql-v2
完成的,但请求负载不同。
我想拦截此请求,其中有效负载包含字符串 getUserDetails
类似的东西,但更好:
const response = await page.waitForResponse(
(request) => request.url().includes('/graphql-v2') && request.body().includes('getUserDetails')
)
请参阅此答案的底部。您可以从回调中返回一个承诺而不是布尔值到
waitForResponse
,在这种情况下,Puppeteer 将等待它并使用其解析值作为接受/拒绝条件。
对于您的用例,它可能看起来像:
const response = await page.waitForResponse(request =>
request.url().includes('/graphql-v2') &&
request.json().then(data => /\bgetUserDetails\b/.test(data.query))
);
如果这不起作用,该网站的最小可重现示例将很有用,以便我可以验证代码。