编写一个 Python 函数等待并监听直到满足条件,类似于 WebDriverWait().until()

Write a Python function that waits and listens until a condition is met, similar to WebDriverWait().until()

一般来说,我想编写一个等待条件满足的函数。

具体来说,我希望它等到元素存在或不存在,所以当这个元素存在时,我希望我的脚本立即知道并继续。

更详细地说,在 "while True" 循环中,我希望我的脚本等到元素存在的那一刻(满足更一般的条件)然后打印显示此元素的时间元素,然后它再次等待直到这个元素消失,然后它打印消失的时间。并重复。

它的意思类似于硒中使用的 " WebDriverWait().until() ",但我想在 python 中编写自己的函数并且没有使用第三方库,这样即使不使用 selenium 或任何其他库我也可以使用它。

while true:
    element = WebDriverWait(driver, 28800).until(
        EC.visibility_of_element_located(
           (By.XPATH, "//span[@title = 'online']")))
    print(online_time)

    element = WebDriverWait(driver, 28800).until(
    EC.invisibility_of_element_located(
        (By.XPATH, "//span[@title = 'online']")))
    print(offline_time)

我已经搜索过了,我发现的是一堆建议使用带条件的 sleep() 函数的答案,wait() 函数,或编写某种 侦听器 ,并谈论我真的不明白的 轮询概念

不幸的是,我尝试使用 sleep() 函数,但我无法编写任何值得在此处发布的代码来尝试实现我想要的行为,因为我不知道该元素何时显示,显示多少时间它会存在,什么时候会再次消失。因此,我认为使用精确的秒数是毫无价值的。

我希望你能帮我写,或者至少引导我走上正确的道路。

欢迎解释我谈到的概念。 PS: 我是初学者。

这可能很难按照您的想法进行概括。通常,您不想等待事情发生。最好做其他事情或什么都不做。 Python 有一整个库专门处理这种事情。它叫做 asyncio.

从概念上讲,您只需要一个函数来告诉您某些操作是否完成,以及一个 while 循环。

import time    
while not action_is_complete():
    sleep(10)

这将一直持续到 action_is_complete() returns true。然后你的程序会继续执行。