Selector:UI 元素定位器
Selector 类用于在 Windows 窗口的 UI 树中检索控件。它支持极具灵活性的链式调用:你可以先过滤属性,接着跳转层级,最后直接在链条末端触发动作。
1. 导入模块
在使用选择器前,请确保已导入核心类:
# 导入选择器类
from ascript.windows.window import Selector
2. 初始化方法
🔍 创建选择器 Selector()
定义查找的起点。选择器会基于指定的窗口或标题开始构建 UI 树索引。
代码块:
# 初始化选择器实例
Selector(window=None, title=None, depth=0xFFFFFFFF)
参数详解:
- window (Window): 目标窗口对象。若提供此参数,查找将限制在该窗口范围内。
- title (str): 若
window为 None,则根据此标题正则表达式查找并关联窗口。 - depth (int): 初始搜索深度限制,默认搜索全层级。
3. 链式过滤方法
用于筛选具有特定特征的控件。字符串参数均支持 正则表达式。
🏷️ 基础标识过滤
.name()
代码块: selector.name(val)
参数详解:
- val (str): 匹配控件的
Name属性。
.type()
代码块: selector.type(val)
参数详解:
- val (str): 匹配控件类型名(如
"ButtonControl","EditControl")。
.res_id()
代码块: selector.res_id(val)
参数详解:
- val (str): 匹配控件的
AutomationId(资源 ID)。
.class_name()
代码块: selector.class_name(val)
参数详解:
- val (str): 匹配控件的系统类 名
ClassName。
.handle()
代码块: selector.handle(val)
参数详解:
- val (int): 匹配控件的原生窗口句柄。
⚙️ 状态与内容过滤
.value()
代码块: selector.value(val)
参数详解:
- val (str): 匹配控件当前显示或持有的文本值。
.description()
代码块: selector.description(val)
参数详解:
- val (str): 匹配控件的
HelpText描述信息。
.visible()
代码块: selector.visible(val=True)
参数详解:
- val (bool): 过滤当前是否在屏幕内显示的元素。
.enabled()
代码块: selector.enabled(val=True)
参数详解:
- val (bool): 过滤控件是否处于启用(非禁用)状态。
.clickable()
代码块: selector.clickable(val=True)
参数详解:
- val (bool): 过滤是否支持指令级点击模式的控件。
4. 链式跳转与动作方法
在定位过程中改变搜索位置或直接触发交互。
⛓️ 关系跳转
🌿 子级跳转 .child()
代码块:
# 跳转到当前匹配节点的子节点
selector.child(index=None)
参数详解:
- index (int/None):
None选取所有子元素;正整数选取第 N 个(从 1 开始);负整数从后往前选取(如-1)。
🌳 父级跳转 .parent()
代码块:
# 向上跳回父级节点
selector.parent(n=1)
参数详解:
- n (int): 向上跳转的层级数。例如
2表示跳转到爷爷节点。
👬 兄弟跳转 .brother()
代码块:
# 跳转到同级兄弟节点
selector.brother(index=None)
参数详解:
- index (int): 目标兄弟节点在同级中的索引位置。
🖱️ 动作插值
🖱️ 链式点击 .click()
代码块:
# 在定位链条中直接执行点击
selector.click(simulate=False)
参数详解:
- simulate (bool):
False尝试静默指令点击(不动鼠标);True强制物理模拟点击。
⌨️ 链式输入 .input()
代码块:
# 在定位链条中直接输入文本
selector.input(msg)
参数详解:
- msg (str): 要输入的字符串内容。
5. 执行与输出方法
🎯 获取元素 find() / find_all()
代码块:
# 返回找到的第一个 UIElement 对象
selector.find()
# 返回找到的所有满足条件的 UIElement 对象列表
selector.find_all()
🎄 获取 UI 树 get_uielement_tree()
代码块:
# 解析并返回当前窗口的 UI 结构树
selector.get_uielement_tree(as_json=False)
参数详解:
- as_json (bool): 为
True时返回 JSON 字符串;为False返回嵌套的UIElement对象。
💡 案例演示
# 导入模块
from ascript.windows.window import Window
from ascript.windows.ui import Selector
# 1. 关联窗口
win = Window.find(process_name="notepad.exe")
# 2. 链式定位并点击
Selector(win).name("文件").type("MenuItem").click()
# 3. 跨层级跳转输入
# 找到“密码”文字 -> 跳到父级 -> 找子级中的输入框 -> 输入
Selector(win).name("密码").parent().child().type("EditControl").input("secret123")