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

标签 python python-3.x wait sleep polling

通常,我想编写一个等待条件满足的函数。

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

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

这意味着类似于selenium中使用的“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() 函数,或进行某种编码listener,还谈到了我实在不明白的轮询概念

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

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

欢迎对我所讨论的概念进行任何解释。 PS:我是一名初学者程序员。

最佳答案

按照您的思考方式,这可能很难概括。通常,您不想等待事情。最好做其他事情或者什么都不做。 Python 有一个完整的库专门用于处理此类事情。它叫做 asyncio .

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

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

这将持续进行,直到 action_is_complete() 返回 true。然后你的程序将继续执行。

关于python - 编写一个等待并监听直到满足条件的 Python 函数,类似于 WebDriverWait().until(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54374195/

相关文章:

python - 检测未包含在双引号内的符号(正则表达式)

python - 如何使用 json.load 将信息从 txt 保存到字典

Python:使用两个按不同方向排序的键对列表进行排序

python-3.x - 在 Python 3 中以代码形式执行数学用户输入语句

python-3.x - 如何返回而不是打印

c# - Thread.Sleep() 暂时挂起程序的替代方案

python - 如何在 Python 中使用 MLE 估计高斯分布参数

Python从日期时间结果中获取总秒数偶尔会出现错误

javascript - jQuery 等待函数完成

vba - Access vba 等待代码完成(通过 CDO 发送电子邮件)