2013-07-02 9 views
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) 

そして、これは完全に正常に動作します:

+0

例外の完全なトレースバックを投稿できますか?また、指定した条件が満たされていますか? (そうでなければ、 '10'秒後にタイムアウトします) – jadkik94

+0

投稿編集済み、ごめんなさい – nnaelle

+0

ページ上で何が起こっているのか実際に確認できる別のWebDriverを使用できますか?おそらく、あなたが待っている状態が満たされていないということだけです。 – jadkik94

答えて

5

ここで私はアダムグーカーを接触させた後、得た答えがあります!

関連する問題