刚开始写流程时,我习惯把所有步骤塞进一个主流程里。登录、搜索、采集、翻页、写Excel,全塞在一起,一个流程200多行。改一个地方要找半天,调试时单步执行得点几百下,报错了也不知道具体是哪个环节出了问题。
后来我才意识到:流程不是写出来的,是设计出来的。会基本指令的人能做出能跑的流程,懂子流程的人才能做出好维护、可扩展的流程。今天就把子流程拆分的完整方法论讲一遍。
为什么要拆分子流程:不拆的代价
一个没拆分的流程,所有指令堆在一起:
-
改登录逻辑,要在200行里找到那5行
-
某个步骤报错,整个流程从头重跑
-
想复用“采集商品数据”这段,只能复制粘贴
-
别人接手你的流程,根本看不懂
拆了之后呢:
- 主流程只有10-15个子流程调用,像目录一样清晰
- 修改登录,只改
A_登录子流程,不影响其他 - 采集模块可以在不同项目里复用
- 调试时单独运行某个子流程,不用跑完整流程
ABCD编号法:命名即注释
影刀里子流程默认叫“子流程1”“子流程2”,时间久了根本记不住哪个是哪个。我推荐用ABCD编号法命名,一看就知道顺序和功能。
命名格式
[字母前缀][两位数字]_[功能描述]
字母前缀含义
| 前缀 | 含义 | 典型操作 |
|---|---|---|
| A | 初始化 | 打开浏览器、登录、清理缓存 |
| B | 批量采集 | 循环翻页、获取相似元素列表 |
| C | 单页解析 | 提取标题/价格/详情 |
| D | 数据处理 | 清洗、去重、格式转换 |
| E | 输出与通知 | 写Excel、发飞书/邮件 |
| F | 异常处理 | 验证码处理、重试机制 |
| Z | 测试专用 | 临时调试用,正式版可删除 |
数字规则
两位数,从01开始递增。同一前缀内按执行顺序编号。
完整示例(以拼多多商品采集为例):
主流程(不编号,就叫“主流程”)
├── A01_登录拼多多
├── A02_进入搜索页
├── B01_翻页采集控制器
│ ├── C01_采集当前页商品列表
│ ├── C02_解析单个商品(被C01调用)
│ └── C03_翻页到下一页
├── D01_数据去重与清洗
├── E01_写入Excel并发送飞书通知
└── F01_重试机制(被C02调用)
影刀里怎么操作:在左侧流程树中,右键 → 新建子流程,名称框里直接输入A01_登录拼多多。子流程列表会按字母+数字自动排序,非常清晰。
四大拆分原则
原则1:一个子流程只做一件事
判断标准:如果子流程名称里有“并”、“且”、“与”,说明该拆了。
❌ 错误:B_采集数据并写入Excel(做了采集+写入两件事)
✅ 正确:B_采集商品数据 + E_写入Excel(分开)
原则2:可复用的逻辑单独成模块
比如“处理验证码”可能在登录、提交订单、翻页时都会出现。单独建一个F_处理滑块验证码,需要的地方调用它。
原则3:子流程行数控制在30-50行
超过50行说明还可以继续拆。一个窗口能看完的长度,调试最方便。
原则4:主流程只做调用
主流程里不要写具体操作指令,只放“调用子流程”指令。主流程就像一本书的目录,一眼看完整个流程的结构。
子流程的参数传递:输入与输出
影刀RPA里,主流程和子流程之间通过流程参数传递数据。在子流程的“流程属性”面板里,可以定义输入参数和输出参数。
支持的参数类型
| 类型 | 说明 |
|---|---|
| 字符串(String) | 文本数据 |
| 数值(Number) | 数字 |
| 布尔值(Boolean) | True/False |
| 列表(List) | 数组 |
| 字典(Dictionary) | 键值对 |
| 密码(Password) | 加密显示 |
注意:DataFrame对象目前不支持直接作为参数类型传递。如果要在子流程间传递表格数据,建议用列表嵌套列表(二维数组)代替。
传参实操
第一步:打开子流程,点击顶部“流程属性” → “流程参数”
第二步:添加输入参数(比如关键词列表,类型选“列表”)
第三步:添加输出参数(比如采集结果,类型选“列表”)
第四步:在主流程调用该子流程时,在指令详情面板里填入对应的输入值,并指定输出变量接收返回值。
我的习惯:需要在子流程里用的数据,统一通过参数传参的方式传递进去。子流程返回结果也用返回值。这样每个流程独立性强,移植复用都很方便。
子流程的调试:模块化调试法
子流程拆分后,调试也变简单了。
单独运行子流程
在左侧流程树中,右键点击某个子流程 → 运行此流程,可以单独测试这个模块,不用跑完整流程。
注意一个坑:直接运行子流程可能缺少前置条件(比如还没登录、还没到达特定页面)。解决方法:
- 方法一:在子流程开头加一段“前置条件”指令(获取当前对象、设置变量等),不用的时候注释掉
- 方法二:在全局变量里设置默认值,供调试时使用
- 方法三:在调试界面的“调试变量”中直接赋值
报错定位更精准
拆分后,报错日志会显示“A01_登录子流程第12行出错”,秒定位,不用在200行里翻找。
子流程的复用:一次写好到处用
这是子流程最大的价值。比如你写了一个“登录淘宝”的子流程,在其他项目里直接调用就行,不用重新写一遍。
复用时的注意事项:
- 参数要通用:登录子流程的输入参数应该是
账号和密码,而不是写死在流程里 - 不要依赖外部变量:子流程需要的所有数据都通过参数传入,不要直接读取主流程的变量
- 输出要明确:子流程执行完要返回明确的结果(成功/失败/数据)
命名规范的延伸:元素和变量也要规范
子流程命名规范了,元素和变量也不能乱来。
元素命名
❌ 默认的“元素1”“元素2”“元素3”
✅ [页面/模块]_[功能]_[类型]
首页_搜索框_输入框
搜索结果页_商品卡片_父容器
搜索结果页_商品标题_文本
详情页_价格_文本
详情页_购买按钮_按钮
登录页_下一页按钮_按钮
变量命名
❌ a、b、temp、data
✅ $商品列表(列表)、$当前页码(数字)、$是否登录(布尔)
变量名前加类型前缀,一看就知道是什么类型:
$lst_商品列表→ 列表$num_当前页码→ 数字$str_商品名称→ 字符串$bln_是否登录→ 布尔
应用命名:从创建就要规范
应用名称在左上角可以修改,建议创建时就按规范命名,不要用默认的“新建应用1”。
命名格式:[平台]_[业务]_[版本号]
拼多多_商品价格监控_V2.3
淘宝_自动上架_V1.0
小红书_达人数据采集_每日版
TEMU_订单批量发货_正式
常见问题速查
| 问题现象 | 根本原因 | 修复方法 |
|---|---|---|
| 子流程运行报错“变量未定义” | 子流程直接读取了主流程的变量 | 改用参数传递,把需要的变量作为输入参数传入 |
| 子流程返回值一直是空 | 没有设置输出参数或在子流程里没有赋值 | 在流程属性里设置输出参数,子流程结束时赋值 |
| 子流程太多分不清顺序 | 命名没带编号 | 用ABCD编号法重命名,按执行顺序编号 |
| 改了子流程主流程没生效 | 子流程被其他流程引用,缓存没更新 | 关闭所有引用该子流程的流程,重新打开 |
| 子流程超过100行很难调试 | 拆分不够细 | 继续拆分,每个子流程控制在30-50行 |
推荐资源
- 影刀官方帮助文档搜索“子流程”,有完整的参数传递说明
- 影刀开发者社区搜索“模块化”或“子流程”,有大量实战案例分享
- 影刀官方B站搜索“子流程设计”,有视频教程
#影刀RPA #RPA自动化 #子流程设计 #模块化开发 #开发规范 #电商自动化
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。如果这篇文章对你有帮助,欢迎点赞收藏,下一篇我们聊“定时任务配置与夜间执行避坑指南”。
