Python Selenium:避免ElementNotVisibleException异常

Python Selenium:避免ElementNotVisibleException异常,python,html,selenium,Python,Html,Selenium,我从来没有认真研究过HTML,所以我想说的可能不对 在编写selenium代码时,我注意到某些网页上的一些按钮并没有重定向到其他网页,但它们改变了第一个网页的结构。据我所知,发生这种情况是因为有一些JavaScript代码对其进行了修改 所以,当我想得到一些在第一页加载时不存在的数据时,我只需要点击正确的按钮序列就可以得到它,对吗 我想加载的页面是,我想得到的是给定日期的匹配列表。获取日历的最快路径是打开日历: calendary = driver.find_element_by_class_n

我从来没有认真研究过HTML,所以我想说的可能不对

在编写selenium代码时,我注意到某些网页上的一些按钮并没有重定向到其他网页,但它们改变了第一个网页的结构。据我所知,发生这种情况是因为有一些JavaScript代码对其进行了修改

所以,当我想得到一些在第一页加载时不存在的数据时,我只需要点击正确的按钮序列就可以得到它,对吗

我想加载的页面是,我想得到的是给定日期的匹配列表。获取日历的最快路径是打开日历:

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.Exception.TimeoutException


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

您出现这种行为的原因是因为此页面加载了iframe(我可以在主页上看到15个)。一旦您单击“日历”按钮,您需要将上下文切换到defaultContext或日历所在的特定iframe。有大量代码向您展示了如何切换到iframe和从iframe中切换出来。希望这有帮助。

您必须先登录吗?我在主页上没有看到任何类为“calendar btn”的元素。不,它是“calendar”按钮的类,在左上角的“log in”按钮@JeffCI下,我正在尝试找出我需要的iframe,但所有15个似乎都与日历无关…打开日历后,尝试切换到默认上下文:)日历按钮位于iframe内,但日历视图加载到默认上下文中我不敢相信,但它终于工作了!!!我在这个问题上花了大约3个小时,解决方案只有一行。真的谢谢你!