9
ここでは、私がやろうとしているのはです。私は成功するでしょう: 基本的には、Webサイトにサインインしてから、クラスがソースになるのを待ちますソースコードを処理します。ここでメッセージなしのセレン・ランダム・タイムアウト例外
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: ''
はコードです::私が得る
例外
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"))
は、私もこれを試してみました:
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
私は同じ例外を取得します。
私は現在、これをしようとしています:私はそれが失敗したポイントに持っていない
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
、私はまだそれをテストしています。
申し訳ありませんが、これは非常に長いです。しかし、私はそれらのランダムタイムアウトにpythonicとクリーンなソリューションを探したいと思います。
サインインプロセスは非常に長くなることがありますが、数分待っても例外がスローされます。
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
def waiter(browser):
elements = browser.find_elements_by_class_name('the-class-i-want')
if len(elements) != 0:
return elements
return False
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(waiter)
そして、これは完全に正常に動作します:
例外の完全なトレースバックを投稿できますか?また、指定した条件が満たされていますか? (そうでなければ、 '10'秒後にタイムアウトします) – jadkik94
投稿編集済み、ごめんなさい – nnaelle
ページ上で何が起こっているのか実際に確認できる別のWebDriverを使用できますか?おそらく、あなたが待っている状態が満たされていないということだけです。 – jadkik94