2017-03-01 35 views
0

Ich habe angefangen, einen Parser für eine lokale Immobilienseite zu schreiben. Ich Selen verwendet habe, um die Seite auszuwählen, die ich brauche, aber nach ein paar Minuten kann ich es noch einmal nicht erreichen, es gibt mir diese Fehlermeldung:Wie löst man "NoSuchElementException" Fehler?

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="tr_an-357543"]"} 
    (Session info: chrome=55.0.2883.87) 
    (Driver info: chromedriver=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320),platform=Linux 4.4.0-21-generic x86_64) 

Dies ist das Stück Code:

driver = webdriver.Chrome() 
url = "https://makler.md/md/" 
driver.get(url) 
driver.maximize_window() 

driver.find_element_by_xpath('//*[@id="rublist_lev1"]/li[1]/a').click() # acces Imobiliare 
driver.find_element_by_link_text("Vânzare apartamente, camere").click() # acces Apartamente 

parentElement = driver.find_element_by_xpath('//*[@id="tr_an-357543"]') 
elementList = parentElement.find_elements_by_tag_name("a") 

links = [] 

for element in driver.find_elements_by_xpath('//article[starts-with(@id, "tr_an-")]//a[@class="ls-detail_anUrl"]'): 
    links.append(element.get_attribute('href')) 


page = driver.get(links[15]) 

caracteristici = driver.find_element_by_xpath('//*[@id="anItemData"]/ul[2]')# Selecteaza blocul caracteristici 
print(caracteristici.text) 

driver.close() 

Wenn ich den x-Pfad für 'caracteristici' noch einmal kopiere und einfüge, funktioniert es. Wie behebe ich dieses Problem?

+1

Ändert sich die 'id' für dieses Element ''// * [@ id =" tr_an-357543 "]''? Es hört sich so an, als würden Sie nur ein paar robustere Selektoren brauchen. Es ist schwer zu sagen, wie diese aussehen könnten, ohne 'html' zu sehen. – mrfreester

Antwort

0

Es scheint, dass es einige Sekunden dauert, bis die Seite jede Seite lädt. Sie können implizit definieren warten, wenn Sie die driver warten bis zu der gegebenen Zeit zu initialisieren für die Elemente im DOM existieren, wenn für sie (einmalige Initialisierung) Suche

driver = webdriver.Chrome() 
driver.implicitly_wait(10) 

oder explizite Warte und expected_conditions in den problematischen verwenden Teile

parentElement = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="tr_an-357543"]')) 

Für Referenz waits.