2013-07-02 6 views
9

यहां मैं करने की कोशिश कर रहा हूं और अधिकांश समय मैं सफल हूं: मूल रूप से मैं एक वेबसाइट पर साइन इन कर रहा हूं और फिर स्रोत में एक कक्षा का इंतजार कर रहा हूं , फिर स्रोत कोड को संसाधित करें।सेलेनियम यादृच्छिक टाइमआउट अपवाद बिना किसी संदेश के

अपवाद मैं:

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 

मैं एक ही अपवाद

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: '' 

यहाँ कोड है।

मैं इस समय इस कोशिश कर रहा हूँ:

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 

मैं बिंदु जहां यह विफल रहता है, मैं अभी भी परीक्षण कर रहा हूँ करने के लिए नहीं मिला है।

क्षमा करें यह बहुत लंबा है। लेकिन मैं उन यादृच्छिक टाइमआउट्स के लिए एक पाइथोनिक और साफ समाधान ढूंढना चाहता हूं।

एक और जानकारी जो भी मदद कर सकती है: साइन इन प्रक्रिया कभी-कभी बहुत लंबी होती है, लेकिन कई मिनट प्रतीक्षा के साथ भी, यह अपवाद फेंकता है।

+0

क्या आप अपवाद के पूर्ण ट्रेसबैक पोस्ट कर सकते हैं? साथ ही, क्या आप सुनिश्चित हैं कि आपके द्वारा निर्दिष्ट शर्त संतुष्ट है? (अन्यथा, यह '10' सेकंड के बाद टाइमआउट होगा) – jadkik94

+0

पोस्ट संपादित, क्षमा करें – nnaelle

+0

क्या आप किसी अन्य वेबड्राइवर का उपयोग करने का प्रयास कर सकते हैं जहां आप वास्तव में देख सकते हैं कि पृष्ठ पर क्या हो रहा है? शायद यह सिर्फ इतना है कि जिस स्थिति की आप प्रतीक्षा कर रहे हैं वह पूरा नहीं हो रहा है। – jadkik94

उत्तर

5

यहाँ जवाब मैं एडम गूचर संपर्क करने के बाद मिल गया है:

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) 

और यह बिल्कुल ठीक काम करता है!

संबंधित मुद्दे