1. ホーム
  2. python

[解決済み] Python Seleniumで要素が存在するかどうかチェックする

2023-01-05 21:07:16

質問

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

私のスクリプトは CLI からうまく実行されますが、cronjob を介して実行されると、最初の find_element() テストを通過することができません。いくつかのデバッグを追加するか、または失敗する理由を理解するのに役立つ何かを追加する必要があります。

基本的に、私はログインページに行く前に'log in'アンカーをクリックしなければなりません。要素の構成は次のとおりです。

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

find_element By LINK_TEXTメソッドを使っています。

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

私はPython Noobなので、少し言語と格闘しています...。

A) リンクが実際にパイソンによって拾われることをどのように確認しますか?私はtry/catchブロックを使用する必要がありますか?

B) LINK_TEXTによってより良い/より信頼できるDOM要素を見つける方法はありますか?例:JQueryでは、より具体的なセレクタを使用することができます $('a.lnk:contains(log in)').do_something();


私は主な問題を解決し、それはちょうど指のトラブルだった - 私は正しくないパラメータでスクリプトを呼び出していた - 単純なミスです。

私はまだ、要素が存在するかどうかをチェックする方法についてのいくつかのポインタが欲しいです。また、くだらない time.sleep() 呼び出しを使用する代わりに、暗黙的/明示的な待機の例/説明もあります。

乾杯、ns

どのように解決するのですか?

A) はい。 要素が存在するかどうかを確認する最も簡単な方法は、単に find_element の中で try/catch .

B) はい、私はいつも2つの理由から、テキストを使用せずに要素を識別するようにしています。

  1. テキストは変更される可能性が高く、また。
  2. が重要な場合、ローカライズされたビルドに対してテストを実行することができなくなります。

のどちらかを解決する必要があります。

  1. xpath を使用して、ID やその他の一意な識別子を持つ親または祖先要素を見つけ、それに一致する子/子孫を見つけるか、または。
  2. を使用すると、リンク自体の ID または名前、あるいは他の一意の識別子を要求することができます。

フォローアップの質問に対して try/catch を使うことで、要素が存在するかどうかを知ることができます。また、待機の良い例がここにあります。 http://seleniumhq.org/docs/04_webdriver_advanced.html