如何使用pywinauto导出TreeView控件的全部子项内容
pywinauto导出TreeView所有子项实现方案
核心思路
TreeView是层级结构控件,通过递归遍历所有TreeItem类型的子节点即可获取全量条目,遍历前优先展开节点,避免折叠状态下UIA无法识别子节点。
完整实现代码
from pywinauto import Application import time # 替换为你的目标程序路径 PathApp = "xxx.exe" # 注意:原代码connect中传入class_name='TreeView'是错误的,connect用于匹配进程/顶层窗口,TreeView是子控件不能在这里指定 app = Application(backend="uia").connect(path=PathApp) # 先定位TreeView所属的顶层窗口,title_re按你的实际窗口标题关键词修改 main_window = app.window(title_re=".*你的窗口标题关键词.*") # 定位目标TreeView控件 tree_view = main_window.child_window(class_name="TreeView", control_type="Tree") # 递归遍历节点的函数 def traverse_node(node, res_list, level=0): # 存储当前节点层级和文本 node_text = node.window_text() res_list.append((level, node_text)) # 展开节点,确保子节点可被识别 if not node.is_expanded(): try: node.expand() time.sleep(0.1) except: # 叶子节点无展开能力,直接跳过 pass # 递归遍历所有子节点 for child in node.children(control_type="TreeItem"): traverse_node(child, res_list, level+1) # 执行遍历 all_tree_items = [] for root_node in tree_view.children(control_type="TreeItem"): traverse_node(root_node, all_tree_items) # 打印结果(带树形缩进) for level, text in all_tree_items: print(f"{' '*level}{text}") # 导出到本地文件 with open("treeview导出结果.txt", "w", encoding="utf-8") as f: for level, text in all_tree_items: f.write(f"{' '*level}{text}\n")
注意事项
- 定位TreeView时如果
class_name="TreeView"匹配失败,可以替换为仅用control_type="Tree"适配不同技术框架实现的树形控件 - 如果出现节点遗漏的情况,可以适当调大节点展开后的sleep等待时长,或者给节点增加
node.wait('ready', timeout=3)的等待逻辑 - 不需要保留树形层级的话,可以删除level相关逻辑,直接存储节点文本即可
内容的提问来源于stack exchange,提问作者user11506071
相关产品推荐
相关产品推荐

