ブログサイトのロゴsui Tech Blog

Playwrightでクエリパラメータが付与されているページのURLを取得する

Playwrightでクエリパラメータが付与されているページのURLを取得する方法を解説します。page.on()メソッドでネットワークを監視する方法を紹介します。

結論

page.on() メソッドでネットワークを監視して、特定の URL だけを取得すれば可能です。

    // 現在のURLを取得する
  page.on('response', async (response) => {
    // レスポンスURLを取得する
    const responseURL = response.url();
    console.log('🚀 ~ page.on ~ response:', response);
  });

確認方法

response.url の内容は Chrome DevTools のリクエスト URL を見れば確認できます。


Chrome DevTools ネットワークタブの内容


リクエストURLの位置

使用例としてはこんな感じで、特定のページ URL(この場合 inori-track.vercel.app/venue)の通信だけをフィルタリングし、そこに紐づくクエリパラメータを searchParams.getAll('hoge'); で取得します。

  // 現在のURLを取得する
  page.on('response', async (response) => {
    // レスポンスURLを取得する
    const responseURL = response.url();
 
    // レスポンスURLがinori-track.vercel.app/venueのものだけを抽出する。
    if (responseURL.match(/inori-track.vercel.app\/venue/g)) {
      const url = new URL(responseURL);
      // クエリパラメータを取得する
      const params = url.searchParams.getAll('live_id');
 
      // 以下固有の処理なので気にしなくてもOK
      // IDに紐づく会場名を取得する
      const venueList = liveNames.filter((live) => params.includes(live.id));
 
      // 会場名が画面に表示されていることを確認
      for (const venue of venueList) {
        await expect(page.getByLabel(venue.name)).toBeVisible();
      }
    }
  });

参考

zenn.dev

Playwrightで特定の通信だけを抽出したい【Flutter on Webと闘う】

...

関連記事

AstroNext.jsPlaywright

Next.js から Astro へ。拡張性を捨て、シンプルさを選んだ理由

ブログに「何でもできる」Next.jsは過剰スペックでした。新機能に追いつけず、Web標準APIとの相性に悩んだ末、SSGに特化したAstroへ移行しました。拡張性を捨て、「必要最小限」を選んだ技術選択の記録です。

記事を読む
ClaudeCodeAgentsSkills

Claude Codeへ「スキルを使って」と言うのに疲れたあなたへ

Claude CodeのAgent Skillsは、ベストプラクティスに従った実装を自動化する優れた仕組みですが、Claudeの推論による実行判定には限界があります。Playwrightを例に挙げると、「クリック操作を修正して」のような自然な指示では、descriptionに「Playwright」が含まれていてもスキルが起動しないことがあります。本記事では、UserPromptSubmitフックを活用し、キーワードマッチングによってスキルを確実に起動させる実装方法を解説します。

記事を読む
RenovateGitHubActions

Renovate で作る「頑張らない」運用のすすめ

依存関係更新の手動対応をやめて、Renovate で自動化する方法をまとめました。クールダウン期間(minimum release age)を設定してサプライチェーン攻撃のリスクを回避しつつ、手間をかけずに安全性を維持する「頑張らない運用」の設計方針を紹介します。

記事を読む