如何使用pywinauto检测应用程序/窗口中是否存在指定文本?
使用pywinauto检测窗口中的指定文本
根据你提供的控件树信息,目标文本位于一个List控件(UIA后端下类型为"List",对应Win32的ListBox)中,以下是可行的解决方案:
1. 精确定位目标List控件
从控件树可以看到,该List控件有唯一的auto_id="listBoxMessages",用这个属性定位比动态变化的标题更可靠:
# 从SZRCPane10下定位List控件 list_messages = dialog["SZRCPane10"].child_window(auto_id="listBoxMessages", control_type="List")
2. 检测指定文本的两种方法
方法一:遍历所有列表项文本
获取所有项的文本后,检查是否包含目标内容:
target_text = "The Configuration Backend has just established connection to MPData" # 获取所有列表项的文本 all_item_texts = [item.text() for item in list_messages.items()] # 检查目标文本是否存在 if any(target_text in text for text in all_item_texts): print("目标文本存在") else: print("目标文本不存在")
方法二:直接匹配控件标题(更高效)
利用pywinauto的lambda标题匹配,直接查找包含目标文本的列表项,还可以设置等待超时:
target_text = "The Configuration Backend has just established connection to MPData" try: # 等待包含目标文本的列表项出现(超时10秒) list_messages.child_window( title=lambda x: target_text in x, control_type="ListItem" ).wait("exists", timeout=10) print("目标文本存在") except Exception: print("目标文本不存在")
为什么之前的尝试失败?
你之前用x["ListBox"]定位控件时,UIA后端下该控件的control_type是"List"而非"ListBox",且控件标题是动态变化的日志内容,导致定位失败,后续调用item_texts()等方法自然无法获取有效内容。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

