2015-02-11 30 views
7

Mam od dawna działającą aplikację python, która okresowo (co 30-60 sekund) otwiera stronę internetową z selenem i sterownikiem chrome, uruchamia trochę javascript i wykonuje zrzut ekranu. Działa na instancji ubuntu EC2 z chromem w Xvfb iw przeważającej części wszystko działa, z wyjątkiem sporadycznego zawieszania się programu. Dzieje się to na jednej z tych linii:Chromedriver Selenium się zawiesza?

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

(nie mam dokładnej linii, ale wiem, ze sprawozdań debugowania Włożyłem w to, że jest gdzieś pomiędzy tutaj)

Niestety, Program się nie psuje, więc nie ma żadnych komunikatów o błędach, tylko czeka bez końca od godziny 19:00. Uruchamianie strace -p 'python program pid' powroty: wait4(-1, i działa strace -p 'chromedriver pid' powraca recvfrom(20,

widzę w ps axjf że proces nadal działa, jej po prostu nie robi nic. Nie wiem, co mam teraz zrobić, jakieś sugestie?

wersja

chromedriver: 2.10.267518

Google Chrome 40.0.2214.111

Selen (zainstalowany z PIP): 2.42.1

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

---- EDIT ----

Właśnie zaktualizowałem do ChromeDriver 2.14.313457 i Selenium 2.44.0, mam nadzieję, że to rozwiąże problem. Mam zamiar zostawić to na razie otwarte. Dzięki za porady do tej pory chłopaki!

---- EDIT ----

Więc usługa nadal skończyło się na powieszenie. Zastanawiam się, czy to dlatego, że na każdym z nich zamykam i restartuję google-chrome? Czy to prawdopodobnie powoduje wyciek pamięci? Jak mogę to zdiagnozować?

+1

Czy zawiesza się, jeśli opcje chrome nie są określone? Które wersje selenu i chromu stosujesz? – alecxe

+0

Spróbuj również dodać komunikaty dziennika debugowania i zobacz, na którym wierszu jest zawieszany. Pokaż też, jak uruchomić 'xvfb'. Dzięki. – alecxe

+0

zobacz moje zmiany. Kilka razy dodawałem wiadomości do debugowania, ale wydaje mi się, że nie byłem wystarczająco dokładny. – Trevor

Odpowiedz

1

Nigdy nie dowiedziałem się o konkretnym fragmencie kodu, który powodował ten problem, ale utworzenie nowego wystąpienia Xvfb przy każdym załadowaniu sterownika spowodowało naprawienie go. Być może gdzieś w interakcji między selenem a Xvfb istnieje wyciek pamięci? Tak czy inaczej, oznaczając to jako zamknięte.

6

Wpadłem na podobny problem i znalazłem odpowiedź here i napisałem o tym na blogu here. Ustawienie zmiennej środowiskowej DBUS_SESSION_BUS_ADDRESS =/dev/null działało dla mnie bez konieczności ponownego uruchamiania Xvfb przez cały czas.