ホームページ >バックエンド開発 >Python チュートリアル >Selenium WebDriverWait が新しく開いたウィンドウで要素を見つけられないのはなぜですか?

Selenium WebDriverWait が新しく開いたウィンドウで要素を見つけられないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-21 19:30:11161ブラウズ

Why is My Selenium WebDriverWait Failing to Find Elements in a Newly Opened Window?

WebDriverWait が予測どおりに機能しない

Web ページからデータを抽出するために Selenium を利用しています。このページには、列を選択するウィンドウを起動する「custom_cols」ボタンが含まれています。この新しいウィンドウの読み込みには数秒 (具体的には約 5 秒) かかることがあります。

この遅延に対処するために、20 秒の遅延を持つ WebDriverWait を採用しました。奇妙なことに、要素が画面上に表示されているにもかかわらず、新しいウィンドウ内で要素の検索に失敗することがあります。この問題は、およそ 10 回の試行に 1 回発生します。

興味深いことに、コード内の他の場所で WebDriverWait を使用すると、期待どおりに機能し、要素をクリックする前に要素が表示されるようになります。

クエリは、新しい要素内の要素がなぜ存在するのかを中心に展開しています。ウィンドウの可視性を検出するために WebDriverWait を使用しているにもかかわらず、ウィンドウが可視であると認識されません。

提案解決策:

この問題は、要素をクリックしようとするときに、element_to_be_clickable() メソッドではなく WebDriverWait の present_of_element_located() メソッドを使用していることが原因で発生します。

これを解決するには、以下を置き換えますline:

myElem = WebDriverWait(self.browser, delay).until(EC.presence_of_element_located((By.XPATH , xpath)))

with:

myElem = WebDriverWait(self.browser, delay).until(EC.element_to_be_clickable((By.XPATH , xpath)))

WebDriverWait メソッドの理解:

以下では、前述の 3 つのメソッドについてさらに詳しく説明します。メソッド:

  1. presence_of_element_located: 可視性や対話可能性に関係なく、Web ページの DOM 上の要素の存在を検証します。
  2. visibility_of_element_located: 要素が存在し、表示され、寸法が次の値よりも大きいことを確認します。 0.
  3. element_to_be_clickable: 要素が表示され、有効化され、対話可能であることを保証し、正常にクリックできるようにします。

以上がSelenium WebDriverWait が新しく開いたウィンドウで要素を見つけられないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。