メインコンテンツにスキップ

ナビゲーション

はじめに

Playwright は URL にナビゲートし、ページインタラクションによって引き起こされるナビゲーションを処理できます。

基本的なナビゲーション

最も簡単なナビゲーションの形式は、URL を開くことです。

// Navigate the page
await page.GotoAsync("https://example.com");

上記のコードはページをロードし、ウェブページが load イベントを発行するのを待ちます。load イベントは、スタイルシート、スクリプト、iframe、画像など、すべての依存リソースを含め、ページ全体がロードされたときに発行されます。

注記

ページが load の前にクライアントサイドリダイレクトを実行する場合、Page.GotoAsync() はリダイレクトされたページが load イベントを発行するのを待ちます。

ページはいつロードされるのか?

最近のページは、load イベントが発行された後も多数のアクティビティを実行します。それらはデータを遅延的にフェッチし、UI を設定し、load イベントが発行された後に高負荷なリソース、スクリプト、およびスタイルをロードします。ページが ロード されたことを伝える方法はありません。それはページ、フレームワークなどに依存します。それでは、いつ操作を開始できますか?

Playwright では、いつでもページを操作できます。ターゲット要素が 操作可能 になるのを自動的に待ちます。

// Navigate and click element
// Click will auto-wait for the element
await page.GotoAsync("https://example.com");
await page.GetByText("Example Domain").ClickAsync();

上記のシナリオでは、Playwright はテキストが可視になるのを待ち、その要素に対する残りの操作可能性チェックがパスするのを待ち、そしてそれをクリックします。

Playwright は非常に速いユーザーとして動作します - ボタンが見えた瞬間にクリックします。一般的には、すべてのリソースがロードされたかどうかなどを心配する必要はありません。

ハイドレーション

ある時点で、Playwright がアクションを実行しても、何も起こらないユースケースにつまずくでしょう。または、入力フィールドにテキストを入力しても、消えてしまいます。その背後にある最も可能性の高い理由は、ページの ハイドレーション が不十分であることです。

ページがハイドレーションされると、まず、ページの静的バージョンがブラウザに送信されます。次に、動的な部分が送信され、ページが「ライブ」になります。非常に速いユーザーである Playwright は、ページを見た瞬間に操作を開始します。そして、ページのボタンが有効になっているにもかかわらず、リスナーがまだ追加されていない場合、Playwright はそのジョブを実行しますが、クリックしても効果はありません。

ページがハイドレーション不良に苦しんでいるかどうかを確認する簡単な方法は、Chrome DevTools を開き、ネットワークパネルで「Slow 3G」ネットワークエミュレーションを選択してページをリロードすることです。目的の要素が表示されたら、それを操作します。ボタンのクリックが無視され、入力されたテキストが後続のページロードコードによってリセットされることがわかります。この問題の正しい修正方法は、ページが完全に機能するまで、インタラクティブコントロールがすべて無効になっていることを確認することです。

ナビゲーションの待機

要素をクリックすると、複数のナビゲーションがトリガーされる可能性があります。これらの場合、特定の URL への Page.WaitForURLAsync() を明示的に使用することをお勧めします。

await page.GetByText("Click me").ClickAsync();
await page.WaitForURL("**/login");

Playwright は、ページに新しいドキュメントを表示するプロセスを、ナビゲーションローディングに分割します。

ナビゲーションの開始 は、ページ URL を変更するか、ページを操作する (リンクをクリックするなど) ことで開始されます。ナビゲーションの意図は、たとえば、未解決の DNS アドレスにヒットした場合や、ファイルのダウンロードに変換された場合にキャンセルされる可能性があります。

ナビゲーションのコミット は、レスポンスヘッダーが解析され、セッション履歴が更新されたときに行われます。ナビゲーションが成功 (コミット) した後でのみ、ページはドキュメントのローディングを開始します。

ローディング には、ネットワーク経由で残りのレスポンスボディを取得し、解析し、スクリプトを実行し、load イベントを発行することが含まれます。

  • Page.Url は新しい URL に設定されます
  • ドキュメントコンテンツがネットワーク経由でロードされ、解析されます
  • Page.DOMContentLoaded イベントが発行されます
  • ページはいくつかのスクリプトを実行し、スタイルシートや画像などのリソースをロードします
  • Page.Load イベントが発行されます
  • ページは動的にロードされたスクリプトを実行します