跳到主要内容

第 07 课 · 用变量计数

做 N 次——N 在运行时选定,而不是焊死在流程里。

问题

Collect 三次。明天,五次。流程不该变——只有数字变。

本课引入所有重复型自动化赖以站立的机器:一个 Loop(循环)、一个计数变量,和一个由操作者启动时填写的 Flow Input

你将学到

  • Loop / Loop End 区域:循环体重复执行,路由自动生成。
  • Variable(变量)节点计数(collected = collected + 1)。
  • 声明 Flow Input——用 {{target_count}} 作循环次数。
  • 随机节奏,让重复不像机器。
  • 把一个值写进运行日志。

开始之前

流程

这个流程比一张舒服的截图更高,所以这里用全缩放分成两半来看。徽标按阅读顺序给节点编号,与下面的动手构建步骤一一对应。

第 07 课上半:进入循环

进入循环:① Start ② 重复 {{target_count}} 次的 Loop ③ Click ④ 加 1 的 Variable ⑤ 让节奏像人的 Wait。

第 07 课下半:离开循环

离开循环:① 计数器自增节点与 ② Wait 再次出现(为了接上上下文),然后 ③ Loop End —— 编辑器替你创建的节点 —— ④ 记录总数的 Variable,以及 ⑤ 成功结局。

动手构建

  1. 新建流程。声明两个变量:
    • collectednumber,默认 0
    • target_countnumber?,默认 3Input ✓Required ✓,描述 How many times to collect this run
  2. 添加 Loop,命名 1. Repeat {{target_count}} times:模式 CountMax iterations {{target_count}}——没错,这里可以用变量引用。配对的 Loop End 自动出现。
  3. 循环体按序:Click 点 Collect 按钮 → Variable 3. Add 1 to the counter,一行 Add to itcollected + 1Waitrandom 模式,800–1300 ms,理由 pace between taps
  4. Loop End 上设 Aggregation: iteration count——循环会汇报实际跑了几轮。
  5. Loop End 之后:一个 Variable 节点,一行 Show in run log 打印 collected,然后 Stop: success · Collection loop finished
  6. 按图连线——注意没有任何回边要画:Loop/Loop End 区域自动生成重复路由。
  7. Save,Auto Layout。

每一块的用意

部件角色
Loop(count 模式)每轮开始前决定循环体是否再跑
{{target_count}} 当次数重复次数按次到达,由操作者提供
Variable +1流程对自身进度的记忆
随机 Wait每轮重掷 800–1300 ms——重复不再像节拍器
Loop End 聚合实际跑了几轮的独立证据
日志行collected 放进你看得到的运行日志

Flow Input 把流程变成函数。 因为 target_count 声明为 input,Run 表单每次运行前都会询问(默认 3 预填)。同一个已保存流程可以跑 3、5 或 20 次——不用编辑。在第 11 课里,父流程将以编程方式把这个值传进来。

循环自己会数,为何还用 Variable 计数? 两个理由。计数变量活过循环——汇报节点在 Loop End 之后读它。而且它数的是你选择的东西:毕业设计里,计数器只在成功收集时递增,而轮数无论如何都在走。轮数和成果是两个不同的数字。

循环会放大其中的一切

这里每轮花一次点击加约 1 秒节奏。target_count = 20 时约 20 秒——没问题。但同样的乘法作用于你放进循环体的每个慢节点。要有意识地为循环做预算,并记住循环内执行的节点数也计入流程的 maxNodeExecutions 上限。

运行

运行流程——Run 表单询问 target_count。接受 3。预期:三次点击、间隔约一秒,日志显示 collected = 3,以 success · Collection loop finished 结束。

再用 5 跑一次。五次点击。同一个流程。

最佳实践

  • 凡是人可能想换数字的地方,把循环次数绑到 Flow Input
  • 循环里用随机节奏——固定延时既比需要的慢,又一眼看出是机器人。
  • 在自然边界重置计数器。 collected 每次运行从默认 0 开始;若流程按行程循环,就在行程边界重置,而不是每圈循环顶部。
  • 把你在乎的总数写日志。 一条 collected = 5 回答了明天那句"它昨天真的跑了吗?"。
  • 必要的决定用必填输入。 Required ✓ 阻止带着空次数启动。

常见错误

错误后果修复
赋值而不是累加(collected = 1计数器永远是 1Add to it / collected + 1
计数器没有默认值null + 1 让赋值行失败默认 0
往 Loop 画回边这里的循环不是那样工作的区域自动生成路由
Wait 放在循环体外总共只歇一次,而不是每轮放在 Click 与 Loop End 之间
没勾 input ✓ 却期望弹窗询问静默使用默认值在声明上勾 Input

故障排查

循环只跑一轮。 Max iterations 没解析出来——检查引用就是 {{target_count}},且变量已声明。

collected 日志是 0。 计数节点在循环体外,或它那行是赋值不是累加

运行没有询问次数。 声明缺 Input ✓,或你从带存值的上下文启动(队列条目——后续课程)。

小结

  • Loop/Loop End 重复一个循环体;路由自动生成,次数可以是 {{变量}}
  • Flow Input 让一个已保存流程服务多种运行。
  • 用自己的变量数成果;让循环数轮数。

下一课

至今一切都假设点击落地、读取成功。第 08 课 · 重试还是分支讲它们失灵的那天——以及如何选择正确的失败工具,而不是条件反射的那个。

另见:Loop · Variable · Wait · 变量与记忆