Ecco cosa sto cercando di fare e la maggior parte delle volte che riesco: Fondamentalmente sto accedendo a un sito Web e quindi attendo che una classe si trovi nella sorgente , quindi elaborare il codice sorgente.Eccezioni casuali di timeout del selenio senza alcun messaggio
L'eccezione ottengo:
Traceback (most recent call last):
File "foo.py", line 495, in <module>
report(login, password)
File "foo.py", line 430, in report
data = bar(login, password)
File "foo.py", line 113, in
ui.WebDriverWait(browser, 10).until(lambda browser: browser.find_elements_by_class_name("the-class-i-want"))
File "/Library/Python/2.7/site-packages/selenium/webdriver/support/wait.py", line 71, in until
raise TimeoutException(message)
selenium.common.exceptions.TimeoutException: Message: ''
Ecco il codice:
from selenium import webdriver
import contextlib
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.support.wait import WebDriverWait
with contextlib.closing(webdriver.PhantomJS('phantomjs')) as browser:
browser.get('mywebsite')
login_form = browser.find_element_by_id('login-form')
email = browser.find_element_by_name('login')
password = browser.find_element_by_name('password')
email.send_keys(login)
password.send_keys(password)
password.send_keys(Keys.RETURN)
ui.WebDriverWait(browser, 10).until(lambda browser: browser.find_elements_by_class_name("the-class-i-want"))
ho provato anche questo:
wait_count = 0
while wait_count < 6:
print wait_count
ui.WebDriverWait(browser, 10).until(lambda browser: browser.find_elements_by_class_name("the-class-i-want"))
if browser.find_elements_by_class_name("the-class-i-want"):
break
wait_count += 1
ottengo la stessa eccezione.
Attualmente sto cercando questo:
wait_count = 0
while wait_count < 6:
try:
ui.WebDriverWait(browser, 10).until(lambda browser: browser.find_elements_by_class_name("the-class-i-want"))
if browser.find_elements_by_class_name("the-class-i-want"):
break
except:
wait_count += 1
continue
non ho al punto in cui viene a mancare, sto ancora testarlo.
Siamo spiacenti, questo è molto lungo. Ma mi piacerebbe trovare una soluzione pitonica e pulita a quei timeout casuali.
Un'altra informazione che potrebbe aiutare anche: la firma in corso è a volte molto lunga, ma anche con diversi minuti di attesa, si getta l'eccezione.
Puoi pubblicare il traceback completo dell'eccezione? Inoltre, sei sicuro che la condizione specificata sia soddisfatta? (altrimenti, verrà timeout dopo "10" secondi) – jadkik94
Post modificato, spiacente – nnaelle
Puoi provare a utilizzare un altro WebDriver in cui puoi effettivamente vedere cosa sta succedendo sulla pagina? Forse è solo che la condizione che stai aspettando non viene soddisfatta. – jadkik94