2015-02-11 2 views
7

Ich habe eine lange laufende Python-App, die regelmäßig (alle 30-60 Sekunden) eine Webseite mit Selen und Chrome-Treiber öffnen, etwas Javascript ausführen und einen Screenshot machen wird. Es läuft auf einer EC2-Ubuntu-Instanz mit Chrome in Xvfb und zum größten Teil funktioniert alles, außer zeitweise wird das Programm hängen bleiben. Es geschieht auf einer dieser Linien:Selenium Chromedriver hängt?

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); 

(Ich habe keine genaue Linie, aber ich weiß aus Debug-Anweisungen, die Sie eingefügt haben, dass es irgendwo zwischen hier)

Leider ist die Programm stürzt nicht ab, so dass es keine Fehlermeldungen gibt, es wartet endlos seit 19 Uhr letzte Nacht. Laufende strace -p 'python program pid' kehrt: wait4(-1, und strace -p 'chromedriver pid' kehrt recvfrom(20,

läuft Ich kann in ps axjf sehen, dass der Prozess noch läuft, es ist einfach nichts zu tun. Ich bin irgendwie im Verlust von was jetzt zu tun, irgendwelche Vorschläge?

chromedriver Version: 2.10.267518

Google Chrome 40.0.2214.111

Selen (mit pip installiert ist): 2.42.1

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

---- ---- EDIT

Ich habe gerade aktualisiert auf ChromeDriver 2.14.313457 und Selenium 2.44.0, hoffentlich wird dies das Problem beheben. Ich werde das für jetzt offen lassen. Danke für den Rat bis jetzt Jungs!

---- ---- EDIT

so wurde der Dienst beendet noch auflegt. Ich frage mich, ob das daran liegt, dass ich für jeden Screenshot google-chrome schließe und neu starte? Führt das möglicherweise irgendwie zu einem Speicherverlust? Wie könnte ich das diagnostizieren?

+1

Hängt es, wenn Chrome-Optionen nicht angegeben sind? Welche Selen- und Chromversionen verwendest du? – alecxe

+0

Versuchen Sie außerdem, Debugprotokollmeldungen hinzuzufügen, und sehen Sie, in welcher Zeile es hängt. Zeigen Sie auch, wie Sie 'xvfb' starten. Vielen Dank. – alecxe

+0

sehe meine Änderungen. Ich habe über die wenigen Male, die das passiert ist, Debug-Nachrichten hinzugefügt, obwohl ich denke, dass ich nicht gründlich genug war. – Trevor

Antwort

1

Ich habe nie den Code gefunden, der dieses Problem verursacht hat, aber das Erstellen einer neuen Instanz von Xvfb mit jedem Treiber scheint es zu beheben. Vielleicht gibt es irgendwo in der Interaktion zwischen Selen und Xvfb ein Speicherleck? So oder so, als geschlossen markieren.

6

Ich lief in ein ähnliches Problem und fand die Antwort here und bloggte darüber here. Das Setzen der Umgebungsvariablen DBUS_SESSION_BUS_ADDRESS =/dev/null hat für mich funktioniert, ohne Xvfb ständig neu starten zu müssen.