有弹窗就关掉,没有就继续
它解决什么问题
广告弹窗、更新提示、评分请求、权限询问 —— 出现才处理,不出现别让任务卡住。
难点不是「点关闭」,是「不确定它来不来」。如果每次都硬等 5 秒,十次里九次在空等;如果不等,弹窗一出任务就点歪。
这条配方用「智能等待节点」的两条输出解决:等到就走处理分支,超时就走正常分支。
核心:智能等待节点有两个出口
参数 waitType 有四档:
| 值 | 等什么 |
|---|---|
text_contains |
屏幕上出现包含某段文字的控件 |
text_equals |
屏幕上出现文字完全一致的控件 |
element_visible |
某个元素可见 |
element_gone |
某个元素消失 |
关键在输出口:它有 exec_success 和 exec_failure 两条执行输出。
- 等到 → 走
exec_success - 超时 → 走
exec_failure
这就是「有就处理、没有就继续」的全部机制,不需要额外的判断节点。
分步做
1. 弹窗的特征文字要挑准
「关闭」「取消」「以后再说」「我知道了」 —— 选那个只在弹窗上出现的词。
别用「确定」:正常页面上的确定按钮太多了。也别用单个字「关」。
2. 加「智能等待节点」
| 参数 | 填什么 |
|---|---|
等待条件 waitType |
text_contains |
文字 text |
弹窗上的特征文字 |
超时 timeout |
3000 毫秒 |
超时值就是「最多愿意为这件事等多久」。设 3000 的意思是:3 秒内没等到就当它不存在,立刻往下走。
3. 两条分支各接什么
exec_success(等到了) → 「查找文本节点」定位那条文字 → 「点击节点」点关闭 → 「延迟节点」500 毫秒exec_failure(没等到) → 直接接到你原本要做的下一步
两条分支最终都要汇回主流程。汇合点就是原来的下一个动作。
4. 多个弹窗叠加怎么办
三种常见弹窗(广告 / 更新 / 评分)就串三个「智能等待节点」,一个接一个。
顺序按出现概率排:先等最常见的那个。每个超时都设短一点(2000 毫秒),三个加起来最多 6 秒,可接受。
但别串超过三个。每多一个就多一次截图识别,任务整体变慢,而且真正的失败会被拖到很久之后才暴露。
5. 需要「点完确认真的关了」再加一层
关闭按钮有时会点歪(弹窗动画中位置还在动)。点完之后再放一个「智能等待节点」,这次等 element_gone(弹窗文字消失),超时 2000 毫秒。
等不到就说明没关掉,可以重试一次或者记一条日志。
用到的节点
| 节点 | 干什么 |
|---|---|
| 智能等待节点 | 等到 / 超时两条出口,配方的核心 |
| 查找文本节点 | 定位弹窗按钮的坐标 |
| 点击节点 | 点关闭 |
| 延迟节点 | 等弹窗动画、等关闭完成 |
| 发送通知节点 | 可选:关不掉时通知你 |
容易踩的坑
- 超时不是「最多等这么久」,是「等不到也要往下走」。 设 30000 只会让任务卡半分钟,不会让弹窗更容易出现。
element_visible需要元素信息。 用text_contains更省事 —— 只要认字,不需要控件结构。- 两条分支忘了汇合。 只接了
exec_success,没接exec_failure,任务在没有弹窗时会停在那一步不动。 - 弹窗文字被 OCR 拆成两块。 「以后再说」被识别成「以后」和「再说」,
text_contains配「以后」比配整句更稳。