2017-05-11 12 views
2

WebDriveに要素が存在するかどうかを調べるためにtry/except文を使用しようとしています。Python上で例外が発生したときにSelenium Webdriverでtry/exceptを使用する方法

try: 
    WebDriver.find_element_by_css_selector('div[class="..."') 
except NoSuchElement: 
    ActionToRunInCaseNoSuchElementTrue 
else: 
    ActionToRunInCaseNoSuchElementFalse 

が、このコードを実行すると、エラーを与える:

  • NameError:名 'NoSuchElement' の例外を定義する方法を

が定義されていませんか? 要素がWebページに存在している場合はコマンドを実行し、存在しない場合はコマンドを実行する方法は、より短くて簡単ですか?あなたがfind_elementsを使用して、返されたリストには、任意の要素を持っているかどうかを確認することができます代わりにtry exceptを使用しての

from selenium.common.exceptions import NoSuchElementException 

try: 
    WebDriver.find_element_by_css_selector('div[class="..."') 
except NoSuchElementException: 
    ActionToRunInCaseNoSuchElementTrue 

答えて

2

は、あなたが正しい名前(>NoSuchElementExceptionNoSuchElement)で最初にそれをインポートする必要がrequired exception使用できるようにするには

elements = WebDriver.find_elements_by_css_selector('div[class="..."') 
if not elements: 
    ActionToRunInCaseNoSuchElementTrue 
else: 
    ActionToRunInCaseNoSuchElementFalse 
    # the element is in elements[0] 
+0

ありがとう!これは私が探していたものです。 Btwは、チュートリアルでそれを見つけられませんでした。神はあなたを祝福:) –

4

: -

+2

IMHO、これはこれを行うためのより良い方法です。ロジックフローを制御するために例外を使用すべきではありません。例外は例外的でなければなりません... – JeffC

+2

@JeffC、 'Java'、' C++ 'やその他のプログラミング言語の中にあるかもしれません"跳躍する前に見ます "という慣用慣行がより一般的ですが、例外は' Python'で効率的に処理されます。許しではありません "Pythonのより好ましいidiomaです... IMHO私の答えは良いです:) – Andersson

+1

@アンダーソン私は誰かに興味があるだろう[**あなたを見て:)**]これらの間で簡単なパフォーマンステストを行う2つのスニペット。私は例外の方法(あなたのもの)が実際には遅いがおそらく一握りのmsのオーダーであると確信している。私にとっては、これはパフォーマンスとは関係がありません。例外は例外的なものでなければなりません。エラーをトラップし、致命的なエラーを防ぐために使用する必要があります。別の(非常に単純な)オプションがある場合、制御フローには使用されません。誰もが私と同意するわけではないと私は分かります。 – JeffC

関連する問題