StaleElementException in Selenium-Iterationen
Beim Versuch, mit Selenium durch Suchergebnisse auf Amazon zu iterieren, stoßen Benutzer möglicherweise auf eine StaleElementException, wenn sie wiederholt nach unten scrollen neue Seiten laden. Dieser Fehler tritt auf, weil das zum Scrollen verwendete Element „bottom_bar“ nach dem Neuladen der Seite ungültig wird.
Um dieses Problem zu beheben und eine zuverlässigere Paginierung zu ermöglichen, wird empfohlen, einen einfacheren Ansatz zu wählen, der das explizite Scrollen der Seite eliminiert. Stattdessen kann Selenium kontinuierlich auf die Schaltfläche „Weiter“ klicken, bis es deaktiviert wird. Dies vereinfacht den Code und stellt sicher, dass der Treiber konsistent durch die Ergebnisse navigieren kann.
Der aktualisierte Code unten implementiert diesen Ansatz:
from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait as wait from selenium.common.exceptions import TimeoutException driver = webdriver.Chrome() driver.get('https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=sonicare+toothbrush') while True: try: wait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a > span#pagnNextString'))).click() except TimeoutException: break
Beachten Sie, dass implicitly_wait(10) nicht auf a wartet volle 10 Sekunden, sondern „wartet bis zu 10 Sekunden, bis ein Element im HTML-DOM erscheint.“ Wenn das Element daher innerhalb einer kürzeren Zeitdauer (z. B. 1 oder 2 Sekunden) gefunden wird, ist der Wartevorgang abgeschlossen.
Das obige ist der detaillierte Inhalt vonWie vermeide ich StaleElementException beim Scraping von Amazon-Suchergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!