影刀RPA进阶教程:子流程拆分原则——ABCD编号法与模块化设计

刚开始写流程时,我习惯把所有步骤塞进一个主流程里。
结果流程越来越长,超过200行后,改一个地方要找半天,调试时单步执行得点几百下。

picture.image 核心方法: 用“子流程”把大流程拆成小模块,每个模块只做一件事。
我摸索出一套 ABCD编号法,用了半年,维护效率提升一倍以上。


一、为什么要拆分子流程?

picture.image

一个没拆分的流程,所有指令堆在一起:

  • 改登录逻辑,要在200行里找到那5行

  • 某个步骤报错,整个流程从头重跑

  • 想复用“采集商品数据”这段,只能复制粘贴

拆了之后:

  • 主流程只有10-15个子流程调用,像目录一样清晰
  • 修改登录,只改A_登录子流程,不影响其他

picture.image

  • B_采集商品列表可以在不同项目里复用
  • 调试时单独运行某个子流程,不用跑完整流程

picture.image

picture.image

二、ABCD编号法:命名即注释

picture.image

我给子流程命名时,用 字母前缀 + 数字 + 描述 的格式。
字母代表模块类型,数字代表执行顺序。

标准模板

A01_初始化_打开浏览器并登录
B02_翻页采集商品列表
C03_解析商品详情页

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/b13de8ab660842f28caae4029c5751e0~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1781487930&x-signature=9bJyOJXD4o3%2FYl7b8smL6jaFY3E%3D)
D04_数据清洗与格式转换
E05_写入Excel并发送通知

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/0980966eacc6435a87f68328188970d6~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1781487930&x-signature=WyIcsCvM3UA84tCQW1sVeQmsc6I%3D)

字母含义

前缀含义典型操作
A初始化打开浏览器、登录、清理缓存
B批量采集循环翻页、获取相似元素列表
C单页解析提取标题/价格/详情
D数据处理清洗、去重、格式转换
E输出与通知写Excel、发飞书/邮件
F异常处理验证码处理、重试机制
Z测试专用临时调试用,正式版可删除

数字规则: 两位数,从01开始。
如果需要在A02和A03之间插入新流程,用A02_1表示(不推荐,说明一开始没规划好)。

实操:影刀里创建子流程

  1. 在主流程界面左侧,右键“流程” → 新建子流程
  2. 命名为 A01_初始化_登录淘宝
  3. 双击进入子流程,编写登录步骤
  4. 在主流程中,拖入“调用子流程”指令,选择 A01_初始化_登录淘宝

picture.image

三、四大拆分原则(重点)

原则1:一个子流程只做一件事

❌ 错误:B_采集数据并写入Excel(做了采集+写入两件事)
✅ 正确:B_采集商品数据 + E_写入Excel(分开)

判断标准: 如果子流程名称里有“并”、“且”、“与”,说明该拆了。

原则2:可复用的逻辑单独成模块

比如“处理验证码”可能在登录、提交订单、翻页时都会出现。
单独建一个 F_处理滑块验证码,需要的地方调用它。

原则3:子流程行数控制在30-50行

超过50行说明还可以继续拆。
一个窗口能看完的长度,调试最方便。

原则4:循环体内的操作拆成子流程

# 主流程里只做循环控制
循环遍历列表(商品卡片列表, 当前卡片)
    调用子流程(C_解析单个商品, 传入当前卡片)

picture.image

好处:修改解析逻辑时,不用碰循环部分,降低改错风险。


四、子流程参数传递(输入与输出)

子流程之间不共享变量,要通过参数传递数据。

设置输入参数(子流程接收数据)

  1. 打开子流程,点击顶部“流程参数”按钮
  2. 添加“输入参数”,比如 商品URL(文本类型)
  3. 在子流程里用 {{商品URL}} 变量使用

设置输出参数(子流程返回数据)

  1. 同样在“流程参数”里添加“输出参数”,比如 商品标题
  2. 在子流程最后,用“设置输出参数”指令赋值
  3. 主流程调用时,用一个变量接收返回值

实战:采集单个商品详情页

子流程 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学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论