2015-02-11 5 views
7

Possiedo un'applicazione python con esecuzione prolungata che periodicamente (ogni 30-60 secondi) apre una pagina Web con selenio e driver chrome, esegue alcuni javascript e acquisisce uno screenshot. È in esecuzione su un'istanza di Ubuntu EC2 con Chrome in Xvfb e per la maggior parte tutto funziona, tranne che a intermittenza il programma si bloccherà. Sta accadendo su una di queste linee:Si blocca selenio Chromedriver?

options = Options() 
    options.add_argument("--disable-web-security") 
    options.add_argument("--webdriver-logfile=webdrive.log") 
    dc = DesiredCapabilities.CHROME 
    dc['loggingPrefs'] = {'browser': 'ALL'} 
    driver = webdriver.Chrome(chrome_options=options, desired_capabilities=dc) 
    driver.get(url); 

(non ho una linea esatta, ma so per istruzioni di debug ho messo nel senso che è da qualche parte tra qui)

Purtroppo, la il programma non si blocca in modo tale che non abbia alcun messaggio di errore, è solo in attesa all'infinito dalle 7 di sera della scorsa notte. Esecuzione strace -p 'python program pid' ritorni: wait4(-1, e funzionante strace -p 'chromedriver pid' ritorna recvfrom(20,

posso vedere in ps axjf che il processo è ancora in esecuzione, la sua non solo di fare qualsiasi cosa. Sono una specie di perdita di cosa fare ora, qualche suggerimento?

versione

chromedriver: 2.10.267518

Google Chrome 40.0.2214.111

Selenio (installato con pip): 2.42.1

#https://github.com/cgoldberg/xvfbwrapper 
xvfb = Xvfb(width=1920, height=1920) 
xvfb.start() 

---- ---- EDIT

Mi sono appena aggiornato a ChromeDriver 2.14.313457 e Selenium 2.44.0, si spera che questo risolva il problema. Ho intenzione di lasciarlo aperto per ora. Grazie per il consiglio finora ragazzi!

---- ---- EDIT

Quindi il servizio ancora finito per impiccagione. Mi chiedo se questo è perché per ogni screenshot chiudo e riavvio google-chrome? Questo potrebbe causare una perdita di memoria in qualche modo? Come potrei diagnosticare questo?

+1

Si blocca se non vengono specificate le opzioni chrome? Quali versioni di selenio e cromo stai usando? – alecxe

+0

Inoltre, provare ad aggiungere messaggi di log di debug e vedere su quale linea è sospesa. Inoltre, mostra come si avvia 'xvfb'. Grazie. – alecxe

+0

vedi le mie modifiche. Ho aggiunto messaggi di debug nelle poche volte in cui ciò è accaduto, anche se suppongo di non essere stato abbastanza completo. – Trevor

risposta

1

Non ho mai trovato la parte specifica del codice che causa questo problema, ma la creazione di una nuova istanza di Xvfb con ciascun carico del driver sembra averlo corretto. Forse c'è una perdita di memoria da qualche parte nell'interazione tra selenio e Xvfb? In ogni caso, contrassegnando questo come chiuso.

6

Mi sono imbattuto in un problema simile e ho trovato la risposta here e blogger su di esso here. Impostazione della variabile d'ambiente DBUS_SESSION_BUS_ADDRESS =/dev/null ha funzionato per me senza dover riavviare Xvfb tutto il tempo.