03循环功能
循环功能使用教程
概述
循环功能是脚本自动化的核心控制结构,允许重复执行一段动作序列。系统支持固定次数循环、随机次数循环、嵌套循环等多种模式,并提供了强大的循环状态管理和跳转控制机制。
支持的循环特性
- 固定次数循环: 执行指定次数的重复操作
- 随机次数循环: 在范围内随机选择执行次数
- 嵌套循环: 支持多层循环嵌套,最大层级限制
- 循环栈管理: 独立的循环状态栈,支持复杂的嵌套控制
- 跳转控制: 循环过程中支持条件跳转和流程控制
- 动作组循环: 动作组内部独立的循环系统
核心概念
循环结构 vs 线性执行
| 特性 | 线性执行 | 循环执行 |
|---|---|---|
| 执行流程 | 顺序执行,每个动作仅执行一次 | 重复执行循环体内的动作序列 |
| 控制复杂度 | 简单 | 需要理解循环边界和状态管理 |
| 应用场景 | 简单的单次操作流程 | 重复性操作、数据处理、游戏自动化 |
| 资源消耗 | 低 | 根据循环次数成比例增加 |
| 调试难度 | 低 | 需要跟踪循环状态和迭代过程 |
循环的工作原理
- 初始化阶段: 遇到
循环开始时创建循环状态 - 执行阶段: 依次执行循环体内的动作
- 检查阶段: 遇到
循环结束时检查是否继续循环 - 跳转阶段: 根据循环状态决定跳转到循环开始或继续后续动作
- 清理阶段: 循环完成后清理循环状态
循环层级系统
脚本级循环 (主循环)
- 作用域: 在主脚本中的循环控制
- 标识: 使用
L1,L2,L3等表示嵌套层级 - 管理器:
ScriptConfig中的循环栈管理 - 优先级: 最高优先级,控制整个脚本的执行流程
动作组级循环 (子循环)
- 作用域: 在动作组内部的循环控制
- 标识: 动作组名称前缀 + 循环层级
- 管理器:
ActionGroupExecutionState中的独立循环栈 - 优先级: 在动作组执行上下文中有效,不影响主脚本循环
层级关系图
脚本执行
├── 脚本循环 L1 [开始]
│ ├── 动作1: 点击
│ ├── 动作2: 调用动作组A
│ │ └── 动作组A内部循环 [开始]
│ │ ├── 动作A1: 文字识别检测
│ │ ├── 动作A2: 等待
│ │ └── [动作组循环结束,返回主脚本]
│ ├── 动作3: 等待
│ └── 脚本循环 L1 [检查/跳转]
└── [脚本执行完成]
基础循环配置
循环开始 (循环开始)
1. 基本设置
在动作配置界面选择 循环开始 类型:
- 系统将显示循环配置界面
- 必须与相应的 循环结束 配对使用
2. 循环模式选择
固定次数循环:
循环模式: 固定次数
循环次数: 5
说明: 精确执行5次循环
随机次数循环:
循环模式: 随机次数
最小次数: 3
最大次数: 8
说明: 随机执行3-8次循环
3. 配置示例
示例1: 固定次数循环
动作类型: 循环开始
循环配置:
模式: 固定次数
循环次数: 10
说明: "重复数据录入操作10次"
示例2: 随机次数循环
动作类型: 循环开始
循环配置:
模式: 随机次数
最小次数: 5
最大次数: 12
说明: "模拟用户随机浏览行为"
智能上下文: "浏览操作_用户行为模拟"
循环结束 (循环结束)
基本配置
动作类型: 循环结束
说明: "结束当前循环层级"
循环结束动作会:
1. 检查当前循环是否达到设定次数
2. 如果未完成,跳转回对应的 循环开始 位置
3. 如果已完成,继续执行后续动作
4. 自动管理循环状态和嵌套层级
循环配置验证
系统提供循环结构验证功能:
常见验证错误:
- 循环开始没有对应的循环结束
- 循环结束没有对应的循环开始
- 嵌套循环结构不匹配
- 循环边界跨分组设置不当
嵌套循环详解
嵌套循环概念
嵌套循环允许在一个循环内部包含另一个循环,创建复杂的重复逻辑结构。
嵌套层级管理
层级标识: - L1: 第一层循环(最外层) - L2: 第二层循环(嵌套在L1内) - L3: 第三层循环(嵌套在L2内) - …: 支持更深层级嵌套
循环栈状态:
当前循环栈状态: L1(2/5)->L2(1/3)->L3(3/4)
解释:
- L1循环:第2次/共5次
- L2循环:第1次/共3次
- L3循环:第3次/共4次
嵌套循环配置示例
示例1: 双层循环数据处理
业务场景: 处理多个表格,每个表格有多行数据
# 外层循环:处理表格
动作1: 循环开始
模式: 固定次数
循环次数: 3
说明: "处理3个表格"
动作2: 文字识别_点击
检测目标: ["表格1", "表格2", "表格3"]
说明: "点击下一个表格"
# 内层循环:处理表格行
动作3: 循环开始
模式: 随机次数
最小次数: 5
最大次数: 10
说明: "处理表格中的数据行"
动作4: 文字识别_点击
检测目标: ["下一行", "编辑"]
说明: "选择数据行"
动作5: 等待
等待时间: 1秒
说明: "等待数据加载"
动作6: 循环结束
说明: "结束行处理循环"
动作7: 循环结束
说明: "结束表格处理循环"
执行流程: 1. 开始外层循环 L1 (表格处理) 2. 点击第一个表格 3. 开始内层循环 L2 (行处理) 4. 重复处理表格行 (5-10次) 5. 结束内层循环 L2 6. 外层循环 L1 继续下一次 (处理下一个表格) 7. 重复步骤 2-6,直到处理完3个表格
示例2: 三层循环游戏自动化
业务场景: 游戏中的多关卡、多波次、多目标处理
# 第一层:关卡循环
动作1: 循环开始
模式: 固定次数
循环次数: 5
说明: "挑战5个关卡"
# 第二层:波次循环
动作2: 循环开始
模式: 随机次数
最小次数: 3
最大次数: 6
说明: "每关卡3-6波敌人"
# 第三层:目标循环
动作3: 循环开始
模式: 固定次数
循环次数: 4
说明: "每波4个目标"
动作4: 图像识别_点击
模板图片: ["敌人1.png", "敌人2.png"]
说明: "攻击敌人"
动作5: 等待
等待时间: 0.5秒
动作6: 循环结束
说明: "结束目标循环"
动作7: 等待
等待时间: 2秒
说明: "波次间隔等待"
动作8: 循环结束
说明: "结束波次循环"
动作9: 文字识别_点击
检测目标: ["下一关", "继续"]
说明: "进入下一关卡"
动作10: 循环结束
说明: "结束关卡循环"
嵌套循环的执行机制
循环栈管理
入栈过程:
1. 遇到 循环开始 时,创建新的循环状态
2. 将循环状态压入循环栈
3. 设置循环层级和边界信息
出栈过程:
1. 遇到 循环结束 时,检查栈顶循环状态
2. 如果需要继续循环,更新迭代次数并跳转
3. 如果循环完成,将循环状态从栈中移除
状态追踪:
执行动作3时的循环栈状态:
┌─────────────────────────────────┐
│ L3(当前迭代: 1, 总次数: 4) │ ← 栈顶(最内层)
├─────────────────────────────────┤
│ L2(当前迭代: 2, 总次数: 5) │ ← 中间层
├─────────────────────────────────┤
│ L1(当前迭代: 1, 总次数: 3) │ ← 栈底(最外层)
└─────────────────────────────────┘
循环边界检测
系统自动检测循环边界,确保正确的嵌套关系:
正确的嵌套:
循环开始 (L1) # 动作1
循环开始 (L2) # 动作3
动作序列
循环结束 (L2) # 动作7
循环结束 (L1) # 动作9
错误的交叉:
循环开始 (L1) # 动作1
循环开始 (L2) # 动作3
循环结束 (L1) # 动作7 ❌ 错误:应该先结束L2
循环结束 (L2) # 动作9 ❌ 错误:L1已结束
循环中的跳转机制
跳转类型概述
循环执行过程中支持多种跳转操作,但需要注意对循环状态的影响。
支持的跳转类型
- 跳转到动作号: 直接跳转到指定的动作编号
- 跳转到分组: 跳转到指定分组的第一个动作
- 调用动作组: 暂时跳转到动作组执行
- 条件流程控制: 基于条件的动态跳转
循环内跳转的影响
1. 跳转到循环外部
场景: 从循环内部跳转到循环结构外的动作
动作1: 循环开始
循环次数: 5
动作2: 文字识别_检测
检测目标: ["错误", "异常"]
检测失败后操作: 跳转到动作 6 # 跳出循环
动作3: 点击
坐标: (100, 200)
动作4: 循环结束
动作5: 正常流程继续...
动作6: 错误处理流程... # 跳转目标
影响分析: - ✅ 循环状态保持: 循环栈状态保留,可能影响后续流程 - ⚠️ 注意事项: 跳出循环但循环状态未清理,可能导致问题 - 🔧 建议: 在跳转目标位置考虑循环状态清理
2. 跳转到循环内部
场景: 从循环外部或其他位置跳转到循环内部
动作1: 文字识别_检测
检测目标: ["开始处理"]
检测成功后操作: 跳转到动作 4 # 跳入循环
动作2: 循环开始
循环次数: 3
动作3: 初始化动作...
动作4: 主要处理动作... # 跳转目标
动作5: 循环结束
影响分析: - ❌ 循环状态缺失: 跳转进入时缺少循环初始化状态 - ❌ 边界混乱: 可能导致循环结束时找不到对应的开始 - 🚫 不建议: 避免从循环外部跳转到循环内部
3. 循环间跳转
场景: 从一个循环跳转到另一个循环
# 第一个循环
动作1: 循环开始
循环次数: 3
动作2: 文字识别_检测
检测目标: ["切换模式"]
检测成功后操作: 跳转到动作 6 # 跳到第二个循环
动作3: 循环结束
动作4: 其他动作...
# 第二个循环
动作5: 循环开始
循环次数: 5
动作6: 第二循环的处理... # 跳转目标
动作7: 循环结束
影响分析: - ⚠️ 状态混乱: 第一个循环状态未正确清理 - ⚠️ 嵌套问题: 可能造成循环栈状态异常 - 🔧 解决方案: 使用条件流程控制或动作组调用
最佳跳转实践
1. 安全的循环控制跳转
推荐方式: 使用条件流程控制
动作1: 循环开始
循环次数: 10
动作2: 条件控制
条件类型: IF_THEN
检测配置:
检测类型: 文字识别文字检测
检测目标: ["完成", "结束"]
满足条件时操作: 跳转到分组 "结束处理"
动作3: 正常循环体...
动作4: 循环结束
# 结束处理分组
动作5: [分组: 结束处理] 清理操作...
2. 循环异常处理
异常跳转处理:
动作1: 循环开始
循环次数: 5
动作2: 文字识别_检测
检测目标: ["目标元素"]
重试次数: 3
重试失败后操作: 跳转到分组 "循环异常处理"
动作3: 正常处理...
动作4: 循环结束
# 异常处理分组
动作5: [分组: 循环异常处理]
动作6: 强制清理循环状态
动作7: 跳转到分组 "错误恢复"
3. 嵌套循环的安全跳转
场景: 从内层循环安全跳出到外层
动作1: 循环开始 # 外层循环
循环次数: 3
动作2: 循环开始 # 内层循环
循环次数: 5
动作3: 文字识别_检测
检测目标: ["跳出内层"]
检测成功后操作: 跳转到动作 6 # 跳到内层循环结束
动作4: 内层正常处理...
动作5: 循环结束 # 内层循环结束
动作6: 外层循环继续... # 跳转目标
动作7: 循环结束 # 外层循环结束
跳转调试技巧
1. 循环状态监控
在日志中观察循环栈状态:
[脚本名] 动作#3 当前循环栈: L1(2/5)->L2(1/3)
[脚本名] 动作#5 跳转执行: 从动作5跳转到动作8
[脚本名] 动作#8 循环栈检查: L1(2/5)->L2(1/3) (状态保持)
2. 跳转路径追踪
记录跳转路径便于调试:
[脚本名] 跳转路径: 动作2 → 动作7 → 动作3 → 动作8
[脚本名] 循环状态变化:
- 跳转前: L1(1/3)
- 跳转后: L1(1/3) (保持)
动作组循环详解
动作组循环的独立性
动作组内部拥有完全独立的循环系统,与主脚本循环互不干扰。
独立循环栈
主脚本循环栈:
ScriptConfig.loopStack: [L1(2/5), L2(1/3)]
动作组循环栈:
ActionGroupExecutionState.loopStack: [AG-L1(1/4), AG-L2(3/7)]
执行上下文隔离
脚本执行
├── 脚本循环 L1 [2/5次]
│ ├── 动作1: 点击
│ ├── 动作2: 调用动作组A
│ │ └── 动作组A执行上下文
│ │ ├── 动作组循环 AG-L1 [1/4次]
│ │ │ ├── 动作A1: 文字识别检测
│ │ │ ├── 动作A2: 嵌套调用动作组B
│ │ │ │ └── 动作组B执行上下文
│ │ │ │ ├── 动作组循环 AG-L1 [3/6次]
│ │ │ │ └── (独立的循环系统)
│ │ │ └── 动作A3: 等待
│ │ └── 动作组循环 AG-L1 [结束]
│ └── 脚本循环 L1 [继续下一次]
动作组循环配置
基本配置方式
动作组内的循环配置与主脚本相同:
# 动作组内的循环
动作组: "数据处理流程"
动作序列:
动作1: 循环开始
模式: 随机次数
最小次数: 2
最大次数: 5
说明: "动作组内的随机循环"
动作2: 文字识别_点击
检测目标: ["处理", "下一条"]
动作3: 等待
等待时间: 1秒
动作4: 循环结束
说明: "结束动作组内循环"
动作组嵌套调用中的循环
场景: 动作组A调用动作组B,两者都包含循环
# 主脚本
动作1: 循环开始
循环次数: 3
说明: "主脚本循环"
动作2: ACTION_GROUP_CALL
动作组: "流程A"
动作3: 循环结束
# 动作组A
动作组A:
动作A1: 循环开始
循环次数: 2
说明: "动作组A的循环"
动作A2: ACTION_GROUP_CALL
动作组: "流程B"
动作A3: 循环结束
# 动作组B
动作组B:
动作B1: 循环开始
循环次数: 4
说明: "动作组B的循环"
动作B2: 点击
坐标: (100, 200)
动作B3: 循环结束
执行分析: - 主脚本循环3次 - 每次主脚本循环中,动作组A循环2次 - 每次动作组A循环中,动作组B循环4次 - 总点击次数: 3 × 2 × 4 = 24次
循环优先级和冲突处理
优先级层次
- 最高优先级: 当前执行上下文的循环
- 中等优先级: 父级上下文的循环
- 最低优先级: 全局脚本循环
冲突场景处理
场景1: 动作组内跳转到主脚本
# 主脚本循环
动作1: 循环开始 (主脚本 L1)
动作2: ACTION_GROUP_CALL
动作组: "处理流程"
动作3: 循环结束 (主脚本 L1)
# 动作组内部
动作组 "处理流程":
动作A1: 循环开始 (动作组 AG-L1)
动作A2: 文字识别_检测
检测失败后操作: 跳转到主脚本动作 4 # 跨上下文跳转
动作A3: 循环结束 (动作组 AG-L1)
# 主脚本继续
动作4: 错误处理...
处理机制: - ❌ 上下文冲突: 动作组循环状态与主脚本状态不匹配 - 🔧 系统处理: 自动清理动作组循环状态 - ⚠️ 副作用: 可能导致主脚本循环状态异常
建议解决方案:
# 改进方案:使用动作组内部跳转
动作组 "处理流程":
动作A1: 循环开始 (动作组 AG-L1)
动作A2: 文字识别_检测
检测失败后操作: 跳转到分组 "动作组错误处理"
动作A3: 循环结束 (动作组 AG-L1)
动作A4: [分组: 动作组错误处理] 内部错误处理
动作A5: 返回主脚本时设置错误标志
随机循环详解
随机循环的应用场景
随机循环模拟真实用户行为,避免固定模式被检测,增强自动化脚本的自然性。
典型应用场景
- 用户行为模拟: 随机浏览次数、随机停留时间
- 游戏自动化: 随机刷图次数、随机技能释放
- 数据采集: 随机采集样本数量
- 压力测试: 随机负载生成
随机算法机制
智能上下文随机
系统使用智能上下文系统生成随机数,确保: - 一致性: 相同上下文产生相似的随机结果 - 多样性: 不同上下文产生不同的随机结果 - 可预测性: 便于调试和问题复现
上下文信息构成
随机上下文信息:
├── 基础信息: "循环次数_脚本名称_动作编号"
├── 时间因子: 当前时间的影响
├── 执行环境: 设备状态、网络状态等
└── 用户设定: 自定义的上下文标识
示例:
上下文: "循环次数_数据采集脚本_动作3"
生成范围: 5-10次
可能结果: 7次 (基于上下文算法)
随机循环配置详解
基本随机配置
动作类型: 循环开始
循环模式: 随机次数
随机配置:
最小次数: 3
最大次数: 8
上下文标识: "用户浏览行为"
说明: "模拟用户随机浏览3-8次"
高级随机配置
场景相关的随机设置:
# 游戏刷图随机
动作类型: 循环开始
循环模式: 随机次数
随机配置:
最小次数: 5
最大次数: 15
上下文标识: "游戏刷图_体力消耗"
说明: "根据体力随机刷图5-15次"
# 数据采集随机
动作类型: 循环开始
循环模式: 随机次数
随机配置:
最小次数: 10
最大次数: 50
上下文标识: "数据采集_样本数量"
说明: "随机采集10-50个数据样本"
嵌套随机循环
复杂随机场景:
# 外层随机:随机处理几个页面
动作1: 循环开始
循环模式: 随机次数
最小次数: 2
最大次数: 5
上下文标识: "页面处理数量"
# 内层随机:每个页面随机处理几个项目
动作2: 循环开始
循环模式: 随机次数
最小次数: 3
最大次数: 10
上下文标识: "页面项目处理数量"
动作3: 处理单个项目...
动作4: 循环结束 # 内层循环结束
动作5: 翻页操作...
动作6: 循环结束 # 外层循环结束
随机结果示例: - 外层随机结果: 3页 (在2-5范围内) - 内层随机结果: - 第1页: 7个项目 (在3-10范围内) - 第2页: 4个项目 - 第3页: 9个项目 - 总处理项目: 7 + 4 + 9 = 20个
随机循环调试
随机结果日志
系统会详细记录随机生成过程:
[脚本名] 动作#1 随机循环配置 - 范围: 5-12次,上下文: "数据处理_批次"
[脚本名] 动作#1 随机生成结果 - 本次执行: 8次
[脚本名] 动作#1 循环栈状态 - 创建: L1(0/8)
可重现性测试
通过固定上下文确保随机结果的可重现性:
# 测试配置
动作类型: 循环开始
循环模式: 随机次数
随机配置:
最小次数: 1
最大次数: 10
上下文标识: "测试专用_固定种子_001"
多次执行相同配置应该产生相同的随机结果。
循环性能优化
大循环次数优化
性能考虑因素
- 内存消耗: 循环状态栈的内存占用
- 日志存储: 大量循环日志的存储空间
- 执行时间: 长时间循环的用户体验
- 系统资源: CPU和设备资源消耗
优化策略
1. 合理设置循环次数
# 避免过大的循环
❌ 不推荐:
动作类型: 循环开始
循环次数: 10000 # 过大的循环次数
✅ 推荐:
动作类型: 循环开始
循环次数: 50
说明: "合理的循环次数,分批处理"
2. 使用嵌套分解大循环
# 将大循环分解为嵌套循环
外层循环: 10次 (大分类)
内层循环: 50次 (小批量)
总计: 500次 (10 × 50)
优势:
- 更好的进度控制
- 更容易中断和恢复
- 更清晰的日志结构
3. 添加适当的等待时间
动作1: 循环开始
循环次数: 100
动作2: 主要处理动作...
动作3: 等待
等待时间: 0.1秒 # 短暂等待,避免过度占用资源
说明: "防止过度占用系统资源"
动作4: 循环结束
循环状态清理
自动清理机制
系统在以下情况会自动清理循环状态: 1. 脚本执行完成 2. 脚本被强制停止 3. 发生未处理的异常 4. 跨上下文跳转
手动清理方法
紧急情况下的循环清理:
# 添加循环清理检查点
动作1: 条件控制
条件类型: IF_THEN
检测配置:
检测类型: 文字识别文字检测
检测目标: ["重置", "清理"]
满足条件时操作: 调用动作组 "循环状态清理"
# 清理动作组
动作组 "循环状态清理":
动作1: 强制清理所有循环状态
动作2: 重置脚本执行位置
动作3: 跳转到安全位置
故障排除
常见循环问题
1. 循环无法结束
症状: 循环超出预期次数继续执行
可能原因: - 循环开始和结束不匹配 - 循环状态管理错误 - 跳转逻辑影响循环计数
诊断方法:
检查日志中的循环栈状态:
[脚本名] 动作#5 循环栈检查: L1(10/5) ← 异常:超出预期
[脚本名] 动作#5 循环状态验证失败
解决方案: 1. 验证循环结构的完整性 2. 检查跳转逻辑是否影响循环状态 3. 强制清理循环状态并重新开始
2. 嵌套循环混乱
症状: 内外层循环执行顺序混乱
可能原因: - 嵌套循环边界设置错误 - 跨层级跳转导致状态异常
诊断方法:
分析循环栈的层级关系:
[脚本名] 循环栈验证: L1(1/3)->L2(5/2) ← 异常:L2超出范围
[脚本名] 嵌套关系错误
解决方案: 1. 重新设计嵌套循环边界 2. 避免跨层级的直接跳转 3. 使用条件流程控制替代直接跳转
3. 循环与动作组冲突
症状: 调用动作组后循环状态异常
可能原因: - 动作组内跳转到主脚本 - 动作组执行异常未正确返回
诊断方法:
跟踪上下文切换:
[脚本名] 进入动作组: 处理流程
[动作组:处理流程] 循环开始: AG-L1(0/5)
[脚本名] 异常返回: 循环状态不一致
解决方案: 1. 确保动作组内部跳转不跨越上下文 2. 添加动作组异常处理机制 3. 在动作组返回时验证循环状态
调试工具和技巧
1. 循环状态监控
启用详细日志:
# 在循环开始添加状态监控
动作1: 循环开始
循环次数: 5
调试选项: 启用详细日志
# 在循环关键位置添加检查点
动作2: 检查点动作
动作3: 循环状态日志输出
2. 循环结构验证
使用系统验证功能:
验证结果示例:
✅ 循环结构完整性检查通过
✅ 嵌套关系正确
❌ 发现问题:动作15的循环结束没有对应的开始
3. 执行路径追踪
跟踪复杂循环的执行路径:
执行路径日志:
动作1 → 动作2 (L1开始) → 动作3 → 动作4 (L2开始) →
动作5 → 动作6 (L2结束,跳转到动作4) → 动作5 →
动作6 (L2结束,跳转到动作7) → 动作7 (L1结束,跳转到动作2)
最佳实践
1. 循环设计原则
简单性原则: - 优先使用简单的单层循环 - 避免过度复杂的嵌套结构 - 保持循环逻辑的清晰性
可维护性原则: - 使用有意义的循环说明 - 合理设置循环次数范围 - 添加适当的调试信息
性能原则: - 避免不必要的大循环 - 在循环体中添加适当等待 - 及时清理不需要的循环状态
2. 嵌套循环设计
层级控制: - 建议最大嵌套层级不超过3层 - 每层循环都应有明确的业务含义 - 避免单纯为了减少代码重复而嵌套
边界管理: - 确保循环开始和结束正确配对 - 避免跨循环边界的直接跳转 - 使用分组标识辅助循环边界识别
3. 跳转控制最佳实践
安全跳转: - 优先使用条件流程控制 - 避免跨上下文的直接跳转 - 在跳转前考虑循环状态影响
异常处理: - 为循环异常设计专门的处理流程 - 提供循环状态清理机制 - 建立错误恢复策略
4. 随机循环优化
合理范围: - 设置合理的随机次数范围 - 考虑业务场景的实际需求 - 避免过大的随机范围差异
上下文设计: - 使用有意义的上下文标识 - 确保上下文的唯一性 - 便于调试和问题定位
高级应用案例
案例1: 电商自动化购物
业务需求: 自动浏览商品,随机加购物车,模拟真实用户行为
# 主流程:浏览多个商品类别
动作1: 循环开始
循环模式: 随机次数
最小次数: 3
最大次数: 6
上下文标识: "商品类别浏览"
说明: "随机浏览3-6个商品类别"
# 子流程:每个类别浏览多个商品
动作2: 循环开始
循环模式: 随机次数
最小次数: 5
最大次数: 12
上下文标识: "类别内商品浏览"
说明: "每个类别随机浏览5-12个商品"
动作3: 图像识别_点击
模板图片: ["商品1.png", "商品2.png", "商品3.png"]
说明: "点击商品进入详情"
动作4: 等待
等待时间: 2-5秒随机
说明: "模拟用户查看商品详情时间"
动作5: 条件控制
条件类型: IF_THEN
检测配置:
检测类型: 文字识别文字检测
检测目标: ["加入购物车", "立即购买"]
满足条件时操作: 调用动作组 "随机加购物车"
随机执行概率: 30% # 30%概率执行加购物车
动作6: 文字识别_点击
检测目标: ["返回", "back"]
说明: "返回商品列表"
动作7: 循环结束 # 结束商品浏览循环
动作8: 文字识别_点击
检测目标: ["下一类别", "更多分类"]
说明: "切换到下一个商品类别"
动作9: 循环结束 # 结束类别浏览循环
# 随机加购物车动作组
动作组 "随机加购物车":
动作A1: 文字识别_点击
检测目标: ["加入购物车"]
动作A2: 等待
等待时间: 1秒
动作A3: 文字识别_检测
检测目标: ["已添加", "购物车"]
检测成功时: 记录成功日志
执行特点: - 双层随机循环模拟真实浏览行为 - 随机执行概率控制加购物车频率 - 动作组封装可重用的购物车操作
案例2: 游戏多关卡自动化
业务需求: 自动挑战游戏关卡,根据不同难度调整策略
# 主循环:挑战多个关卡
动作1: 循环开始
循环模式: 固定次数
循环次数: 10
说明: "挑战10个关卡"
动作2: 文字识别_检测
检测目标: ["简单", "普通", "困难"]
检测成功后操作: 调用对应难度动作组
动作3: 条件控制
条件类型: IF_THEN_ELSE
检测配置:
检测类型: 文字识别文字检测
检测目标: ["挑战成功", "胜利"]
满足条件时操作: 继续下一关卡
不满足时操作: 调用动作组 "失败重试处理"
动作4: 循环结束
# 困难关卡策略动作组
动作组 "困难关卡策略":
# 困难关卡需要更多操作
动作A1: 循环开始
循环模式: 随机次数
最小次数: 8
最大次数: 15
上下文标识: "困难关卡_技能释放"
说明: "困难关卡需要更多技能"
动作A2: 图像识别_点击
模板图片: ["技能1.png", "技能2.png", "技能3.png"]
随机偏移: 10像素
说明: "释放技能"
动作A3: 等待
等待时间: 0.5秒
说明: "技能冷却等待"
动作A4: 循环结束
# 简单关卡策略动作组
动作组 "简单关卡策略":
# 简单关卡操作较少
动作B1: 循环开始
循环模式: 固定次数
循环次数: 3
说明: "简单关卡少量操作即可"
动作B2: 图像识别_点击
模板图片: ["攻击.png"]
说明: "基础攻击"
动作B3: 等待
等待时间: 1秒
动作B4: 循环结束
执行特点: - 根据关卡难度动态调整循环策略 - 困难关卡使用随机循环增加变化 - 简单关卡使用固定循环保证效率
案例3: 数据采集与处理
业务需求: 批量采集网页数据,按页面分批处理
# 外层循环:处理多个页面
动作1: 循环开始
循环模式: 固定次数
循环次数: 20
说明: "处理20个数据页面"
# 内层循环:每页采集多条数据
动作2: 循环开始
循环模式: 随机次数
最小次数: 10
最大次数: 25
上下文标识: "页面数据采集_条目数"
说明: "每页随机采集10-25条数据"
动作3: 文字识别_点击
检测目标: ["数据行", "条目"]
重试次数: 3
重试失败后操作: 跳转到分组 "页面数据采集完成"
动作4: 调用动作组 "数据提取与保存"
动作5: 文字识别_点击
检测目标: ["下一条", "next"]
说明: "移动到下一条数据"
动作6: 循环结束 # 结束页面内数据采集
动作7: [分组: 页面数据采集完成] 文字识别_点击
检测目标: ["下一页", "next page"]
说明: "翻到下一页"
动作8: 等待
等待时间: 3秒
说明: "等待页面加载"
动作9: 循环结束 # 结束页面循环
# 数据提取与保存动作组
动作组 "数据提取与保存":
动作C1: 文字识别_检测
检测目标: ["标题", "价格", "描述"]
检测区域: ROI(0, 0, 100, 50)
说明: "提取数据字段"
动作C2: SCREENSHOT
保存路径: "/storage/emulated/0/data_collection/"
文件名: "data_{timestamp}.jpg"
说明: "保存数据截图"
动作C3: 等待
等待时间: 0.5秒
说明: "数据保存等待"
执行特点: - 双层循环实现分页和条目的批量处理 - 随机采集数量避免固定模式被检测 - 独立的数据处理动作组便于复用和维护 - 完善的错误处理和跳转机制
总结
循环功能是脚本自动化的核心控制结构,通过合理的设计和使用,可以实现高效、稳定、灵活的自动化流程。
关键要点
- 理解循环层级: 掌握脚本循环与动作组循环的独立性和优先级关系
- 合理设计嵌套: 避免过度复杂的嵌套结构,保持逻辑清晰
- 安全使用跳转: 理解跳转对循环状态的影响,优先使用条件流程控制
- 善用随机功能: 合理利用随机循环模拟真实用户行为
- 注重性能优化: 控制循环次数和资源消耗,添加适当的等待时间
- 完善异常处理: 建立循环异常处理机制,提供状态清理功能
最佳实践总结
- 从简单循环开始,逐步增加复杂度
- 充分利用日志系统进行调试和监控
- 设计完善的异常处理和恢复机制
- 合理使用动作组封装可重用的循环逻辑
- 定期验证循环结构的完整性和正确性
正确使用循环功能可以让您的自动化脚本更加强大、灵活和稳定!