按请求与页面里程碑诊断 Puppeteer 代理超时
排查整页导航缓慢时,先用 requestfailed 区分网络失败,再用 HTTPResponse 状态区分服务器响应,不要直接归咎于代理。
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 读取状态。
利用这些观察找出缓慢或被拒绝的资源、重复认证或更靠后的等待条件。延长超时只是延长等待,既不会减少浏览器的工作,也不能证明每个资源连接都被接受。