在Selenium/Python中使用显式等待

在Selenium/Python中使用显式等待,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我一直试图在单击某些web元素之前使用显式等待 我相信WebDriverWait不会在抛出异常之前等待完全延迟。它将跳转保持为“立即” try: saveLink = "//*[@id='top-level-buttons']/ytd-button-renderer[2]/a" save_present = EC.presence_to_be_clickable((By.XPATH,saveLink)) We

我一直试图在单击某些web元素之前使用显式等待

我相信WebDriverWait不会在抛出异常之前等待完全延迟。它将跳转保持为“立即”

        try:
            saveLink = "//*[@id='top-level-buttons']/ytd-button-renderer[2]/a"
            save_present = EC.presence_to_be_clickable((By.XPATH,saveLink))
            WebDriverWait(driver,5).until(save_present)
            button = driver.find_element_by_xpath(saveLink)
            ActionChains(driver).move_to_element(button).click(button).perform()
        except:
            print("Timed out save link")   

我还遇到了send_key的问题,在继续之前它没有完成发送。

通过捕获除超时错误之外的所有异常,您将不知道是否发生了其他异常。如果显式地只捕获超时错误和/或记录捕获的异常,您将看到发生了什么

我想补充一点:

从selenium.common.exceptions导入TimeoutException

并将Exception:更改为except:TimeOutException

这样,您就可以捕获WebDriverWait过期时发生的异常。如果是另一个例外,那么我们就可以知道

此外,您可能希望将状态更改为可点击,将元素更改为可点击,因为我认为您当前的选项无效


您的链接定位器也可能无效,在这种情况下,发布页面HTML将有助于缩小该问题。

谢谢,已解决该问题。我有6个try/except块,在最后2个块上错过了TimeoutException。可点击的状态是不正确的,但我的除外位隐藏了该信息: