影刀RPA子流程与模块化:让复杂流程变得井井有条

作者:林焱 | 阅读时间:约10分钟 | 难度:⭐⭐ 进阶

当你的流程从 10 条指令增长到 100 条、500 条时,如果没有良好的组织方式,很快就会变成一团乱麻。本文教你用「子流程」把复杂问题拆解成简单模块。


一、为什么要使用子流程?

1.1 一个真实的痛点场景

假设你要做一个电商数据采集系统,主流程有这些步骤:

打开网站 → 登录 → 搜索商品 → 翻页采集 → 清洗数据
→ 写入Excel → 发送邮件通知 → 备份数据 → 写日志

如果全部写在一个流程里,会变成这样:

[打开网页] [登录-输入账号] [登录-输入密码] [登录-点击按钮]
[等待登录成功] [搜索-点击搜索框] [搜索-输入关键词]
[搜索-点击搜索] [翻页-判断是否有下一页] [翻页-点击下一页]
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0e416fdbba18453b90332ce916d31504.png#pic_center)

[采集-获取标题] [采集-获取价格] [采集-获取评分] ... (共200+条指令)

问题显而易见:

  • 找一个功能要翻半天
  • 改一处可能影响别处
  • 无法复用到其他项目
  • 别人看不懂你的流程

1.2 子流程能解决什么?

问题 用子流程后的效果
流程太长看不懂 拆成多个小模块,每个只做一件事
相同逻辑重复写 封装成子流程,多处调用
改一个地方牵连一片 只改子流程内部,调用方不受影响
团队协作困难 各人负责各自的子流程

二、子流程的基本概念

2.1 什么是子流程?

子流程 = 一个独立的、可被调用的、完成特定功能的流程单元

类比理解:

  • 主流程 = 一本书
  • 子流程 = 书中的每一章
  • 指令 = 章里的每一个段落

2.2 子流程的三大特性

在这里插入图片描述

特性 说明 类比
封装性 内部实现细节对外隐藏 你不需要知道手机内部电路,只需要知道怎么按按钮
复用性 可以在多处反复调用 一个工具可以被很多人重复使用
参数化 通过参数传入不同数据执行不同行为 同一台洗衣机,放不同衣服洗出不同结果

三、创建和调用子流程

3.1 创建子流程

方法一:从零新建

拼多多店群自动化报活动上架!

步骤:
1. 在左侧面板右键 → 新建子流程
2. 输入名称(如:login_flow)
3. 在子流程画布中编辑指令
4. 保存

方法二:从已有流程中提取

步骤:
1. 在主流程中选中一组相关指令(如登录相关的5条)
2. 右键 → 提取为子流程
3. 输入子流程名称
4. 影刀自动将选中的指令移到新子流程中
5. 原位置自动变成「调用子流程」指令

💡 推荐:新项目先用方法一设计好结构;老项目重构用方法二快速提取。

3.2 调用子流程

在主流程中:

  1. 找到 「流程控制」 分类
  2. 拖入 「调用子流程」 指令
  3. 选择要调用的子流程
  4. 如需传参,配置输入输出参数
# 主流程示例
- 打开浏览器
- 调用子流程: login_flow(用户名, 密码) → 返回: 登录状态
- 判断: 如果登录成功
    - 调用子流程: collect_data(关键词, 页数) → 返回: 数据列表
    - 调用子流程: save_to_excel(数据列表)
    - 调用子流程: send_email(收件人, 附件路径)
- 否则:
    - 调用子流程: send_alert("登录失败")

3.3 参数传递机制

输入参数(传进去)
参数类型 说明 示例
字符串 文本信息 "北京", "admin"
数字 数值 100, 3.14
布尔值 是/否 true, false
列表 多个值的集合 [item1, item2, item3]
对象 结构化数据 {name:"张三", age:25}
输出参数(拿出来)

子流程处理完之后,可以把结果返回给调用方:

子流程: calculate_tax(金额, 税率)
    ↓
    内部计算: 税额 = 金额 × 税率
    ↓
    输出参数: 返回税额
    ↓
主流程拿到税额继续后续操作

在这里插入图片描述

四、实战案例:电商数据采集系统的模块化拆分

4.1 需求描述

搭建一个完整的电商数据采集系统,功能包括:

  • 自动登录网站
  • 按关键词搜索商品
  • 翻页采集商品信息
  • 数据清洗去重
  • 存入Excel并发邮件通知

4.2 模块化设计方案

┌─────────────────────────────────────────────┐
│              主流程 main                     │
│                                             │
│  ┌─────────┐                                │
│  │ login   │ ← 子流程1:登录                │
│  └────┬────┘                                │
│       ↓                                     │
│  ┌─────────┐                                │
│  │ search  │ ← 子流程2:搜索                │
│  └────┬────┘                                │
│       ↓                                     │
│  ┌─────────┐   ┌──────────┐                 │
│  │ collect │ → │ cleanup  │ ← 子流程3、4     │
│  └────┬────┘   └────┬─────┘                 │
│       ↓              ↓                       │
│  ┌─────────┐   ┌──────────┐                 │
│  │ excel   │   │ email    │ ← 子流程5、6     │
│  └─────────┘   └──────────┘                 │
└─────────────────────────────────────────────┘

4.3 各子流程详细设计

子流程1:login(登录)
输入参数:username, password
输出参数:is_success (布尔值)

指令序列:
1. 打开登录页面
2. 等待用户名输入框出现
3. 输入 username
4. 输入 password
5. 点击登录按钮
6. 等待页面跳转(最多30秒)
7. 检测是否出现用户头像/欢迎文字
8. is_success = 出现了欢迎文字 ? true : false
9. 返回 is_success
子流程2:search(搜索)

在这里插入图片描述

输入参数:keyword, category
输出参数:result_count (数字)

指令序列:
1. 点击搜索框
2. 清空现有内容
3. 输入 keyword
4. 如果 category 不为空,选择分类下拉框
5. 点击搜索按钮
6. 等待结果加载
7. 获取结果数量文字 "共 XXX 件商品"
8. 提取数字部分作为 result_count
9. 返回 result_count
子流程3:collect_data(数据采集)
输入参数:max_pages
输出参数:data_list (列表)

指令序列:
1. 创建空列表 data_list
2. current_page = 1
3. 循环 (current_page <= max_pages):
   a. 等待列表加载完毕
   b. 获取当前页所有商品元素
   c. 遍历每个商品:
      - 获取标题
      - 获取价格
      - 获取销量
      - 获取链接
      - 组装成字典加入 data_list
   d. 判断是否有下一页
   e. 如果有:点击下一页,current_page + 1
   f. 如果没有:跳出循环
4. 返回 data_list
子流程4:cleanup_data(数据清洗)
输入参数:raw_data (列表)
输出参数:clean_data (列表)

指令序列:
1. 创建空列表 clean_data
2. 遍历 raw_data 中每条数据:
   a. 去除标题首尾空格
   b. 价格字符串转数字(去掉"¥"符号)
   c. 销量格式统一("1万+" → "10000+")
   d. 去除完全重复的记录
   e. 过滤掉价格=0或标题为空的无效数据
   f. 将清洗后的记录加入 clean_data
3. 返回 clean_data
子流程5:save_to_excel(保存Excel)
输入参数:data_list, file_path

指令序列:
1. 打开/创建 Excel 文件
2. 写入表头:序号 | 标题 | 价格 | 销量 | 链接 | 采集时间
3. 遍历 data_list,逐行写入数据
4. 设置表头样式(加粗、背景色)
5. 设置列宽自适应
6. 冻结首行
7. 保存文件
8. 关闭 Excel
子流程6:send_notification(发送通知)
输入参数:data_count, file_path, recipient

指令序列:
1. 拼接邮件正文:
   "您好!\n\n本次采集已完成,共获取 {data_count} 条数据。
    详细数据请见附件。\n\n——影刀RPA机器人"
2. 启动邮件客户端或调用SMTP
3. 填写收件人:recipient
4. 填写主题:"电商数据采集报告 - {今天日期}"
5. 填写正文
6. 添加附件:file_path
7. 发送邮件
8. 记录发送结果到日志

4.4 主流程组装

在这里插入图片描述

主流程:ecommerce_collector

步骤:
1. username = 从配置文件读取用户名
2. password = 从配置文件读取密码
3. 调用 login(username, password) → success
4. 如果 success == false:
     → 调用 send_alert("登录失败!")
     → 结束流程
5. 调用 search("iPhone 16", "手机") → count
6. 调用 collect_data(count // 20 + 1) → raw_data
7. 调用 cleanup_data(raw_data) → clean_data
8. 调用 save_to_excel(clean_data, "D:/report.xlsx")
9. 调用 send_notification(len(clean_data), "D:/report.xlsx", "boss@company.com")
10. 日志记录:"任务完成,共采集 N 条有效数据"
11. 结束

五、子流程设计的最佳原则

5.1 单一职责原则

每个子流程只做一件事,且做好一件事。

❌ 错误示例:do_everything 子流程
   (登录 + 采集 + 清洗 + 存储 + 发邮件 全写在一起)

✅ 正确示例:每个子流程职责明确
   login        → 只负责登录
   collect      → 只负责采集数据
   clean_data   → 只负责清洗数据
   save_excel   → 只负责保存Excel
   send_email   → 只负责发邮件

5.2 合理的粒度

子流程规模 适用情况 示例
3~15条指令 ✅ 最理想 登录、单次数据写入
15~30条指令 ⚠️ 可接受 完整的数据采集循环
超过50条 ❌ 应该再拆 考虑进一步拆分子模块

5.3 命名规范

✅ 推荐命名:
- login_user              (动词_对象)
- collect_product_data    (动词_对象_补充)
- format_price_string     (动词_对象_目的)
- check_network_status    (检查_对象_状态)

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/47581b35b5294b7aabc60dca94bd2a27.png#pic_center)

❌ 避免:
- flow1, flow2, flow3     (无意义)
- do_something            (太模糊)
- LoginAndCollectDataSaveSendEmail (太长,做了多件事)

5.4 降低耦合度

好的子流程之间应该是低耦合的:

高耦合(❌ 不推荐):
A子流程直接修改B子流程内部的变量
A子流程依赖C子流程的执行顺序

低耦合(✅ 推荐):
A子流程通过参数接收输入,通过返回值输出结果
A不关心B和C怎么实现的,只知道它们的接口

TEMU店群矩阵自动化运营核价报活动

六、高级技巧:子流程的组合模式

6.1 顺序模式

最常用的模式,按顺序依次执行:

A → B → C → D

适用:大部分线性业务流程。

6.2 条件模式

在这里插入图片描述

根据条件选择执行不同的子流程:

判断条件?
 ├── 是 → 执行 A
 └── 否 → 执行 B

适用:登录成功/失败走不同分支、不同类型数据处理。

6.3 循环模式

对一组数据重复执行同一子流程:

遍历数据列表:
    → 调用 process_item(当前项)

适用:批量处理订单、批量采集商品。

6.4 重试模式

遇到失败时自动重试:

尝试调用 risky_operation()
    ├── 成功 → 继续
    └── 失败 → 重试(最多3次)
               ├── 重试成功 → 继续
               ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c7dda6a744004013bcc5e464e55a05a3.png#pic_center)

               └── 重试也失败 → 记录错误,跳过

适用:网络请求、提交表单等不稳定操作。

6.5 并行模式(高级)

多个互不依赖的子流程同时执行:

并行执行:
  ├─ 任务A:采集淘宝数据
  ├─ 任务B:采集京东数据
  └─ 任务C:采集拼多多数据
       ↓
  全部完成后汇总

适用:多平台数据采集、独立任务的批处理。


七、常见错误与排查

错误现象 原因 解决方案
调用子流程后变量丢失 子流程内的变量作用域是局部的 使用输入/输出参数传递数据
子流程修改了外部变量 变量引用而非值传递 在子流程内部创建局部副本
子流程找不到 名称拼写错误或未保存 检查名称是否一致,确认已保存
参数类型不匹配 传入了字符串但期望数字 添加类型转换指令
死循环 子流程内部循环条件永远为真 确保循环有退出条件,加最大次数限制

八、总结

┌────────────────────────────────────────────┐
│           子流程核心要点速记                 │
├────────────────────────────────────────────┤
│ 1. 一个子流程只做一件事(单一职责)          │
│ 2. 通过参数传递数据,不要直接访问外部变量    │
│ 3. 好的名字比注释更重要                      │
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9442469688c742bcbf19c515401845dc.png#pic_center)

│ 4. 3~15条指令是最理想的粒度                  │
│ 5. 先设计再编码,画出模块关系图              │
│ 6. 低耦合高内聚是最高准则                    │
└────────────────────────────────────────────┘

🎯 下篇文章预告:《影刀RPA异常处理全攻略:Try-Catch让流程更健壮》— 流程跑着跑着挂了怎么办?学会异常处理让你的 RPA 机器人 24 小时不停机。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐