2012-12-13 8 views
8

Sto eseguendo una semplice parte di codice che scarica un sito Web tramite proxy, tuttavia a volte il proxy può essere lento e questo può causare la richiesta di WebDriver .get (url) bloccare indefinitamente.Python Selenium WebDriver come aggiungere il timeout alla funzione get (url)

C'è una parte semplice di codice Python per WebDriver che imposterà un timeout per questa funzione? Attraverso la ricerca ho trovato solo tecniche che funzionano per java.

driver.get(url) 
+0

quanto tempo muore prendere per scaricare? Ho avuto situazioni in cui la pagina appariva circa 2 minuti dopo senza problemi usando 'driver.get (URL)' –

risposta

4

trovato questo nella 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

Che sembra utile ma non so se funzioni per l'attesa implicita (esplicita?) Di .get () cal. Anche WebDriver ha una documentazione orribile, quindi non so come implementarlo per cogliere l'errore. –

+0

Sto provando anche "driver.implicitly_wait (5)" ma non sta facendo nulla. Voglio solo terminare la chiamata "driver.get (url)" se è ancora in esecuzione dopo X quantità di tempo, ma sembra che WebDriver non lo abbia reso facile. Anche questo collegamento non è di aiuto (è sempre il primo a venire): 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

Sarebbe utile sapere cosa ti aspetti che accada. La mia comprensione è quando il timeout si verifica quando viene emessa un'eccezione di Timeout. – srhegde

7

Per tutti i cretents web là fuori quello che ho usato per risolvere questo problema era questo. Selenio utilizza la libreria presa così ho impostato un timeout sul modulo socket, questo genera un errore che possiamo utilizzare per inviare la chiave di fuga al browser (che si ferma il caricamento della pagina):

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

Non è davvero una buona idea impostare il timeout del socket globale. – erm3nda