リクエストとページマイルストーンで Puppeteer プロキシのタイムアウトを診断する
ネットワーク障害には requestfailed を、サーバー応答には HTTPResponse のステータスを使い、ページ全体の遅いナビゲーションをプロキシのせいにしない。
curl や Axios の速い応答は通常 1 つのリソースです。Puppeteer は複数ホストのスクリプト、画像、フレーム、API も取得し、より後のページマイルストーンを待つことがあります。
プロキシは既存のページに設定済みなので、ナビゲーション中の個々の失敗を観察します:
page.on("requestfailed", request => {
console.log(request.url(), request.failure()?.errorText);
});
await page.goto(targetUrl, {
waitUntil: "domcontentloaded",
timeout: 30000,
});実際の targetUrl を使って async ワークフローで実行します。この例は DOMContentLoaded を待つため、必要な画像や後続のアプリケーション応答の完了より早く終わります。そのマイルストーンを元のナビゲーションが待っていたものと比較します: メインドキュメント、DOM、load、ネットワークの静止はそれぞれ異なる結果です。
403 や 500 の応答は requestfailed イベントではありません。状態は HTTPResponse でも読み取ります。
観察結果から、遅いまたは拒否されたリソース、繰り返される認証、より後の待機条件を特定します。タイムアウトを長くしても待ち時間が延びるだけで、ブラウザーの処理は減らず、すべてのリソース接続が受け入れられたことも証明できません。