2013-10-05 11 views
26

A volte su una pagina cercherò un elemento che può essere o non esserci. Volevo provare/catturare questo caso con uno NoSuchElementException, che il selenio stava lanciando quando alcuni elementi HTML non esistevano. eccezione originale:sito web selenio in selenio "NoSuchElementException" non riconosciuto

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) 

Ironia della sorte, non mi permette di intercettare questa eccezione, che si stava gettando prima? Codice qui:

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) 

errore qui:

NameError: name 'NoSuchElementException' is not defined 

Googling/documentazione si avvicinò con niente ... e mi sembra strano che il selenio è bene un'eccezione, ma non può prenderlo.

risposta

71

Provare sia elt.NoSuchElementException o driver.NoSuchElementException poiché è probabilmente definito nell'ambito di uno di essi. In alternativa potrebbe essere necessario utilizzare from selenium import NoSuchElementException per renderlo disponibile.

Meglio ancora: from selenium.common.exceptions import NoSuchElementException

+1

no su tutti i conti. 'AttributeError: l'oggetto 'WebElement' non ha attributo 'NoSuchElementException'',' AttributeError: 'L'oggetto' WebDriver 'non ha attributo' NoSuchElementException'', 'ImportError: non può importare il nome NoSuchElementException' – lollercoaster

+6

La versione modificata (importazione) funziona! grazie – lollercoaster

+2

aggiornato [2017]: da selenium.common.exceptions import NoSuchElementException – Devin

Problemi correlati