2012-12-13 4 views
8

Ich führe ein einfaches Stück Code, der eine Website über Proxy herunterlädt, aber manchmal kann der Proxy langsam sein und dies kann die WebDriver .get (URL) Anfrage verursachen auf unbestimmte Zeit blockieren.Python Selenium WebDriver, wie Timeout zu bekommen, um (URL) Funktion

Gibt es einen einfachen Python-Code für WebDriver, der ein Timeout für diese Funktion setzt? Durch die Suche habe ich nur Techniken gefunden, die für Java funktionieren.

driver.get(url) 
+0

Wie lange dauert es stirbt zum Herunterladen nehmen? Ich hatte Situationen, in denen die Seite ungefähr 2 Minuten später ohne Probleme erschien, mit 'driver.get (URL)' –

Antwort

4

dies in der docs gefunden

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

Das sieht hilfreich aus, aber ich weiß nicht, ob es für die implizite (explizite?) Wartezeit der .get () cal. Auch WebDriver hat schreckliche Dokumentation, so dass ich nicht weiß, wie man das implementiert, um den Fehler zu fangen. –

+0

Ich versuche auch "driver.implicitly_wait (5)", aber es tut nichts. Ich möchte nur den "driver.get (url)" Anruf beenden, wenn es noch nach X Zeit läuft, aber es scheint, dass der WebDriver das nicht einfach gemacht hat. Dieser Link hilft auch nicht (er ist immer der erste, der auftaucht): http://code.google.com/p/selenium/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Stars%20Type% 20Status% 20Priorität% 20Milestone% 20Owner% 20Zusammenfassung & groupby = & sort = & id = 687 –

+0

Wäre hilfreich zu wissen, was Sie erwarten. Mein Verständnis ist, wenn die Zeitüberschreitung auftritt, wird eine TimeoutException ausgelöst. – srhegde

7

Für alle Web cretents dort heraus, was ich früher Dieses Problem zu lösen war das. Selen verwendet die Socket-Bibliothek, damit ich ein Timeout auf dem Buchsenmodul, wirft dies auf einen Fehler, den wir die Escape-Taste zu senden, um den Browser verwenden können (der die Seitenladestationen):

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

Nicht wirklich eine gute Idee, globale Socket-Timeout zu setzen. – erm3nda