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

新手写流程,喜欢把所有指令堆在一个流程里。 采集、登录、翻页、写Excel全塞在一起,200多行指令,改一个地方要找半天,出错了也不好定位。

核心方法:按功能拆分子流程,用ABCD编号法命名,每个子流程只做一件事。

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

不拆的后果:

  • 一个流程超过50个指令,拖拽找指令都费劲
  • 某一步报错,整个流程重跑,浪费时间
  • 换个平台(拼多多→淘宝),要复制整个流程改,维护两套
  • 别人看不懂你的流程,没法协作

拆了的好处:

  • 每个子流程可以单独测试、单独调试
  • 公共功能(如登录、写入表格)一次写好,到处复用
  • 报错时日志显示“登录子流程第12行”,秒定位
  • 社区版30分钟可以只跑部分子流程测试

二、ABCD编号法:让子流程一目了然

影道里子流程默认叫“子流程1”“子流程2”,时间久了根本记不住。 推荐用 ABCD编号法 命名,一看就知道顺序和功能。

命名规则

前缀含义示例
A_主流程入口(唯一)A_Main
B_初始化/准备阶段B_Login, B_LoadConfig
C_核心采集/业务逻辑C_CollectProduct, C_ParseDetail
D_数据处理/输出D_WriteToExcel, D_SendReport
E_异常处理/清理E_Retry, E_ClosePopup, E_Logout

数字编号: 每个字母后跟两位数字,表示执行顺序。

A_Main
├── B01_Login
├── B02_LoadKeywords
├── C01_SearchProduct
├── C02_CollectList
├── C03_ParseDetail
├── D01_WriteExcel
└── E01_Logout

这样排序时,影刀画布里会按字母+数字自然排序,不会乱。


三、拆分原则:一个子流程只做一件事

判断标准: 这个子流程能否用一句话描述清楚?

  • “登录淘宝” ✅ 可以
  • “登录淘宝然后搜索商品然后采集” ❌ 太宽泛

实操:把一个大流程拆成5个子流程

以“拼多多商品采集”为例:

原流程(200行): 打开网页→登录→输入关键词→点击搜索→等待加载→循环商品列表→获取标题→获取价格→获取销量→翻页判断→写入Excel→关闭浏览器

拆分后:

# A_Main(主流程,只有调用指令)
调用子流程:B01_Login
调用子流程:B02_LoadKeywords
调用子流程:C01_SearchAndCollect
调用子流程:D01_SaveToExcel
调用子流程:E01_CloseBrowser

# B01_Login:只做登录
打开网页:"https://pinduoduo.com"
判断是否已登录,如未登录则扫码/账密登录
等待登录成功标志出现

# B02_LoadKeywords:只做关键词加载
从Excel读取A列关键词 → 存入列表变量“关键词列表”
输出日志:"共加载{关键词列表长度}个关键词"

# C01_SearchAndCollect:循环搜索+采集
循环列表:关键词列表
    输入关键词到搜索框,点击搜索
    等待搜索结果加载
    调用子流程:C02_CollectCurrentPage  # 采集当前页
    调用子流程:C03_CheckNextPage      # 翻页判断

# C02_CollectCurrentPage:只采集当前页商品
获取相似元素列表:商品容器
循环元素列表
    提取标题、价格、销量
    存入临时数据列表

# C03_CheckNextPage:只做翻页判断
判断“下一页”按钮是否存在且未禁用
如存在则点击,返回True;否则返回False

# D01_SaveToExcel:只做写入
将采集到的数据列表写入Excel,自动生成表头

# E01_CloseBrowser:只做清理
关闭浏览器标签页
清空全局变量(可选)

每个子流程不超过30个指令,调试时只需运行单个子流程。


四、子流程参数传递:输入和输出

拆分了就要传数据。影刀子流程支持“输入参数”和“输出参数”。

设置输入参数

  1. 打开子流程,点击顶部“流程参数”
  2. 添加输入参数,如“关键词”(文本类型)
  3. 在子流程里直接用{关键词}变量
# 子流程:C01_SearchAndCollect
# 输入参数:关键词(文本)
# 输出参数:采集结果(列表)

# 使用输入参数
输入文本://input[@class='search'],内容={关键词}
点击搜索

# 采集完成后,设置输出参数
设置输出参数:采集结果 = 商品数据列表

调用时传递参数

# 在A_Main中调用
调用子流程:C01_SearchAndCollect
    输入参数:关键词 = {当前关键词}
    输出参数存入:当前商品列表

# 再把结果汇总

容易踩的坑: 参数类型不匹配。输入参数是文本,你传了个列表进去会报错。在调用前用“转为文本”或“转为列表”转换。


五、子流程的复用:一次编写,多处调用

写好一个子流程,可以在不同主流程里重复使用。

典型可复用的子流程:

  • 登录(淘宝/拼多多/小红书,各自写一个)
  • 写入Excel(通用)
  • 发送飞书通知(通用)
  • 验证码处理(通用)
  • 异常重试(通用)
# 写入Excel通用子流程:D01_WriteExcel
# 输入参数:数据列表(列表类型)、文件路径(文本)、工作表名(文本)
# 内部:打开Excel → 写入表头 → 循环写入行数据 → 保存关闭

# 在多个主流程中调用
调用子流程:D01_WriteExcel
    输入参数:数据列表={商品数据},文件路径="C:/output.xlsx",工作表名="商品"

注意: 复用子流程时,要保证它的XPath、元素定位是通用的。比如“登录淘宝”子流程里的登录按钮XPath只针对淘宝,不能拿到拼多多用。


六、子流程调试技巧

技巧1:单独运行子流程

在影刀画布里,右键点击子流程标签,选择“运行此流程”。 不用从A_Main开始跑,节省时间。

技巧2:子流程加前后日志

每个子流程开头和结尾加“输出日志”。

# B01_Login 开头
输出日志:"=== 开始执行登录子流程 ==="

# 结尾
输出日志:"=== 登录子流程执行完成 ==="

技巧3:子流程报错时返回错误码

给子流程加一个“输出参数:错误码”(整数,0表示成功)。

# 子流程内部
try:
    登录操作...
    设置输出参数:错误码 = 0
catch:
    设置输出参数:错误码 = 1
    输出日志:"登录失败"

# 主流程中判断
调用子流程:B01_Login,输出参数存入:登录结果
如果 登录结果.错误码 != 0
    输出日志:"登录失败,终止流程"
    返回  # 停止主流程

七、子流程拆分检查清单

检查项好的示例坏的示例
子流程名称C02_CollectCurrentPage子流程3
指令数量10-30行80行以上
单一职责只做采集当前页采集+翻页+写Excel
参数传递有明确的输入输出用全局变量到处传
可复用性登录子流程可在多个项目用写死在主流程里
日志开头结尾有日志完全没有日志

易错速查表

错误现象原因解决方法
子流程调用后变量是空的忘记设置输出参数在子流程内部用“设置输出参数”
子流程里改了变量,主流程没变变量作用域问题用输出参数返回,或用全局变量(不推荐)
子流程找不到元素页面对象没传进去把“网页对象”作为输入参数传入
子流程太多,主流程很长主流程还是做了逻辑主流程只放调用,逻辑都在子流程
调试时改了子流程,主流程没生效没保存保存所有流程(Ctrl+Shift+S)

推荐资源

  • 影刀官方帮助中心:搜索“子流程”有视频教程和最佳实践
  • 我的经验:从第一次写流程就养成拆分的习惯,哪怕只拆成3个(初始化、采集、保存),后期维护会轻松10倍
  • 模板参考:影刀流程市场搜索“电商采集模板”,下载看别人怎么拆分的

作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

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