2016-10-07 4 views
1

Ich Scraping eine dynamische Seite, die der Benutzer erfordert, klicken Sie mehrmals auf eine Schaltfläche "Weitere Ergebnisse laden", um alle Daten zu erhalten. Gibt es einen besseren Weg, um die Aufgabe zu erreichen, auf ein Element zu klicken, während es angezeigt wird?Python Selen klicken Element während der Anzeige

Antwort

3

Ich vermute, dass Sie diese Frage stellen, weil die aktuelle Lösung langsam ist. Dies ist vor allem, weil Sie diese fest codierten Verzögerungen haben, die auf mehr warten, als sie normalerweise sollten. Um dieses Problem zu bewältigen ich anfangen würde mit Explicit Waits - initialisieren eine Endlosschleife und brechen sie einmal Selen warten gestoppt für die Schaltfläche angeklickt werden:

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

wait = WebDriverWait(driver, 10) 

while True: 
    try: 
     element = wait.until(EC.element_to_be_clickable((By.XPATH, xpath))) 
     element.click() 
    except TimeoutException: 
     break # cannot click the button anymore 

    # TODO: wait for the results of the click action 

Nun ist der letzte TODO Teil ist auch wichtig - hier schlage ich vor, Sie warten für eine bestimmte Bedingung, die anzeigen würde, dass ein Klick zu etwas auf einer Seite geführt hat - zum Beispiel wurden mehr Ergebnisse geladen. Sie können beispielsweise eine benutzerdefinierte Erwartete Bedingung verwenden, die this one ähnelt.

Verwandte Themen