影刀RPA代码可读性实践:写出六个月后自己还看得懂的流程
📅 2026/7/26 3:01:42
👁️ 阅读次数
📝 编程学习
影刀RPA代码可读性实践:写出六个月后自己还看得懂的流程
作者:林焱
一个真实故事
六个月前我写了一个"自动抓取商品价格并生成日报"的流程,当时赶时间,变量名叫a、b、temp1、temp2,没有注释,子流程叫"子流程1"、“子流程2”。
六个月后客户让我加一个"对比昨天价格标红"的功能,我花了两小时才看懂自己当初写了什么。
那次之后我开始认真对待流程的可读性。这篇文章是我整理的实践方法。
为什么流程可读性重要
- 你不只写一次:90%的流程都会被修改——加功能、修bug、适配网页改版
- 不只你一个人用:发给同事、客户、发到影刀市场,别人要能看懂
- 调试效率:可读性好的流程,找bug的时间减少一半以上
- 未来的你是另一个人:三个月后你已经不记得当时的逻辑了
变量命名:最基础也最重要
原则:名字要说明"这个变量是什么",不是"这个变量怎么用"
❌ 差命名:
a = 获取文本() temp = 处理(a) result = 输出(temp) ✅ 好命名:
商品名称 = 获取文本() 清洗后的商品名称 = 去除空格(商品名称) 导出的商品名称 = 格式化(清洗后的商品名称)常见变量命名规范
| 变量类型 | 推荐命名方式 | 示例 |
|---|---|---|
| 列表/集合 | 名词+列表 | 商品列表、URL列表 |
| 计数器 | 名词+数量/计数 | 已处理数量、错误计数 |
| 布尔值 | 是否/Has前缀 | 是否登录成功、是否最后一页 |
| 临时中间变量 | 临时+名词 | 临时商品名、临时URL |
| 配置参数 | 配置+名词 | 配置_最大重试次数、配置_等待秒数 |
| 索引 | 名词+索引/序号 | 当前页索引、行序号 |
踩坑:中英文混用
影刀支持中文变量名,但如果你的流程要被不懂中文的人使用或者调用 Python 脚本,纯中文变量名会造成编码问题。建议:
店群矩阵自动化突破运营极限!
- 纯影刀内部流程用中文,直观
- 涉及 Python/API 调用的用英文或拼音
子流程命名:要说清楚做什么,不是叫什么
❌ 差命名:
子流程1 处理数据 执行操作✅ 好命名:
登录淘宝账号 从列表页提取商品信息 将商品数据写入Excel 检查是否还有下一页命名格式建议:动词+对象+(可选:条件)
打开商品详情页✅判断当前页是否为最后一页✅重试登录(最多3次)✅
注释:写在"不显而易见"的地方
很多人要么不写注释,要么注释废话连篇。
不需要注释的地方:
// 点击登录按钮 点击("登录按钮")这个注释没有任何价值,指令名称本身已经说明了一切。
需要注释的地方:
- 说明"为什么这么做",不是"做了什么"
// 等待3秒而不是1秒——这个网站的登录验证是异步的,1秒不够 等待(3000) - 标记已知的坑
// 注意:这个XPath在2024年10月后的新版页面里失效了 // 如果遇到元素找不到,检查是否触发了AB测试新版本 获取元素(".product-title")- 解释业务逻辑
// 价格变动超过5%才记录——过滤日常小波动,只关注异常价格 If abs(新价格 - 旧价格) / 旧价格 > 0.05: 记录价格变动- 标记TODO和已知问题
// TODO: 这里还没处理多规格商品的情况,只取了第一个规格的价格 // 等需求确认后再加流程结构:让人一眼看懂全貌
主流程要"高度概括"
主流程只做流程编排,不做具体操作:
❌ 差结构(主流程里堆满细节):
打开浏览器 导航到 https://... 等待页面加载 查找用户名输入框 输入用户名 查找密码输入框 输入密码 点击登录按钮 等待2秒 // ... 接下来200行✅ 好结构(主流程是目录):
调用子流程[初始化浏览器环境] 调用子流程[登录账号] 调用子流程[采集商品数据] 调用子流程[导出到Excel] 调用子流程[发送完成通知]看主流程,5秒内明白这个流程在做什么。
把相关逻辑聚在一起
不要因为"这段逻辑很短"就直接写在主流程里,该拆的要拆:
- 登录相关的所有操作 →
登录账号子流程 - 错误处理的所有逻辑 →
处理错误子流程 - 数据清洗的所有操作 →
清洗商品数据子流程
文件和路径:用变量代替硬编码
❌ 到处硬编码路径:
写入文件("C:/Users/linyan/Desktop/data.xlsx", 数据) 读取文件("C:/Users/linyan/Desktop/config.json") 写入日志("C:/Users/linyan/Desktop/logs/run.log")✅ 在流程开头统一定义:
temu店群自动化报活动案例
// === 路径配置 === 基础路径 = "C:/Users/linyan/Desktop/" 数据文件路径 = 基础路径 + "data.xlsx" 配置文件路径 = 基础路径 + "config.json" 日志文件路径 = 基础路径 + "logs/run.log" // 之后用变量引用 写入文件(数据文件路径, 数据)换电脑或者给别人用时,只需要改一处。
日志:给未来的调试留路标
在关键节点打日志,不是调试时才想起来:
// 流程开始 打印日志("=== 流程开始 === " + 获取当前时间()) // 每处理一个商品 打印日志("正在处理第 " + 当前序号 + " 个商品:" + 商品名称) // 关键决策点 打印日志("登录结果:" + 登录状态 + ",用时:" + 耗时 + "ms") // 流程结束 打印日志("=== 流程完成 === 共处理 " + 处理数量 + " 个,错误 " + 错误数量 + " 个")出问题时,日志告诉你:流程跑到哪了、当时的数据是什么、哪一步开始不对。
实战:一个前后对比案例
重构前(某个我接手维护的流程)
设置变量 x = "" 打开网页 url1 等待(2000) 获取元素 e1 设置变量 x = e1.text If x != "": 设置变量 y = split(x, "|")[0] 设置变量 z = split(x, "|")[1] 写入Excel(sheet1, row_idx, 1, y) 写入Excel(sheet1, row_idx, 2, z) 设置变量 row_idx = row_idx + 1重构后
// 从商品详情页提取名称和价格,写入结果表格 打开商品详情页(商品URL) 商品原始文本 = 获取商品文本(商品详情元素) If 商品原始文本 不为空: 商品名称 = 解析商品名称(商品原始文本) // 取"|"前半部分 商品价格 = 解析商品价格(商品原始文本) // 取"|"后半部分 写入结果表格( 工作表: 结果Sheet, 行号: 当前行序号, 商品名称: 商品名称, 商品价格: 商品价格 ) 当前行序号 = 当前行序号 + 1重构后:变量名可读、逻辑清晰、子流程封装了细节、注释说明了解析规则。
检查清单:发布前过一遍
- 所有变量名能说明它是什么
- 子流程名称是"动词+对象"格式
- 硬编码路径/URL/账号都提取到配置区
- 关键节点有日志打印
- 不明显的逻辑有注释说明"为什么"
- 主流程是概要,细节在子流程里
- 有 TODO 标记还没完成的部分
小结
可读性好的流程不是为了好看,是为了你自己和合作者能高效维护它。
花在命名和结构上的时间,会在第一次修改 bug 时加倍收回来。
作者:林焱|飞行社 RPA 实践记录
编程学习
技术分享
实战经验