python selenium webscraping“NoSuchElementException”无法识别

时间:2013-10-05 17:16:53

标签: python exception selenium selenium-webdriver

有时在页面上我会寻找一个可能存在或不存在的元素。我想尝试用NoSuchElementException来捕获这个案例,当某些HTML元素不存在时,selenium会抛出这个案例。原始例外:

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

谷歌搜索/文档没有任何结果......我觉得奇怪的是硒很好地抛出一个例外但却无法抓住它。

2 个答案:

答案 0 :(得分:97)

尝试使用elt.NoSuchElementExceptiondriver.NoSuchElementException,因为它可能是在其中一个范围内定义的。或者,您可能必须使用from selenium import NoSuchElementException将其纳入范围。

更好的是:from selenium.common.exceptions import NoSuchElementException

答案 1 :(得分:0)

您可以使用from selenium.common.exceptions import *然后写except NoSuchElementException