Selenium:避免ElementNotVisibleException异常

时间:2017-03-27 14:58:40

标签: python html selenium

我从未认真研究过HTML,所以我可能会说的不对。

当我编写我的硒代码时,我注意到某些网页上的某些按钮不会重定向到其他网页,但它们会改变第一个网页的结构。根据我的理解,这是因为有一些JavaScript代码可以修改它。

所以,当我想获得第一页加载时不存在的数据时,我只需要点击正确的按钮序列来获取它,那么?

我想加载的页面是https://watch.nba.com/,我想要的是给定日期的匹配列表。获得它的最快途径是打开日历:

calendary = driver.find_element_by_class_name("calendar-btn")
calendary.click() 

并点击所选日期:

page = calendary.find_element_by_xpath("//*[contains(text(), '" + time.strftime("%d") + "')]")

page.click()

运行此代码,我收到此错误:

  

selenium.common.exceptions.ElementNotVisibleException

我在某处读到的问题是页面没有正确加载,或者元素不可见/可点击,所以我尝试了这个:

wait = WebDriverWait(driver, 10)

page = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[contains(text(), '" + time.stfrtime("%d") + "')]")))
page.click()

但是这次我收到了这个错误:

  

selenium.common.exceptions.TimeoutException

你能帮我解决这两个问题中的至少一个吗?

1 个答案:

答案 0 :(得分:1)

您获得此类行为的原因是因为此页面加载了iFrame(我在主页上可以看到15)一旦您单击日历按钮,您将需要将您的上下文切换到defaultContext或者日历所在的特定iframe。有大量的代码可以向您展示如何切换进iframe。希望这会有所帮助。