编写一个 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
。然后你的程序会继续执行。
一般来说,我想编写一个等待条件满足的函数。
具体来说,我希望它等到元素存在或不存在,所以当这个元素存在时,我希望我的脚本立即知道并继续。
更详细地说,在 "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
。然后你的程序会继续执行。