zm.ElementFindS 超级查找元素(专业版)

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

功能

  • zm.ElementFind 超级查找元素的区别是支持抓抓上所有特征串, 但仅支持键值对形式的对象参数, 并且对每个键名与键值做了详细规定, 详见代码例子
  • 支持index范围查找, 一些特征不明显的直接用index元素秒杀
  • 支持抓抓上的所有特征串, 详细写法见参数说明与代码例子
  • 同一个键名允许填写多个键值, 多个之间为或关系, 详见代码例子
  • 大量键名支持简写方式, 详见代码例子
  • 除了返回抓抓上显示的元素特征信息外, 还有中心坐标, index等数据
  • 支持指定范围查找, 再也不用担心找到范围外的元素节点了, 甚至直接获取指定范围内的节点
  • 支持指定坐标查找, 直接获取该坐标点的元素节点, 不用再考虑特征串之类的了
  • 除了支持普通的完整匹配外, 还支持正则匹配模式, 让元素特征串更加灵活
  • 默认仅获取最终子节点, 避免干扰, 但你也可以改为获取任意一个符合条件的节点
  • 担心查找的时候节点还没出现? 限时循环查找完美解决这个问题

语法

结果 = zm.ElementFindS(元素对象[, …][, 超时时间])

参数

参数 数据类型 解释
元素对象 要查找的元素特征表, 支持多个元素对象参数, 每个对象之间为或关系, 格式为{"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},"xy":{0,0},"size":{0,0},"ischild":true,"matchmode":0,"timeout":0}, 每个成员均是可选的, 具体定义详见代码例子
超时时间 数值型 可选, 最大查找时间, 如果每个对象内都有超时时间的话, 将仅使用最大的时间做判断

返回值

, 找到返回元素特征表, 没找到返回 null, 元素特征表格式为 {"x":0,"y":0,"id":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" 代表多个对象情况下找到的那个序号

示例

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Import "zm.luae" //导入插件,只需执行一次
zm.Init //初始化插件,只需执行一次

//本命令与zm.ElementFind()相似, 但是区别在于更加专业严谨
//元素特征表除了抓抓上的键值对外, 还增加了一些缩写与新键值对参数
//填写相关元素特征则查找, 若不填写则忽略

//----------index与id----------//
//"index":10, 表示抓抓上的index值为10
//"index":{10,20}, 表示抓抓上index值为10或者20, 支持任意数量个
//"index":{ {20, 30} }, 表示抓抓上index的范围在20到30之间, 包括20和30
//"index":{ {20, 30}, {40, 80} }, 表示抓抓上index的范围在20到30或者40到80之间, 支持任意数量个
//index的缩写是id, 即 "id":10 与 "index":10 是相同的意思.

//----------text与txt, resource-id与res, class与cls, package与pkg, content-desc与des----------//
//"text":"紫猫学院", 表示抓抓上的text值为紫猫学院
//"text":{"紫猫学院", "zimaoxy.com"}, 表示抓抓上的text值为 紫猫学院 或者 zimaoxy.com, 支持任意数量个
//text的缩写是txt, 即 txt:"紫猫" 与 text:"紫猫" 是相同意思
//resource-id, class, package, content-desc均与text类似, 都分别代表抓抓上的键值对
//res, cls, pkg, des分别对应以上键名的缩写

//----------布尔型元素----------//
//所有抓抓上的布尔型元素均暂无缩写, 保持与抓抓一致即可

//----------坐标特征----------//
//所有范围默认5个像素坐标的误差
//"bounds":{100,200,300,400}, 表示查找范围左上角100,200,右下角300,400以内的元素, 受范围误差影响
//"bounds":{ {10,20,30,40}, {50,60,70,80} }, 表示查找 范围10,20,30,40 或者 范围50,60,70,80 内的元素, 受范围误差影响
//"size":{100,200}, 表示查找长度100, 宽度200形状的元素, 受范围误差影响
//"size":{ {10,20}, {40,60} }, 表示查找 长度10,宽度20 或 长度40,宽度60 形状的元素, 受范围误差影响
//"xy":{10, 20}, 表示查找坐标点10, 20位置的元素, 受范围误差影响
//"xy":{ {10, 20}, {33, 55} }, 表示查找坐标点 10,20 或者 33,55 位置的元素, 受范围误差影响

//----------自定义参数----------//
//"ischild":true, 默认true, 表示只查最终元素, 改为false将查所有元素
//"timeout":0, 默认0, 表示查找超时时间
//"matchmode":-1, 默认-1, 表示查找模式, -1为完整匹配, -2为正常匹配
//"offsetlen":5, 默认5, 表示范围相关参数默认误差5个像素坐标


//下面是表示限时5秒内查找index范围在10到40之间, text值为按键精灵或按键精灵高级版的元素
//适当使用index可以提高查找效率与准确率, 但请注意, 不同设备或者不同界面内容的情况下, index值可能会变化
Dim 按键对象 = {"id":{ {10,40} }, "text":{"按键精灵", "按键精灵高级版"} }
Dim 按键元素 = zm.ElementFindS(按键对象, 5000)
If 按键元素 Then
TracePrint "找到按键的坐标为:", 按键元素["x"], ",", 按键元素["y"], ", text值是", 按键元素["text"]
Else
TracePrint "没找到按键"
End If

备注

  • 关于对象参数
    • 多个对象为 OR 关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回
    • 当存在多个超时时间时, 仅最大的时间会生效, 限时内会不断查找每一个对象
  • 关于元素特征串
    • 对象中元素特征串必须与元素名一一对应, 若不填写则忽略该元素
  • 关于最终元素
    • 最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有 +- 的元素
  • 关于Index
    • 不同画面或不同设备的Index均可能会出现变化, 故使用前请务必详细测试
  • 关于旋转横屏坐标处理
  • 需按键精灵V3.5.8以上版本支持本命令
  • V4.2113: 初次加入