Подтвердить что ты не робот

Python selenium webscraping "NoSuchElementException" не распознается

Иногда на странице я буду искать элемент, который может быть или не быть. Я хотел попробовать/поймать этот случай с 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/[email protected]/components/driver_component.js:8899)
    at FirefoxDriver.prototype.findChildElement (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/[email protected]/components/driver_component.js:8911)
    at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/[email protected]/components/command_processor.js:10840)
    at DelayedCommand.prototype.executeInternal_ (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/[email protected]/components/command_processor.js:10845)
    at DelayedCommand.prototype.execute/< (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/[email protected]/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

Googling/documentation ничего не придумали... и мне кажется странным, что селен прекрасно бросает исключение, но не может его поймать.

4b9b3361

Ответ 1

Попробуйте либо elt.NoSuchElementException, либо driver.NoSuchElementException, поскольку он, вероятно, определен в области действия одного из них. В качестве альтернативы вам может потребоваться использовать from selenium import NoSuchElementException, чтобы привести его в область видимости.

Еще лучше: from selenium.common.exceptions import NoSuchElementException

Ответ 2

Вы должны использовать from selenium.common.exceptions import * а затем писать, except NoSuchElementException