implicitly_wait VS. Selenium 3.0.2 Python 2.7中的time_sleep()

时间:2017-02-16 17:19:49

标签: python-2.7 selenium selenium-webdriver

我正在尝试在http://www.yifysubtitles.com网站上使用Selenium在Python 2.7上实现一个简单的子下载程序。

我在Selenium中实现隐式或显式等待时遇到了严重的麻烦 - 肯定是由于无知而不是代码造成的。

我最终选择了破坏所有time.sleep()解决方案。该程序有效,但我想要一个更程序化的解决方案和更漂亮的代码。

以下是包含隐式和显式等待的代码:

user_input = raw_input("Enter the movie of interest: ")

profile = SetProfile()
browser = webdriver.Firefox(profile)
# browser.implicitly_wait(30)
WindowSize(400, 400)
browser.get(url)

print "Searching..."
search_bar = browser.find_element_by_id("qSearch")
click_button = browser.find_element_by_class_name("glyphicon")

#wait_1 = WebDriverWait(browser, 50)
#cookie_element = wait_1.until(EC.element_to_be_clickable((By.CLASS_NAME,"cc_btn.cc_btn_accept_all")))

time.sleep(5)

accept_cookies_btn = browser.find_element_by_class_name("cc_btn.cc_btn_accept_all")
search_bar.clear()
accept_cookies_btn.click()

search_bar.send_keys(user_input)
search_bar.send_keys(Keys.RETURN)

time.sleep(10)

#wait_2 = WebDriverWait(browser, 50)
#result_element = wait_2.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "h3.media-heading")))

result = browser.find_element_by_class_name("media-heading")
result.click()

print "Movie found!"
time.sleep(10)

req = requests.get(browser.current_url)
soup = BeautifulSoup(req.text)
link_to_sub = ResultParser(soup)

print "Choosing the best eng. subtitle..."

browser.get(url+link_to_sub[1])

download_button = browser.find_element_by_class_name("btn-icon")
download_button.click()

time.sleep(10)

browser.quit()

print "Enjoy!"

我已经注释掉了我试图使用的等待(显式或隐式)。实际上,如果我使用等待而不是time.sleep,Selenium会向我扔ElementNotVisibleException

因此,我在等待时出错吗? 关于隐式等待,当我运行程序时,Selenium总是向我抛出ElementNotVisibleException: Message:(消息为空),无论等待长度如何(尝试5,30和100!)。

当我使用显式等待时,类似地,Selenium要么抛出ElementNotVisibleException,要么似乎使用前一页中的DOM。实际上,在最后一种情况下,等待是在点击结果之后,但我得到了上一页的标题......

正如我所说,当我使用time.sleep()时,Selenium会毫无困难地找到元素。

一个简单问题的长信息:为什么我的等待似乎不起作用?

0 个答案:

没有答案