zm.ElementFindS 超级查找元素(专业版)
🎯功能
- 与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"
代表多个对象情况下找到的那个序号
💡示例
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均可能会出现变化, 故使用前请务必详细测试
- 关于旋转横屏坐标处理
- 如果遇到打开某个应用后, 屏幕方向被旋转了, 导致获取元素中心坐标异常时, 请使用 zm.ElementRotation 设置元素旋转方向 解决
- 需按键精灵V3.5.8以上版本支持本命令
- V4.2113: 初次加入