刚开始写流程时,我习惯把所有步骤塞进一个主流程里。
结果流程越来越长,超过200行后,改一个地方要找半天,调试时单步执行得点几百下。
核心方法: 用“子流程”把大流程拆成小模块,每个模块只做一件事。
我摸索出一套 ABCD编号法,用了半年,维护效率提升一倍以上。
一、为什么要拆分子流程?
一个没拆分的流程,所有指令堆在一起:
-
改登录逻辑,要在200行里找到那5行
-
某个步骤报错,整个流程从头重跑
-
想复用“采集商品数据”这段,只能复制粘贴
拆了之后:
- 主流程只有10-15个子流程调用,像目录一样清晰
- 修改登录,只改
A_登录子流程,不影响其他
B_采集商品列表可以在不同项目里复用- 调试时单独运行某个子流程,不用跑完整流程
二、ABCD编号法:命名即注释
我给子流程命名时,用 字母前缀 + 数字 + 描述 的格式。
字母代表模块类型,数字代表执行顺序。
标准模板
A01_初始化_打开浏览器并登录
B02_翻页采集商品列表
C03_解析商品详情页

D04_数据清洗与格式转换
E05_写入Excel并发送通知

字母含义
| 前缀 | 含义 | 典型操作 |
|---|---|---|
| A | 初始化 | 打开浏览器、登录、清理缓存 |
| B | 批量采集 | 循环翻页、获取相似元素列表 |
| C | 单页解析 | 提取标题/价格/详情 |
| D | 数据处理 | 清洗、去重、格式转换 |
| E | 输出与通知 | 写Excel、发飞书/邮件 |
| F | 异常处理 | 验证码处理、重试机制 |
| Z | 测试专用 | 临时调试用,正式版可删除 |
数字规则: 两位数,从01开始。
如果需要在A02和A03之间插入新流程,用A02_1表示(不推荐,说明一开始没规划好)。
实操:影刀里创建子流程
- 在主流程界面左侧,右键“流程” → 新建子流程
- 命名为
A01_初始化_登录淘宝 - 双击进入子流程,编写登录步骤
- 在主流程中,拖入“调用子流程”指令,选择
A01_初始化_登录淘宝
三、四大拆分原则(重点)
原则1:一个子流程只做一件事
❌ 错误:B_采集数据并写入Excel(做了采集+写入两件事)
✅ 正确:B_采集商品数据 + E_写入Excel(分开)
判断标准: 如果子流程名称里有“并”、“且”、“与”,说明该拆了。
原则2:可复用的逻辑单独成模块
比如“处理验证码”可能在登录、提交订单、翻页时都会出现。
单独建一个 F_处理滑块验证码,需要的地方调用它。
原则3:子流程行数控制在30-50行
超过50行说明还可以继续拆。
一个窗口能看完的长度,调试最方便。
原则4:循环体内的操作拆成子流程
# 主流程里只做循环控制
循环遍历列表(商品卡片列表, 当前卡片)
调用子流程(C_解析单个商品, 传入当前卡片)
好处:修改解析逻辑时,不用碰循环部分,降低改错风险。
四、子流程参数传递(输入与输出)
子流程之间不共享变量,要通过参数传递数据。
设置输入参数(子流程接收数据)
- 打开子流程,点击顶部“流程参数”按钮
- 添加“输入参数”,比如
商品URL(文本类型) - 在子流程里用
{{商品URL}}变量使用
设置输出参数(子流程返回数据)
- 同样在“流程参数”里添加“输出参数”,比如
商品标题 - 在子流程最后,用“设置输出参数”指令赋值
- 主流程调用时,用一个变量接收返回值
实战:采集单个商品详情页
子流程 C03_解析商品详情:
- 输入参数:
商品详情页URL - 输出参数:
标题、价格、销量
子流程内部:
打开网页(商品详情页URL)
等待元素出现(标题元素, 5秒)
标题 = 获取元素文本(标题元素)
价格 = 获取元素文本(价格元素)
销量 = 获取元素文本(销量元素)
设置输出参数(标题, 标题)
设置输出参数(价格, 价格)
设置输出参数(销量, 销量)
主流程调用:
调用子流程(C03_解析商品详情,
输入={商品详情页URL: url变量},
输出={标题: 标题变量, 价格: 价格变量, 销量: 销量变量})
注意: 影刀中输出参数必须在子流程内用“设置输出参数”指令赋值,否则主流程收到的变量是空。
五、异常处理的模块化
每个子流程内部应该有自己的Try-Catch,而不是全交给主流程。
推荐结构
# 子流程内部
Try
# 正常操作
Catch
输出日志("子流程[C03]执行失败:" + 错误信息)
设置输出参数(成功标志, False)
返回 # 提前结束,不执行后面的代码
Finally
# 清理操作(如关闭弹窗)
主流程调用后检查输出参数 成功标志,决定是否继续。
六、实战案例:淘宝商品批量采集的模块拆分
完整模块清单
A01_初始化_打开浏览器并登录
A02_初始化_设置搜索关键词
B01_翻页采集控制器(主循环)
├── C01_采集当前页商品卡片列表
├── C02_循环解析每个卡片(调用C03)
│ └── C03_解析单个卡片(提取标题/价格/链接)
└── C04_翻页到下一页(判断是否存在下一页)
D01_数据清洗(去重、删除空白行)
E01_写入Excel并保存
F01_异常处理_登录滑块验证码
主流程(A开头+控制逻辑)只有10行:
调用子流程(A01_初始化)
调用子流程(A02_设置关键词)
调用子流程(B01_翻页采集控制器)
调用子流程(D01_数据清洗)
调用子流程(E01_写入Excel)
常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 子流程里的变量主流程用不了 | 没设置输出参数 | 添加输出参数并用“设置输出参数”赋值 |
| 调用子流程时提示“参数类型不匹配” | 传入的变量类型不对(文本传成了数字) | 检查参数类型,必要时用“转换为文本”指令 |
| 子流程单独运行正常,被调用时出错 | 缺少依赖的前置流程(比如没登录) | 确保主流程按顺序调用,或用“全局变量”传递状态 |
| 子流程拆得太细,调用关系混乱 | 没有遵循ABCD命名法 | 用前缀区分层级,A是初始化,B是批量,C是解析 |
| 修改了子流程,但主流程没生效 | 影刀缓存了旧版本 | 保存所有流程,关闭重开,或点击“清理缓存” |
推荐资源
- 影刀官方学院: “流程设计——子流程与参数传递”(完整案例演示)
- 我的文章联动:
- 下一篇:[影刀RPA实操指南:流程参数实战——子流程之间如何传递数据](选题池14号,紧接本文)
- 工具推荐: 用“流程概览”视图(顶部菜单),可以看所有子流程的调用关系图,一目了然
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
