curl 或 Axios 的快速响应通常只涉及一个资源。Puppeteer 还会从多个主机加载脚本、图片、框架和 API,并等待更靠后的页面里程碑。

既然代理已经配置在现有页面上,就观察导航过程中的各个失败事件:

page.on("requestfailed", request => {
  console.log(request.url(), request.failure()?.errorText);
});

await page.goto(targetUrl, {
  waitUntil: "domcontentloaded",
  timeout: 30000,
});

在异步流程中用真实的 targetUrl 运行这段代码。示例等待 DOMContentLoaded,它早于每个必需图片或后续应用响应的完成。把这个里程碑与原始导航等待的里程碑对照:主文档、DOM、load 或网络静默是不同结果。

403 或 500 响应并不是 requestfailed 事件。也要通过 HTTPResponse 读取状态。

利用这些观察找出缓慢或被拒绝的资源、重复认证或更靠后的等待条件。延长超时只是延长等待,既不会减少浏览器的工作,也不能证明每个资源连接都被接受。

相关文章