第 12 课 · 每日例程毕业设计
十六个节点。第 01–11 课的每个想法。这就是真实自动化的形态。
问题
构建你真会排上计划的例程:回到已知界面,检查能量是否值得动手,收集至多 N 个目标——目标耗尽时干净退出——统计收获、汇报,并且无论发生什么都诚实收场。
本课刻意采用与资深用户运行的大型农场式自动化相同的形态:一次参数化的行程,带恢复、资源闸门、有界循环加提前出口,以及按目标粒度的韧性。
你将学到
没有新东西——这正是重点。你将组合:Sub Flow 恢复(09/11)、OCR 闸门(05/06)、Flow Input 驱动的循环(07)、"没了就 Break"、可重试点击(08)、计数(07),以及点名原因的结局(每一课)。
流程
十六个节点放不进一张看得清的截图,所以毕业设计分三部分、全缩放呈现——准备、循环、收尾:

准备:① Start ② Reach a known screen —— 来自第 11 课的 Sub Flow,复用而非重建 ③ 读能量 ④ 读不出时的结局 ⑤ 够不够? ⑥ 不够时的结局。真正的活儿开始之前,每道守卫都有自己那个诚实的 Stop。

循环:① Loop ② 来自第 1 部分的低能量结局 ③ 找 Collect 图标 ④ 点它 ⑤ 没东西可收时 Break —— 循环的提前出口 ⑥ 数一数收了多少。

收尾:① 控节奏的 Wait ② Loop End ③ 记录总数 ④ Stop: routine complete —— 整套例程只有一个成功结局。
读形状,别读单个节点:主脊柱纵贯中央,错误结局垂在左侧,Break 绕行在右。陌生人几秒内就能沿出快乐路径——这种可读性是你亲手构建的特性,靠编号命名与 Auto Layout。
动手构建
声明:rounds(number?,默认 3,Input ✓ Required ✓)、done(number,默认 0)、energy(number?)。
| # | 节点 | 源自哪课 |
|---|---|---|
| 1 | Sub Flow → 第 09 课,Failure → recovery failed | 09、11 |
| 2 | Read Text,Energy 读数,Percentage → energy | 05、06 |
| 3 | If {{energy}} >= 20;False → low energy(success) | 05 |
| 4 | Loop,count 模式,max {{rounds}} | 07 |
| 5 | Find Image 找 Collect 图标,3000 ms,Failure → Break nothing left | 03、04 |
| 6 | Click,来源 = 节点 5,retry ×2 / 400 ms / ×1.5;Failure → 暂停(跳过计数) | 03、08 |
| 7 | Variable done + 1——只在成功路径上 | 07 |
| 8 | Wait 随机 800–1400 ms;→ Loop End(aggregation: iteration count) | 07 |
| 9 | Variable 打印 done → Stop: routine complete | 07 |
严格按图连线;两条微妙的边是节点 6 的 Failure → 节点 8(失败的点击跳过计数,不跳过循环),以及 Break → Loop End。Save,Auto Layout。
值得"偷走"的设计决策
- 能量不足是 success。 例程的职责包括知道何时无事可做。只有
recovery failed和unreadable是 failure——流程完全无法履职的状态。 - 闸门在循环之前,于是"疲惫"的行程只花两个节点,而不是 N 轮徒劳搜寻。
- Break ≠ failure。"没有目标了"提前结束循环,照样汇报、照样成功。对比它与节点 6 的 Failure——一个是世界状态,一个是操作故障,走的路不同。
done数成果;Loop End 数轮数。 一次有一击失败的行程之后:轮数 3,done2。两个数字各有所指;谁也替代不了谁。- 每个结局是一句话。 六个结局、六个原因,凌晨两点不用考古。
运行,然后排上计划
在纯净仪表盘上用 rounds = 3 运行:恢复(瞬间)、能量 85 ≥ 20、三轮找-点-数-歇,日志 done = 3,success。试试 dashboard.html?energy=15%——运行约 2 秒即以 success · Energy too low 结束,不做任何搜寻。
然后把它变成日常:加进实例的 Flow Queue(rounds 值随队列条目存储),并建一条 Scheduler 计划——演示环境正是带着这套设置发布的:


Scheduler 决定它何时跑;Queue 决定实例上跑什么。你的流程既不知道也不关心——参数化、诚实收场的流程能装进任何调用方:Run 表单、父流程、队列、计划。
常见错误
| 错误 | 后果 | 修复 |
|---|---|---|
| 两种点击结局都计数 | done 夸大现实 | 只数成功路径 |
| 把 Break 连成失败结局 | "没了"杀死一次本该圆满的行程 | Break → Loop End → 汇报 |
| 闸门放进循环里 | 每次行程读 N 遍能量 | 循环前读一次 |
rounds 不设必填 | 带着空数字启动 | Required ✓ |
| 把结局并成两个 | 靠翻日志考古诊断 | 一个原因一个结局 |
故障排查
立即以 success · 0 collected 结束。
第一轮就没找到 Collect 图标——Break 触发了。前台是错误屏幕,或模板需要重截。
rounds 大时运行死于节点执行数错误。
循环放大节点数;流程的 maxNodeExecutions(此处 5000)是天花板。真正的长行程去 flow settings 提高它。
计划运行之间重复收集。 那是第 10 课的活——在循环前加冷却守卫(读周期计时 → Memory Match → remember)。演示环境的 Farm Resources 模式正是这么做的。
你现在的位置
你已会操作、验证、读取、决策、循环、重试、恢复、记忆、组合与排程。工具箱到此完整——此后的一切只是词汇,而你知道词典在哪:
- 节点参考——每个节点的每项设置。
- 核心概念——运行时为何如此行事。
- Scheduler 与 Flow Queue——成建制地运行这样的流程。
更进一步: 给毕业设计加上第 10 课的守卫;把暂停区间变成 Flow Input;把循环体拆成独立子流程,看毕业设计缩成八个易读节点。每件事是一个晚上;每件事正是真实农场自动化生长的方式。
祝贺——接下来去构建属于你自己的东西吧。🎓