我正在尝试在网站上自动导航我的帐户。因为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
堆栈跟踪指示错误是由最后一个elem.click()引起的。我还可以确认我的程序没有在崩溃前等待一整分钟。
这是怎么回事,我该如何解决?
答案 0 :(得分:0)
# 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"]')))