zm.ElementFindEx 超级查找元素返回全部
🎯功能
- 与zm.ElementFind 超级查找元素的唯一区别是返回了所有找到的坐标, 注意如果多个对象的话, 仅返回找到的首个对象所有坐标.
- 除了返回抓抓上显示的元素特征信息外, 还有中心坐标, index等数据
- 支持指定范围查找, 再也不用担心找到范围外的元素节点了, 甚至直接获取指定范围内的节点
- 支持指定坐标查找, 直接获取该坐标点的元素节点, 不用再考虑特征串之类的了
- 支持抓抓上的五大元素特征串, 分别是
text
,resource-id
,class
,package
,content-desc
, 这5个元素特征串可自由填写任意数量, 且没有顺序要求, 每个特征串之间为And
关系 - 除了支持普通的完整匹配外, 还支持正则匹配模式, 让元素特征串更加灵活
- 默认仅获取最终子节点, 避免干扰, 但你也可以改为获取任意一个符合条件的节点
- 担心查找的时候节点还没出现? 限时循环查找完美解决这个问题
- 大量可选参数, 减少不必要的代码量
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表, 方便优化代码结构
📜语法
结果 = zm.ElementFindEx([对象, ...][x1,y1,x2,y2,][元素特征, ...][指定坐标x,指定坐标y,][是否最终元素,][匹配模式][,超时时间])
📥参数
参数 | 数据类型 | 解释 |
---|---|---|
对象 | 表 | 可选, 对象是指把查找一个元素用到的参数全部放到数组中, 然后用该数组做对象参数. 若要填写对象参数, 则必须写在最前面, 填写后将忽略除超时参数以外的其他普通参数. 支持多个对象参数, 每个对象为 OR 关系, 找到任何一个对象立即返回结果 |
x1 | 数值型 | 可选, 查找范围左上角x, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0 , 范围0,0,0,0 表示全屏 |
y1 | 数值型 | 可选, 查找范围左上角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0 , 范围0,0,0,0 表示全屏 |
x2 | 数值型 | 可选, 查找范围右下角x, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0 , 范围0,0,0,0 表示全屏 |
y2 | 数值型 | 可选, 查找范围右下角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0 , 范围0,0,0,0 表示全屏 |
元素特征 | 字符串 | 可选, 抓抓上获取到的元素特征值, 支持 text , resource-id , class , package , content-desc 这5个对应特征值, 可自由填写0到5个元素特征参数, 无顺序要求, 同个对象每个特征之间为 AND 关系, 内部忽略特征名, 只判断特征值, 详见例子 |
指定坐标x | 数值型 | 可选, 直接获取指定坐标上的元素特征串, 省略默认为0 , 指定坐标0,0 表示不使用本参数 |
指定坐标y | 数值型 | 可选, 直接获取指定坐标上的元素特征串, 省略默认为0 , 指定坐标0,0 表示不使用本参数 |
是否最终元素 | 布尔型 | 可选, 是否只获取没有子节点的最终元素节点, 省略默认为true , 表示只获取没有子节点的最终元素元素 |
匹配模式 | 数值型 | 可选, 元素特征的匹配模式, -1 表示直接比较是否相等的完整匹配模式, -2 表示正则匹配是否符合的正则模式, 省略默认为-1 |
超时时间 | 数值型 | 可选, 最大查找时间, 如果每个对象内都有超时时间的话, 将仅使用最大的时间做判断 |
📤返回
表
, 返回找到首个对象的所有元素特征二维表, 没找到返回 null
, 元素特征表格式为 {"id":0, "counts":0, {"x":0,"y":0,"xy":[0,0],"index":0,"text":"","resource-id":"","class":"","package":"","content-desc":"","checkable":true,"checked":true,"clickable":true,"enabled":true,"focusable":true,"focused":true,"scrollable":true,"long-clickable":true,"password":true,"selected":true,"bounds":[0,0,0,0],"left":0,"top":0,"right":0,"bottom":0,"pos":[0,0]}, ...}
, 其中 "x"
, "y"
代表找到元素节点的中心位置坐标, 可用于tap点击, "id"
代表多个对象情况下找到的那个序号, "counts"
代表找到的数量
💡示例
Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次
//参数语法与zm.ElementFind()一样, 只是返回值不同
//所以这里仅写几个例子, 更多例子详见zm.ElementFind()命令
//--------------获取所有符合条件的元素--------------//
Dim nodes = zm.ElementFindEx("android.widget.TextView", "com.android.launcher3")
If nodes Then
TracePrint "一共找到了", nodes["counts"], "个元素"
For i = 1 To nodes["counts"]
TracePrint "第", i, "个元素标题是", nodes[i]["text"], ", 坐标是", nodes[i]["x"], ",", nodes[i]["y"]
Next
Else
TracePrint "没有找到元素"
End If
//--------------多个对象情况--------------//
//如果存在多个对象时, 仅返回找到首个对象的所有元素
//例如对象1, 对象2, 对象3循环限时查找, 当找到对象2存在时, 将对象2所有元素都返回后, 立即停止查找
Dim 京东对象 = {"京东","android.widget.TextView","com.android.launcher3", 1000}
Dim 淘宝对象 = {"淘宝","android.widget.TextView","com.android.launcher3", 2000}
Dim 对象结果 = zm.ElementFindEx(京东对象, 淘宝对象, 5000)
If 对象结果 Then
TracePrint "找到了第", 对象结果["id"], "个对象, 一共有", 对象结果["counts"], "个元素"
For i = 1 To 对象结果["counts"]
TracePrint "第", i, "个元素标题是", 对象结果[i]["text"], ", 坐标是", 对象结果[i]["x"], ",", 对象结果[i]["y"]
Next
Else
TracePrint "没有找到任何一个对象喜欢你, 呜呜呜...."
End If
📘备注
- 关于多个对象查找返回注意事项
- 多个对象依旧会循环查找, 但是当找到一个对象时, 将返回该对象的所有元素节点后, 停止查找
- 如果你需要所有对象都返回所有节点, 请多写几行不同参数的代码
- 关于参数填写顺序说明
- 本插件所有参数都是可选的, 绝大多数参数对顺序没有要求, 但以下3个参数有顺序要求
- (
查找范围
,指定坐标
,超时时间
) - 这3个参数均为可选参数, 中间也可以填写其他参数, 但是前后关系不能打乱, 下面举几个例子
- 正确例子: (
查找范围
,超时时间
), (指定坐标
,元素特征
,超时时间
), (查找范围
,元素特征
) - 错误例子: (
超时时间
,查找范围
), (查找范围
,超时时间
,指定坐标
), (指定坐标
,元素特征
,查找范围
) - 如果无法理解的话, 建议按照语法说明的参数顺序填写
- 关于对象参数
- 对象参数必须从第1个位置开始填写, 并且填写后除了超时时间外的其他普通参数全都忽略
- 多个对象为
OR
关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回 - 当存在多个超时时间时, 仅最大的时间会生效, 限时内会不断查找每一个对象
- 关于元素特征串
- 支持抓抓上的
text
,resource-id
,class
,package
,content-desc
- 填写数量自定义, 你可以只写1个, 也可以写3个, 甚至都不写或者全都写.
- 查找时忽略特征名, 只找特征值, 例如你填写了
"微信"
, 那么有可能找到text
是微信
的元素, 或者content-desc
是微信
的元素. - 查找时要求填写的特征全都要找到才算符合条件, 包括填写空字符串
""
, 也会要求找到对应空字符串 - 两个特征值一样的也会查找, 例如你填写了
"微信", "微信"
, 那么查找的时候就会去找元素特征里存在两个微信
的元素
- 支持抓抓上的
- 关于最终元素
- 最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有
+
或-
的元素
- 最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有
- 关于旋转横屏坐标处理
- 如果遇到打开某个应用后, 屏幕方向被旋转了, 导致获取元素中心坐标异常时, 请使用 zm.ElementRotation 设置元素旋转方向 解决
- 需按键精灵V3.5.8以上版本支持本命令
- V4.2113: 初次加入