66

ページ上で、そこにあるかもしれないし、ないかもしれない要素を探していることがあります。NoSuchElementException特定の HTML 要素が存在しないときにセレンがスローしていた を使用して、このケースを試してキャッチしたかったのです。元の例外:

NoSuchElementException: Message: u'Unable to locate element: {"method":"css selector","selector":"#one"}' ; Stacktrace: 
    at FirefoxDriver.prototype.findElementInternal_ (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/fxdriver@googlecode.com/components/driver_component.js:8899)
    at FirefoxDriver.prototype.findChildElement (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/fxdriver@googlecode.com/components/driver_component.js:8911)
    at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/fxdriver@googlecode.com/components/command_processor.js:10840)
    at DelayedCommand.prototype.executeInternal_ (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/fxdriver@googlecode.com/components/command_processor.js:10845)
    at DelayedCommand.prototype.execute/< (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/fxdriver@googlecode.com/components/command_processor.js:10787) 

皮肉なことに、以前にスローされたこの例外をキャッチできませんか? ここにコード:

elt = driver.find_element_by_css_selector('.information')
try:
    dat1 = elt.find_element_by_css_selector('#one').text
    dat2 = elt.find_elements_by_css_selector('#two')[1].text
    text = dat1 + dat2
except NoSuchElementException:
    text = elt.find_element_by_css_selector('#all').text
    item.set_description(text)

ここでのエラー:

NameError: name 'NoSuchElementException' is not defined

グーグル/ドキュメンテーションは何も思いつきませんでした...そして、セレンが例外をスローしても問題ないのに、それをキャッチできないのは奇妙に思えます。

4

2 に答える 2

169

最初に例外をインポートする必要があります

from selenium.common.exceptions import NoSuchElementException

そして、あなたはそれを参照することができます

except NoSuchElementException:
    # handle the element not existing

出力で例外の詳細を示したい場合は、次を使用できます。

except NoSuchElementException as exc:
    print(exc) # and/or other actions to recover 
于 2013-10-05T17:53:04.843 に答える