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 でも読み取ります。

観察結果から、遅いまたは拒否されたリソース、繰り返される認証、より後の待機条件を特定します。タイムアウトを長くしても待ち時間が延びるだけで、ブラウザーの処理は減らず、すべてのリソース接続が受け入れられたことも証明できません。

関連記事