zm.ElementFindEx 超级查找元素返回全部

文章目录
  1. 1. 功能
  2. 2. 语法
  3. 3. 参数
  4. 4. 返回值
  5. 5. 示例
  6. 6. 备注

功能

  • 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" 代表找到的数量

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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微信 的元素.
    • 查找时要求填写的特征全都要找到才算符合条件, 包括填写空字符串 "", 也会要求找到对应空字符串
    • 两个特征值一样的也会查找, 例如你填写了 "微信", "微信", 那么查找的时候就会去找元素特征里存在两个 微信 的元素
  • 关于最终元素
    • 最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有 +- 的元素
  • 关于旋转横屏坐标处理
  • 需按键精灵V3.5.8以上版本支持本命令
  • V4.2113: 初次加入