0

我正在使用 Puppeteer 和 chrome 开发工具来拦截网络响应并在必要时对其进行修改。我使用以下代码。

const client = page._client;
await client.send("Fetch.enable", {
    patterns: [{ requestStage: "Response" }]
});

client.on("Fetch.requestPaused", async event => {
    const { requestId, request, responseStatusCode, responseErrorReason } = event;
    console.log(`Request "${requestId}" ${responseStatusCode} ${responseErrorReason} ${request.url} paused.`);
    const responseCdp = await client.send("Fetch.getResponseBody", { requestId });
    // TODO Modify response
    await client.send("Fetch.continueRequest", { requestId });
});

但这会间歇性地失败(比如 50% 的时间),并出现以下错误

Error: Protocol error (Fetch.continueRequest): Invalid InterceptionId.

什么可能导致这个问题?

4

1 回答 1

1

原来我犯了一系列错误

  1. 我加载的某些资源无效,例如文件路径不存在,文件格式不正确等等。
  2. 我意识到我的page.goto代码中有 2 个实例,这弄乱了拦截器。

更正它们可以解决此问题。派上用场的是运行 puppetterheadless: false并检查铬的网络。

于 2021-07-16T04:55:27.477 回答