2017-01-13 3 views
0

Wie bekomme ich den Text aus einer Map Pop-up-Box basierend auf leafletjs. Die url is this. Ich bekomme auch diesen Fehler: NoSuchElementExceptionPython Selen - Holen Sie sich Text aus der LeafletJS Pop-up-Box und NoSuchElementException

Wenn ich nach Parzelle gesucht und die relevanten Informationen wie unten angezeigt eingegeben, dann möchte ich den gesamten Text auf der Box mit class_name: 'leaflet-popup-content'?

# Creates an instance driver object... 
driver = webdriver.Chrome() 

# load the url above 
driver.get(url) 

# ============= 
# Find and fill SEARCH BOX by id.... 
driver.find_element_by_id('searchBox').send_keys('1083CX') 

# Send the form by clicking on the searcht botton... 
driver.find_element_by_id('searchButton').click() 

driver.find_element_by_id('listElementContent0').click() 
# driver.find_element_by_class_name('content').click() 

# ============= 
txt = driver.find_element_by_class_name('leaflet-popup-content').text() 
print (txt) 

Diese Anser auf die Frage bei What is the best way to avoid NoSuchElementException in Selenium? gemacht Verwendung von Java, die ich nicht verstehe. Ich benutze Python und bin neu bei all dem?

+0

Mögliches Duplikat von [ Was ist der beste Weg, NoSuchElementException in Selen zu vermeiden?] (Http://stackoverflow.com/questions/19536954/what-ist-best-way-to-avoid-nosuchelementexception-in-selenium) –

Antwort

0

Dies ist ein Timing-Problem, müssen Sie den Browser, um das Suchergebnis und den Popup-Inhalt laden lassen:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

# ... 

wait = WebDriverWait(driver, 10) 

driver.find_element_by_id('searchBox').send_keys('1083CX') 
driver.find_element_by_id('searchButton').click() 

wait.until(EC.visibility_of_element_located((By.ID, 'listElementContent0'))).click() 

# wait for popup to appear and contain data 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.leaflet-popup-content b'))) 

popup = driver.find_element_by_class_name("leaflet-popup-content") 
print(popup.text) 

Werke für mich und Druck:

Kadastrale aanduiding: ASD30AK02554G0000 
Kadastrale grootte (m2) : 930 
aanvullende gegevens bij het kadaster aanvragen 
+0

Aber druckt nicht der gesamte Text in der Popup-Box? Vielen Dank für Ihre Zeit. –

+0

@UmarYusuf ah ja, einige Teile des Popups sind auch später geladen, interessant. Ich bin nicht vertraut mit der leaflet.js und dieser bestimmten Website und nicht ganz sicher, auf was Sie sich verlassen können. Aber ein Ansatz besteht darin, noch eine Wartezeit zu warten, bis das "b" -Element im Popup "Perceelnummer" enthält, etwas in diesen Zeilen: 'wait.until (EC.text_to_be_present_in_element ((By.CSS_SELECTOR, '.leaflet -Popup-Inhalt b '), "Percezahl")). Lass es mich wissen, wenn es funktioniert oder nicht, danke. – alecxe

+0

Ich benötige Ihren Anhang zu der erweiterten Frage unter: http://StackOverflow.com/Questions/41821183/Python-Selenium-Add-Content-Topandas-Dataframe Versuchen Sie Schleife über Multi-Postleitzahlen und kratzen ihre Daten in Padas Datenrahmen –

Verwandte Themen