可讀且可定址的無障礙樹(角色名稱 + 節點路徑)
dump_accessibility_tree 輸出的節點帶有平台的*原始*角色——在 Windows 上就是裸的
UI Automation ControlType id,例如按鈕是 "ControlType_50000"。這既難以閱讀,且序列化後的
dump 不帶任何穩定的逐節點身分(UIA RuntimeId 需要存活的元素,而 dump 已將其丟棄)。
ax_tree_walk 補上 dump 所缺、純粹且跨平台的後處理,可疊加在任何
dump_accessibility_tree 輸出之上:
control_type_name()/humanize_role()——把 ControlType id(或"ControlType_NNNNN"/"NNNNN"字串)轉成友善名稱,humanize_tree()——回傳一份每個角色都已人性化的樹深拷貝,assign_node_paths()——回傳一份深拷貝,為每個節點蓋上穩定的位置path("0.2.1")——作為 RuntimeId 身分的純粹替代,find_by_path()——由 path 反解回節點。
純標準庫,針對 AXTreeNode 值運算;不存取裝置或後端。不匯入 PySide6。
無頭 API
from je_auto_control import (dump_accessibility_tree, humanize_tree,
assign_node_paths, find_by_path, humanize_role)
humanize_role("ControlType_50000") # "Button"
humanize_role(50004) # "Edit"
tree = assign_node_paths(humanize_tree(dump_accessibility_tree()))
# 每個節點現在都有可讀角色與 tree["attributes"]["path"]
node = find_by_path(tree, "0.0.1") # 由 path 重新解析節點
未知 id 與非 UIA 角色("AXApplication")原樣通過,故不會遺失任何資訊。path 對於給定的
樹形狀是穩定的,讓腳本 / agent 在 dump → 操作的往返中對某節點有確定性的把手。
執行器指令
AC_walk_tree``(``app_name / max_results)以巢狀 dict 回傳已人性化、已蓋上 path 的樹
——即 AC_a11y_dump 的可讀對應版本。AC_humanize_role``(``role)回傳
{"role": ...}。兩者皆以唯讀 ac_* MCP 工具及 Script Builder 指令(位於 Native UI
分類下)形式提供。