Hier ist, was ich versuche zu tun und die meiste Zeit gelingt mir: Grundsätzlich bin ich auf einer Website anmelden und warten dann auf eine Klasse in der Quelle zu sein , dann den Quellcode verarbeiten.Selen Random Timeout Ausnahmen ohne Nachricht
Die Ausnahme, die ich erhalten:
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: ''
Hier ist der Code:
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"))
ich dies auch versucht:
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
ich die gleiche Ausnahme erhalten.
Ich bin derzeit versucht, dies:
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
ich nicht auf den Punkt bekommen haben, wo es fehlschlägt, teste ich es noch.
Entschuldigung das ist sehr lang. Aber ich würde gerne eine pythonische und saubere Lösung für diese zufälligen Timeouts finden.
Eine weitere Information, die auch helfen könnte: Der Anmeldevorgang ist manchmal sehr lang, aber selbst mit ein paar Minuten Wartezeit löst er die Ausnahme aus.
Können Sie die vollständige Rückverfolgung der Ausnahme buchen? Sind Sie sicher, dass die von Ihnen angegebene Bedingung erfüllt ist? (sonst wird es nach 10 Sekunden Timeout) – jadkik94
Beitrag bearbeitet, sorry – nnaelle
Können Sie versuchen, einen anderen WebDriver zu verwenden, wo Sie tatsächlich sehen können, was auf der Seite passiert? Vielleicht ist es nur, dass die Bedingung, auf die Sie warten, nicht erfüllt wird. – jadkik94