Playwright と Python を使用して動的 Web ページをスクレイピングする場合、データを抽出する前にページが完全にロードされるまで待つことが重要です。 Playwright でページが完全に読み込まれるまで待機するための効果的なテクニックをいくつか紹介します。
page.wait_for_load_state() を使用する
最も簡単な方法は、 page.wait_for_load_state()
API。これは、ページが「ロード」状態に達するまで待機します。これは、ページがそのロードを開始したことを意味します。 load
イベント:
await page.goto("https://example.com")
await page.wait_for_load_state()
また、ネットワーク接続が少なくとも 500 ミリ秒続くまで待機する「ネットワークアイドル」状態を待つこともできます。
await page.goto("https://example.com")
await page.wait_for_load_state("networkidle")
特定のセレクターを待つ
もう 1 つの一般的な手法は、特定のセレクターがページに表示されるまで待機することです。これは、ページの特定の部分が読み込まれたことを示します。
await page.goto("https://example.com")
await page.wait_for_selector("div.loaded")
ページを調べて、ページが完全に読み込まれた場合にのみ表示されるセレクターを見つけることが必要になる場合があります。
ナビゲーションが完了するまで待ちます
次のようにして、ナビゲーション自体の読み込みが完了するのを待つこともできます。 wait_for_navigation
:
await page.click("a.dynamic-page")
await page.wait_for_navigation()
これにより、リンクをクリックした後、ナビゲーション イベントが完了するまで実行が一時停止されます。
タイムアウトを設定する
条件が満たされない場合でもスクリプトがハングしないように、待機時にタイムアウトを設定することをお勧めします。
await page.wait_for_selector("div.loaded", timeout=10000)
セレクターが表示されない場合、エラーがスローされるまで最大 10 秒待機します。
インタラクション間の待機
レート制限エラーを回避するには、次を使用します。 sleep()
インタラクション間に遅延を追加するには:
await page.click("#submit")
await page.wait_for_navigation()
sleep(5) # wait 5 seconds
これにより、次のアクションを実行する前に、前のアクションが終了するまでの時間が確保されます。
Playwright で重要なのは、適切なイベントとセレクターを使用して、必要なページの状態を待つことです。上記の方法を使用すると、ページをスクレイピングしたり操作したりする前に、ページが読み込まれるのを確実に待つことができます。