Python Selenium time.sleep()隐式工作,而WebDriverWait失败

Python Selenium time.sleep()隐式工作,而WebDriverWait失败,python,selenium,Python,Selenium,我在使用selenium和python通过id定位web元素时遇到了一个问题 这只是页面上的一个元素,我可以找到所有其他元素 如果我尝试使用 驱动程序。通过id(“btUpdate”)查找元素。单击() 按生成的\u id查找\u元素\u selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素: 如果我添加一个 driver.implicitly_wait(20) 如果我使用以下方法,我会得到相同的结果: WebD

我在使用selenium和python通过id定位web元素时遇到了一个问题

这只是页面上的一个元素,我可以找到所有其他元素

如果我尝试使用

驱动程序。通过id(“btUpdate”)查找元素。单击()

按生成的\u id查找\u元素\u

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:

如果我添加一个

driver.implicitly_wait(20)
如果我使用以下方法,我会得到相同的结果:

WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.ID, id)))
然而,如果我把一个简单的time.sleep(2)放在find\u元素\u by\u id之前,它就会工作

当其他人都失败了,为什么睡眠能起作用?它将在那里等待20秒,使用wait命令,但仍然无法找到该元素。再睡2秒钟,它就会觉得很好

有什么想法吗

编辑以获取更多信息

使用ChromeDriver 78.0.3904.70的铬合金

是的,JeffC您是对的,当我使用WebDriverWait时,它确实会失败,并出现不同的错误

selenium.common.exceptions.TimeoutException: Message: 

我还尝试了位于的元素的可见性,但得到了相同的TimeoutException。

您可以尝试等待不同的条件,而不是单击
元素,您可以尝试等待位于的元素的可见性

element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.ID, "btUpdate")))

element.click()

有趣的问题,奇怪的是,
隐式等待
在这里对您不起作用。

您可以尝试在不同的条件下等待,而不是
元素可点击
,您可以尝试在这里帮助您找到元素的可见性

element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.ID, "btUpdate")))

element.click()

有趣的问题,奇怪的是,
隐式等待
在这里不适用于您。

您使用的是哪个web驱动程序,包括版本?您正在使用哪个浏览器版本?如果您正在等待使用WebDriverWait单击,您不会得到NoTouchElementException,而是会得到超时异常。请发布每次代码尝试,运行它,然后发布每次尝试的完整错误消息。我的猜测是,您看到它失败了,但没有意识到它在不同的消息中失败了。这些不同的消息可能会为您/我们指明正确的方向。您使用的是哪种web驱动程序,包括版本?您正在使用哪个浏览器版本?如果您正在等待使用WebDriverWait单击,您不会得到NoTouchElementException,而是会得到超时异常。请发布每次代码尝试,运行它,然后发布每次尝试的完整错误消息。我的猜测是,您看到它失败了,但没有意识到它在不同的消息中失败了。这些不同的消息可能会为您/我们指明正确的方向。根据Selenium可单击的元素是可见的,而不是禁用的,因此等待可见的消息不会有任何不同(并且可能会花费更少的时间)。我认为这确实取决于元素。在生成“hacky”HTML的较新Javascript框架中,我见过
element\u to\u be\u clickable
超时的情况,因为基于DOM上下文,元素似乎不可交互,即使它真的是要被点击的。根据Selenium可点击的元素是可见的,而不是禁用的,因此等待可见不会有什么不同(并且可能会花费更少的时间)。我认为这确实取决于元素。在生成“hacky”HTML的较新Javascript框架中,我看到过
element\u to\u be\u clickable
超时的情况,因为基于DOM上下文,该元素看起来不可交互,即使它确实是要被单击的。