在编写小程序游戏自动化脚本时,弹窗广告是绕不开的障碍。这些广告弹窗样式差异很大------有大有小,关闭按钮有黑色半透明的也有白色半透明的,但共同点是都会遮挡操作区域,导致脚本无法正常执行后续步骤。
人工操作时,点击右上角的关闭按钮(X)即可,但脚本需要自动完成这一动作,首先得解决一个问题:如何让脚本自动找到关闭按钮的坐标位置?
技术思路
1、寻找弹窗按钮的共性
虽然广告弹窗样式各异,但关闭按钮存在两个可以量化的共性:
-
形状共性:关闭按钮都是圆形,意味着其所在区域的宽度和高度相等;
-
尺寸共性:不同弹窗的关闭按钮大小接近,宽度和高度都在一个大致范围内。
2、利用节点属性进行筛选
使用节点查看工具分析广告弹窗的UI结构,会发现这些关闭按钮节点通常没有id、text、desc等属性值,直接通过属性定位比较困难。
但关闭按钮的class属性是ImageView,即图片类型。这样就有了明确的筛选路径:
-
先查找页面中所有
android.widget.ImageView类型的节点; -
再根据宽高相等、尺寸范围两个条件进行过滤,锁定关闭按钮。
脚本示例:
Import "zm.luae"
zm.Init
dim nodes = zm.ElementFindEx("android.widget.ImageView")
If nodes Then
TracePrint "一共找到了", nodes["counts"], "个元素"
For i = 1 To nodes["counts"]
TracePrint "节点的宽度和高度",nodes[i]["bounds"][3]-nodes[i]["bounds"][1],nodes[i]["bounds"][4]-nodes[i]["bounds"][2]
If nodes[i]["bounds"][3] - nodes[i]["bounds"][1] = nodes[i]["bounds"][4] - nodes[i]["bounds"][2] and 60<nodes[i]["bounds"][3]-nodes[i]["bounds"][1]<70 Then
TracePrint "第"&i&"个节点宽度和高度相同"
End If
Next
Else
TracePrint "没有找到元素"
End If
代码逻辑说明
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | zm.ElementFindEx |
查找所有ImageView节点 |
| 2 | 遍历节点列表 | 逐个计算宽高 |
| 3 | 条件判断 | 宽=高,且尺寸在60-120px范围内 |
| 4 | zm.Click |
点击匹配节点的中心位置 |
⚠️ 注意 :尺寸范围
60-120需要根据实际设备分辨率做调整,建议先用TracePrint输出所有候选节点的宽高,观察后再设定阈值。
关键要点
节点数量控制 :如果页面中ImageView节点过多,可以进一步缩小尺寸范围,或结合bounds坐标位置(如右上角区域)进行二次筛选。
兼容性处理:部分弹窗可能使用自定义View而非标准ImageView,此时需要扩展搜索的class类型。建议先通过节点查看工具确认目标按钮的实际类型。
循环退出 :找到第一个匹配节点后立即Exit For,避免重复点击。
这个方案的核心思路是放弃依赖id/text等唯一标识,转而利用按钮的几何共性(宽高相等 + 尺寸范围)进行筛选。对于自动化脚本中大量"找不到唯一标识"的场景,这种基于属性组合的筛选策略具有很好的可迁移性。
如果页面中关闭按钮的尺寸范围不好确定,可以先用TracePrint输出所有ImageView节点的宽高数据,观察分布后再设定过滤区间。
作为一款集"视觉AI+自动化+RPA"于一体的移动端超级助手,按键精灵正在重新定义自动化开发。它打通了从零基础到专业开发的全链路:小白可通过可视化编辑器与内置免费OCR引擎,结合无障碍服务快速实现APP签到、识图找字等自动化流程;极客与开发者则能利用Lua脚本、ADB调试及跨平台测试进行深度定制,并借助脚本加密与APK独立打包功能保障代码安全。其核心竞争力在于强大的AI视觉内核------融合OCRex、YOLOv5目标检测与OpenCV图像处理,在复杂动态场景下实现毫秒级精准识图找字。无论是电商运营、批量营销、移动端RPA数据采集,还是高难度的手游多开挂机与自动化测试,按键精灵都能提供企业级的稳定支持。