Selenium-Error: Timed out receiving message from renderer: -0,000

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Winflo
User
Beiträge: 9
Registriert: Donnerstag 25. Juni 2020, 12:17

Hallo zusammen,

ich habe leider ein Problem bei der Verwendung von Selenium. Um genauer zu sein, voraussichtlich zwischen der Verbindung zwischen dem Chromedriver und Chromium (nur meine Vermutung). Ziel des Programms ist es, Daten auf einem Preisvergleichsportal, welches JavaScript verwendet, auszulesen. Der Fehler tritt immer unterschiedlich auf. Manchmal nach ungefähr 1.000 URL-Aufrufen, manchmal nach circa 3.500 URL-Aufrufen.

Betriebssystem: Raspberry Pi OS
Driver: Chromedriver: 88.0.4324.187-rpt1
Browser: Chromium-Browser 88.0.4324.187-rpt1
Entwicklungsumgebung: Thonny
Selenium Version: 3.141.0

Errormeldung: TimeoutException: Message: timeout: Timed out receiving message from renderer: -0,000 (Session info: headless chrome=88.0.4324.187) errorhandler.py.line242

Code: Alles auswählen

#Webdriver-Optionen:
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-gpu")
options.add_argument("--disable-browser-side-navigation")
options.add_argument("--disable-infobars")
options.add_argument("--headless")
driver = webdriver.Chrome("/usr/bin/chromedriver", options=options)
Ich hoffe, ihr könnt mir helfen. Meine stundenlangen Recherchen haben nichts ergeben. Wenn ihr weitere Informationen benötigt, sagt gerne Bescheid.
Winflo
User
Beiträge: 9
Registriert: Donnerstag 25. Juni 2020, 12:17

Zusatz: Hier noch ein Teil des Selenium-Codes aus meinem Programm:

Code: Alles auswählen

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

#Url-Aufrufen
driver.get(abfrage_url)

#Warten bis Element sichtbar ist
try:
     element = WebDriverWait(driver, 120).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='price-middle']")))
except TimeoutException:
     print("Laden der Seite fehlgeschlagen.")

#Einer von mehreren Codes, die die gefundenen Daten in eine Liste packen sollen...
anbieter_finden = driver.find_elements_by_class_name("dealer-name")
for anbieter in anbieter_finden.
     anbieter_liste.append(anbieter.text)

...
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du kannst im Fehlerfall doch einen oder mehrere weitere Versuche starten. Dafür musst du nur eine Schleife um die Abfragen bauen, die halt meistens im ersten Versuch gelingt, aber zB auf drei Durchläufe ausgerichtet ist (Stichwort: range). Nach einem Fehler ggf noch etwas sleep() einbauen. Den frühen Ausstieg nach Erfolg kann man leicht mit return erledigen, wenn man die Abfrage in eine eigene Funktion steckt.
Winflo
User
Beiträge: 9
Registriert: Donnerstag 25. Juni 2020, 12:17

Vielen Dank, das hat geholfen!
Antworten