2012-12-13 10 views
8

Używam prostego kodu, który pobiera witrynę za pośrednictwem serwera proxy, jednak czasami proxy może być wolne, co może powodować żądanie WebDriver .get (url) blokować w nieskończoność.Python Selenium WebDriver, jak dodać limit czasu, aby uzyskać funkcję (URL)

Czy istnieje prosty fragment kodu Pythona dla WebDriver, który ustawi limit czasu dla tej funkcji? Poprzez wyszukiwanie znalazłem tylko techniki, które działają dla java.

driver.get(url) 
+0

Jak długo umiera go podjąć, aby pobrać? Miałem sytuacje, w których strona pojawiła się około 2 minuty później bez żadnych problemów z użyciem 'driver.get (URL)' –

Odpowiedz

4

Znalazłem to w docs

selenium.webdriver.remote.webdriver.set_script_timeout (TIME_TO_WAIT)

Set the amount of time that the script should wait before throwing an error. 

time_to_wait: The amount of time to wait 

Usage: 

driver.set_script_timeout(30) 
+0

Który wygląda na przydatne, ale nie wiem, czy działa dla niejawnego (jawnego?) Oczekiwania .get () cal. Również WebDriver ma okropną dokumentację, więc nie wiem jak to zaimplementować, aby złapać błąd. –

+0

Próbuję również "driver.implicitly_wait (5)", ale to nic nie robi. Po prostu chcę zakończyć wywołanie "driver.get (url)", jeśli nadal działa po X czasie, ale wygląda na to, że WebDriver nie zrobił tego łatwo. Ten link też nie pomaga (zawsze jest pierwszy): http://code.google.com/p/selenium/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Stars%20Type% 20Status% 20Priority% 20Milestone% 20Owner% 20Summary & groupby = & sort = & id = 687 –

+0

Byłoby pomocne wiedzieć, co się spodziewasz. Rozumiem, że po przekroczeniu limitu czasu generowany jest wyjątek TimeoutException. – srhegde

7

Dla wszystkich cretents internetowych tam co kiedyś rozwiązać ten problem. Selen używa biblioteki socket więc ustawić limit czasu na module gniazda, to wyrzuca błąd, którego możemy użyć do wysłania klucza ucieczki do przeglądarki (który zatrzymuje ładowanie strony):

socket.setdefaulttimeout(2) 
try: 
    driver.get(pageLink) 
except socket.timeout: 
    #send ESCAPE key to browser 
+0

To niezbyt dobry pomysł na ustawienie limitu czasu gniazda globalnego. – erm3nda

Powiązane problemy