如何解决等到元素中的文本更改
请建议 Selenium 是否有一个好的选择来等待元素内的文本发生更改。 条件:
- 页面不会自动重新加载
- 动态重新加载我需要的文本元素
- 更新此数据所需的时间未知
- 预期文本未知。这是一个时间戳。
我编写了一个方法,它每 1 秒(或我设置的任何时间)检查一次,并在更改时获取值。
但我认为可能有一些更好的选择。我尽量避免使用 time.sleep,但在目前的情况下,这是我唯一的选择。
注意,此文本即使在 5 分钟后也可能发生变化,因此我需要调整重试次数 retries
或 time.sleep()
另外,我使用 print
只是为了调试。
def wait_for_text(driver):
init_text = "init text"
retry = 1
retries = 120
start_time = time.time()
while retry <= retries:
time.sleep(1)
field_text = driver.find_element_by_id("my_id").text
if field_text != init_text:
break
retry += 1
now = time.time()
total_time = now-start_time
print(f"Total time for text to change {total_time}")
print(f"Final field value: {field_text}")
解决方法
你可以这样做:
driver.get("https://stackoverflow.com")
init_text = "Log in"
from selenium.webdriver.support.wait import WebDriverWait
waiter = WebDriverWait(driver=driver,timeout=120,poll_frequency=1)
waiter.until(lambda drv: drv.find_element_by_class_name("login-link").text != init_text)
print("Success")
driver.quit()
所以你基本上是在等待一个元素停止等于给定的值。
P.S. - 您可以通过更改开发工具中的按钮文本来测试上面的代码片段。
,你可以循环直到文本变成你想要的值
def wait_for_text(driver):
init_text = "init text"
retry = 1
while(driver.find_element_by_id(".") != init_text ):
retry += 1
print(driver.find_element_by_id(".").text)
print("number of tries: " + retry)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。