スクリプトは、DOM で使用できない UI コンポーネントにアクセスしていることがあります。この原因は、次の図に示すように、ネットワーク遅延である可能性があります。つまり、DOM がアクセスする準備ができていません。

Network Latency Diagram

この問題は、明示的または暗黙的いずれかの待機を使用して回避できます。次のセクションでは、さまざまなタイプの待機とそれぞれの使用するタイミングについて説明します。

明示的と暗黙的の比較

WebDriver 関数 driver.implicitly_wait(n) は、WebDriver のセッションの残り期間を設定します。使用できない要素にアクセスしようとすると、WebDriver は、DOM でその要素を見つけるまで、最大 n 秒の間再試行します。この単純なアプローチは、多くの場合、スクリプトを確実に動作させるために十分です。

次の図では、WebDriver は使用可能になるまで Button 2 のクリックを再試行します。

Explicit Wait Diagram

明示的な待機とは、コードの実行を続行する前に特定の条件が発生する必要があるコードです。要素が使用可能になるのを待機するために time.sleep() の使用を検討することもありますが、これは避ける必要があります。代わりに、Selenium Python バインディングのドキュメントの「5.1. Explicit Waits」で指定されている WebDriver API メソッドを使用します。これにより、予想される条件を待機することができます。 

次の図では、明示的な待機によって、ボタンが使用可能なとき(条件)にのみ Button 2(アクション)をクリックすることを規定しています。

Explicit Wait Diagram