2016-12-09 1 views
0

Ich versuche, eine Website namens iens mit verschiedenen Webseiten zu kratzen. Im Moment kann ich erfolgreich eine Seite scrappen.Python Selen - StaleElementReferenceException

Mein Code so weit:

chrome_path = '/Users/username/Downloads/chromedriver' 
driver = webdriver.Chrome(chrome_path) 
url = 'https://www.iens.nl/restaurant' 
pageExt = '#page=' 
restaurantList = [] 
cityList = ['utrecht'] 

def scrape(pageNumber): 
    driver.get(url + '+' + cityList[0] + pageExt + str(pageNumber)) 
    items = driver.find_elements_by_class_name("resultItem- 
    information") 
    for item in items: 
     restaurantList.append(item.text) 
    return restaurantList 

print scrape(14) 

Das gibt mir die Ergebnisse, die ich brauche. Jedoch, wenn ich mehr als eine Seite wie diese kratzen wollen:

print scrape(12) 
print scrape(14) 

ich die richtigen Ergebnisse für die Daten auf der Webseite 12, aber anstatt die Ergebnisse für die Homepage 14 als auch immer, ich die folgende Fehlermeldung erhalten :

selenium.common.exceptions.StaleElementReferenceException: Message: 
stale element reference: element is not attached to the page document 

Die Seite wird https://www.iens.nl/restaurant+utrecht genannt

Können Sie mir helfen?

Vielen Dank im Voraus!

Antwort

0

Dieses Problem scheint zufällig für jede Seite nur einmal zu reproduzieren. Könnten Sie versuchen, diesen Code und lassen Sie mich wissen, ob es wie erwartet funktioniert:

import time 

def scrape(pageNumber): 
    driver.get(url + '+' + cityList[0] + pageExt + str(pageNumber)) 
    time.sleep(1) 
    items = driver.find_elements_by_class_name("resultItem-information") 
    for item in items: 
     restaurantList.append(item.text) 
+0

Ich bekomme keinen Fehler mehr. Die erste Zeile ist immer noch korrekt, aber die zweite "scrape (number)" fügt die selbe Zeile wie die erste scrape der restaurantList hinzu. Also restaurantLine = [Ergebnisse von der ersten Seite, Ergebnisse von der ersten Seite] – titusAdam

+0

Wenn ich es bis Bereich 10 benutze, fehlen Seite 2, 4 und 6 übrigens! – titusAdam

+0

Da die Seite aus irgendeinem Grund zufällig nach 'driver.get' aufgefrischt werden kann, füge ich 1 Sekunde hinzu, um zu warten. Dies scheint jetzt zu funktionieren – Andersson