如何在Python Selenium中显式地等待文本框的属性值更改?

如何在Python Selenium中显式地等待文本框的属性值更改?,python,selenium-webdriver,Python,Selenium Webdriver,在使用Python Selenium实现自动化的过程中,我遇到了一个场景,其中基于某些处理填充了文本框总量。文本框需要一些时间才能填充。我使用下面的代码来获取数据,但是我得到的数据是“”(空值)。如果我使用睡眠,我可以正确地得到总睡眠量。有人能告诉我如何显式地等待元素属性值的更改吗 driver.find_element_by_css_selector('input#TotalAmount').get_attribute("value") 我没有关于使用什么代码的具体细节,但解决方案似乎是使用

在使用Python Selenium实现自动化的过程中,我遇到了一个场景,其中基于某些处理填充了文本框总量。文本框需要一些时间才能填充。我使用下面的代码来获取数据,但是我得到的数据是“”(空值)。如果我使用睡眠,我可以正确地得到总睡眠量。有人能告诉我如何显式地等待元素属性值的更改吗

driver.find_element_by_css_selector('input#TotalAmount').get_attribute("value")

我没有关于使用什么代码的具体细节,但解决方案似乎是使用a来等待您正在寻找的条件。

我相信您使用
时间的方法是正确的。使用sleep
来等待填充值,但我认为您可以使用
while True
块来改进它,继续尝试,直到返回值

考虑以下几点:

from selenium.common.exceptions import WebDriverException
import time

MAX_TIME = 5  # This is the maximum time that the loop executes for
start_time = time.time()

while True:
    # Attempt to select the element from the browser
    val = driver.find_element_by_css_selector('input#TotalAmount').get_attribute("value")

    # If an empty string is not returned, break out
    if val != '':
        break

    # If the maximum execution time has been exceeded, raise a WebDriverException
    elif time.time() - start_time > MAX_TIME:
        raise WebDriverException

    # Otherwise sleep for 0.5s and retry
    else:
        time.sleep(0.5)

在本例中,while块将继续执行,直到返回除
'
以外的值,或者如果执行时间超过5秒,则会引发
WebDriverException

我认为这是一个非常危险的语句。如果出现导致数据无法填充的缺陷,它将进入一个无休止的循环。其次,在任何自动化的情况下,使用睡眠都是一种糟糕的做法,因为如果一个人这样做,团队中的每个成员都会开始这样做。请帮助我使用任何selenium方法。如果循环管理正确,这并不危险。例如,我已经更新了我的答案,在5秒后循环终止,并有机会引发异常。或者,如果您不想使用while True循环,请将timeout语句作为while循环的条件。我已经按照链接中提到的那样尝试了,但仍然无法获得它。我们还有别的办法吗?