zm.ElementFindTap 超级查找元素点击
🎯功能
与zm.ElementFind 超级查找元素相比, 仅多了一个找到后立即点击的功能, 其它都相同, 点击会受zm.SetTap 设置超级点击设置影响.
根据条件查找元素节点并点击, 返回元素节点表信息与中心坐标等数据. 比 Element.Find()
更加强大, 具体特色如下
- 找到后内部会调用zm.SetTap 设置超级点击点击找到的坐标
- 除了返回抓抓上显示的元素特征信息外, 还有中心坐标, index等数据
- 支持指定范围查找, 再也不用担心找到范围外的元素节点了, 甚至直接获取指定范围内的节点
- 支持指定坐标查找, 直接获取该坐标点的元素节点, 不用再考虑特征串之类的了
- 支 持抓抓上的五大元素特征串, 分别是
text
,resource-id
,class
,package
,content-desc
, 这5个元素特征串可自由填写任意数量, 且没有顺序要求, 每个特征串之间为And
关系 - 除了支持普通的完整匹配外, 还支持正则匹配模式, 让元素特征串更加灵活
- 默认仅获取最终子节点, 避免干扰, 但你也可以改为获取任意一个符合条件的节点
- 担心查找的时候节点还没出现? 限时循环查找完美解决这个问题
- 大量可选参数, 减少不必要的代码量
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表, 方便优化代码结构
📜语法
结果 = zm.ElementFindTap([对象, ...][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
, 元素特征表格式为 {"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()类似, 仅多了一个找到后立即点击功能, 故详细例子请去查看zm.ElementFind()命令
//下面演示打开京东搜索电脑, 获取第一件商品价格的例子
RunApp "com.jingdong.app.mall"
If zm.ElementFindTap("^搜索框.*", "com.jingdong.app.mall", "android.widget.TextView", -2, 5000) Then
TracePrint "找到搜索框, 并已点击"
Else
TracePrint "没找到搜索框"
End If
Delay 1000
InputText "电脑"
Delay 1000
If zm.ElementFindTap("搜索", "android.widget.TextView", "com.jingdong.app.mall") Then
TracePrint "找到搜索按钮, 并已点击"
Else
TracePrint "没找到搜索按钮"
End If
Dim 价格对象 = {"%d+", "%d+元", "android.widget.TextView","com.jingdong.app.mall", -2, 10000}
Dim 价格元素 = zm.ElementFind(价格对象)
If 价格元素 Then
TracePrint "找到第一件商品的价格为:", 价格元素["text"]
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.2111: 初次加入