Pywinauto中时间匹配判断始终为False的问题求助
问题
预期行为
判断当前时间(CurrentTime)是否等于输入指定的时间(GivenTime),若条件成立则点击按钮。
实际行为
即使当前时间与指定时间(如均为13:29:50)一致,布尔判断结果仍为False,循环持续执行,无法触发按钮点击操作。
已尝试两种代码实现:
第一种代码:
from pywinauto import Application import time from pywinauto.timings import Timings from datetime import datetime from _strptime import _strptime app = Application(backend="uia").connect(title_re=u'Website', timeout=100) Timings.after_clickinput_wait = 0 STime = input('insert STime:') STime2 = datetime.strptime(STime,'%H:%M:%S') print(type(STime2)) CurrentTime= datetime.now() while STime2 != CurrentTime: CurrentTime = datetime.now() print("%s:%s:%s" % (CurrentTime.hour,CurrentTime.minute,CurrenTime.second)) time.sleep(1) else: app.Website.child_window(title='Button' , control_type="Button").click_input()
问题:循环无法终止,else代码块无法执行,因为STime2 != CurrentTime始终为True。
第二种代码:
from pywinauto import Application import time from pywinauto.timings import Timings from datetime import datetime from _strptime import _strptime app = Application(backend="uia").connect(title_re=u'Website', timeout=100) Timings.after_clickinput_wait = 0 STime = input('insert STime:') STime2 = datetime.strptime(STime,'%H:%M:%S') flag = True while flag is True: CurrentTime=datetime.now() print("%s:%s:%s" % (CurrentTime.hour,CurrentTime.minute,CurrenTime.second)) time.sleep(1) Time = CurrentTime == STime2 if Time is True: flag = False app.Website.child_window(title='Button' , control_type="Button").click_input()
问题:无报错,但时间匹配时未触发if内的按钮点击逻辑,循环持续执行。
已将输入转换为datetime类型,但问题仍未解决,寻求可行的解决方案。
解决方案
核心问题分析
- 完整datetime对象比较不匹配:
datetime.strptime('%H:%M:%S')生成的对象默认日期是1900-01-01,而datetime.now()是当前日期,两者日期部分完全不同,直接比较永远不相等。 - 拼写错误:代码中
CurrenTime.second少了字母t,应为CurrentTime.second,会导致运行时抛出NameError。 - 缩进错误:第二种代码中
if Time is True:后的代码没有缩进,导致逻辑混乱,条件判断失效。
修正后的代码
from pywinauto import Application import time from pywinauto.timings import Timings from datetime import datetime app = Application(backend="uia").connect(title_re=u'Website', timeout=100) Timings.after_clickinput_wait = 0 # 获取指定时间的时分秒部分 STime = input('insert STime:') target_time = datetime.strptime(STime, '%H:%M:%S').time() while True: current_time = datetime.now().time() # 打印当前时间(修复拼写错误) print(f"{current_time.hour}:{current_time.minute}:{current_time.second}") # 只比较时分秒部分 if current_time == target_time: app.Website.child_window(title='Button', control_type="Button").click_input() break # 匹配成功后终止循环 time.sleep(1)
关键修改点
- 使用
.time()方法提取datetime对象的时间部分(仅时分秒),忽略日期差异,实现正确的时间匹配。 - 修复了
CurrenTime的拼写错误,同时调整变量名更规范。 - 简化循环逻辑,直接在匹配成功后执行点击并终止循环,避免冗余的flag变量。
- 修复缩进问题,确保条件判断内的代码仅在时间匹配时执行。
内容的提问来源于stack exchange,提问作者mrvn55
相关产品推荐
相关产品推荐

