Selenium显式等待在Python中不起作用

Selenium显式等待在Python中不起作用,python,selenium,Python,Selenium,我正在尝试在网站上自动导航我的帐户。因为Selenium不会跨会话存储我的cookie,所以每次我都必须通过弹出窗口接受服务条款。这很好,但Selenium不能等待 # wait 1 minute wait = WebDriverWait(driver, 60) # wait for TOS to appear wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="tos_agree"]'))) # accept TOS ele

我正在尝试在网站上自动导航我的帐户。因为Selenium不会跨会话存储我的cookie,所以每次我都必须通过弹出窗口接受服务条款。这很好,但Selenium不能等待

# wait 1 minute
wait = WebDriverWait(driver, 60)

# wait for TOS to appear
wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="tos_agree"]')))

# accept TOS
elem = driver.find_element_by_xpath('//*[@id="tos_agree"]')
elem.click()
elem = driver.find_element_by_xpath('//*[@id="accept_tos"]')
elem.click()

# wait for login window to appear (b/c TOS needs to fade)
wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="login-dropdown"]')))

# login
elem = driver.find_element_by_xpath('//*[@id="login-dropdown"]')
elem.click()
第一次等待似乎有效,但我收到了这个消息

Message: Element <a id="login-dropdown" class="dropdown-toggle" href="/login"> is not clickable at point (1228.0749740600586,18.5) because another element <h2 class="heading"> obscures it
消息:元素在点(1228.0749740600586,18.5)处不可单击,因为另一个元素遮挡了它
堆栈跟踪表明错误是由最后一个元素引起的。单击()。我还可以确认我的程序在崩溃前没有等待一分钟

发生了什么事,我该怎么解决

# wait for login window to appear (b/c TOS needs to fade)
wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="login-dropdown"]')))
上述行不会等待TOS在所有情况下褪色。如果他们使用css转换来淡入淡出,在转换完成之前,您的登录下拉列表将可见

只需添加一个隐形等待fpr TOS并尝试。所以你可以这样写

 # wait for TOS to fade)
wait.until(EC.invisibility_of_element_located((By.XPATH, '//*[@id="accept_tos"]')))
# wait for login window to appear
wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="login-dropdown"]')))