Python Seleniumで要素が存在するかどうかを確認する 質問する

Python Seleniumで要素が存在するかどうかを確認する 質問する

問題があります。Selenium (Firefox) Web ドライバーを使用して Web ページを開き、いくつかのリンクをクリックするなどして、スクリーンショットをキャプチャしています。

私のスクリプトはCLIからは問題なく動作しますが、cronジョブ最初の find_element() テストを通過できません。デバッグを追加するか、失敗の原因を突き止めるのに役立つ何かを追加する必要があります。

基本的に、ログイン ページに移動する前に、「ログイン」アンカーをクリックする必要があります。要素の構成は次のとおりです。

<a class="lnk" rel="nofollow" href="/login.jsp?destination=/secure/Dash.jspa">log in</a>

私は要素を見つけるLINK_TEXT メソッドの場合:

login = driver.find_element(By.LINK_TEXT, "log in").click()

A) リンクが実際に Python によって取得されているかどうかを確認するにはどうすればよいですか? try/catch ブロックを使用する必要がありますか?

B) もっと良い/より信頼できる方法はありますか?DOM要素はLINK_TEXTよりも優れているのでしょうか?例:jQueryより具体的なセレクター $('a.lnk:contains(log in)').do_something(); を使用できます。


主な問題は解決しました。それは単に指の問題でした。間違ったパラメータでスクリプトを呼び出していました。単純なミスです。

要素が存在するかどうかを確認する方法についてのヒントがまだ必要です。また、厄介な time.sleep() 呼び出しを使用する代わりに、暗黙的/明示的な待機の例/説明も必要です。

ベストアンサー1

のために):

from selenium.common.exceptions import NoSuchElementException
def check_exists_by_xpath(xpath):
    try:
        webdriver.find_element_by_xpath(xpath)
    except NoSuchElementException:
        return False
    return True

b): さらに、すべてのスクリプト全体で XPath 式を標準として採用し、上記のような関数を作成して普遍的に使用することもできます。

使用をお勧めしますCSSセレクター「ID 別」、「名前別」などを混在/使用せず、代わりに 1 つのアプローチを使用することをお勧めします。

おすすめ記事