2017-07-03 22 views
0

Ich entwickle einen Scraper in Python 2.7 mit Selen. Das Hauptproblem, mit dem ich konfrontiert bin, ist, dass mein Programm sofort endet, nachdem keine Ausnahme gefunden wurde. Ich habe mehrere Lösungen vorgeschlagen, die mir vorgeschlagen werden, aber nichts funktioniert. Wie verwenden Sie versuchen fangen etc. Hier ist der Code, den ich ausprobiert habe.Programm Exit sofort nachdem kein Element gefunden wurde Ausnahme

def check_exists_by_xpath(xpath): 
    try: 
     webdriver.find_element_by_xpath(xpath) 
    except NoSuchElementException: 
     return False 
    return True 

Ich möchte das Programm fortsetzen, auch wenn das Element nicht existiert. Kann jemand eine Lösung vorschlagen, wie man das macht? Ich habe viele andere Dinge ausprobiert, aber nichts funktioniert.

Fehlermeldung:

Traceback (most recent call last): 

    File "bot2.py", line 22, in <module> 

    driver.find_element_by_xpath(xpath) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 295, in find_element_by_xpath 
    return self.find_element(by=By.XPATH, value=xpath) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 756, in find_element 
    'value': value})['value'] 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 238, in execute 
    self.error_handler.check_response(response) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 193, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="react-root"]/section/usama"} 
    (Session info: chrome=59.0.3071.115) 
    (Driver info: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 10.0.14393 x86_64) 
+0

haben Sie einige Fehlermeldungen? Kannst du sie mit uns teilen? –

+0

Es ist zu lang, um Kommentare hinzuzufügen, also habe ich es in Frage –

+0

bearbeitet, das ist genau das, was Sie tun müssen. Kommentieren ist nicht gut. –

Antwort

1

Vermeiden try ... catch so viel wie möglich Konstruktionen.

eine bequemere Methoden:

def check_exists_by_xpath(xpath): 
    elnts = driver.find_elements_by_xpath(xpath) 
    return len(elnts) > 0 

Hinweis die Verwendung von find_elements_by_xpath anstelle von find_element_by_xpath, die den XPath-Ausdruck eine Liste von Elementen liefert entsprechen. Die Liste ist leer, wenn kein Element gefunden wird.

+0

Danke. Es löste das Problem :) –

Verwandte Themen