流程跑完发现数据不对,但不知道哪一步出错了。或者半夜流程失败,第二天早上才看到,浪费了社区版时长。 没有日志系统,排查问题就像大海捞针。
核心方法:在关键节点加“输出日志”记录变量值,出错时自动截屏,运行结束后生成汇总报告。
一、日志系统的三个层次
| 层次 | 作用 | 实现方式 |
|---|
| 关键节点日志 | 记录流程执行到哪一步、变量值是多少 | 影刀“输出日志”指令 |
| 错误截图 | 出错时保存当前页面截图,事后查看 | try-catch + “屏幕截图”指令 |
| 运行报告 | 汇总开始时间、结束时间、成功/失败数量 | 全局变量 + 写入Excel |
社区版注意: 日志和截图会占用磁盘空间,建议定期清理。截图指令会消耗运行时长,只在出错时截图,不要每步都截。
二、关键节点日志:知道流程跑到哪了
在流程的关键位置插入“输出日志”指令。
操作步骤
- 在流程开头输出“开始时间”
- 每个子流程入口输出“进入xxx子流程”
- 循环内每隔10次输出一次进度
- 关键变量赋值后输出变量值
- 流程结束输出“结束时间”
# 流程开头
输出日志:"========== 流程开始 =========="
输出日志:"开始时间:{当前时间}"

# B01_Login 子流程开头
输出日志:"--- 进入登录子流程 ---"
# 判断登录状态后

输出日志:"登录状态检查结果:{是否已登录}"
# C01_CollectList 循环内(每10次输出一次)
设置变量:当前索引 = 0
循环列表:商品列表
如果 当前索引 % 10 == 0
输出日志:"已处理第{当前索引}条数据,共{列表长度}条"
当前索引 = 当前索引 + 1
# 流程结束
输出日志:"========== 流程结束 =========="
输出日志:"结束时间:{当前时间}"
输出日志:"共采集{成功数量}条数据"
日志面板在哪? 运行流程后,底部会弹出“输出”面板,所有日志显示在那里。可以右键“导出日志”保存为txt文件。
三、错误截图:出错时保存现场
流程报错时,页面可能已经变化或关闭。在catch块里加入截图指令,把出错时的页面存下来。
操作步骤
- 在try-catch的Catch块里加“屏幕截图”指令
- 截图保存路径带上时间戳,避免覆盖
- 同时输出错误信息和截图路径到日志
# 在关键操作外包try-catch
Try
点击元素://button[text()='提交订单']
Catch
# 输出错误日志
输出日志:"点击提交订单失败:{异常信息}"
# 截屏保存
屏幕截图
保存路径:"C:\error_screens\error_{当前时间}.png"
截取区域:整个浏览器窗口
输出日志:"截图已保存:C:\error_screens\error_{当前时间}.png"
# 可选:把错误信息写入单独的Excel
调用子流程:E01_WriteErrorLog,输入参数:错误信息={异常信息}
注意: 截图指令需要指定保存路径,文件夹必须提前存在。可以在流程开头用“创建文件夹”指令检查。
# 流程开头检查截图文件夹是否存在
判断文件夹是否存在:路径"C:\error_screens"
如果 不存在
创建文件夹:路径"C:\error_screens"
四、运行报告:汇总一次流程的执行情况
用全局变量记录关键指标,运行结束后写入Excel或发送飞书通知。
全局变量设置示例
| 变量名 | 类型 | 含义 |
|---|---|---|
| 流程开始时间 | 时间 | 流程启动时刻 |
| 流程结束时间 | 时间 | 流程结束时刻 |
| 成功采集数 | 整数 | 成功采集的商品数量 |
| 失败数 | 整数 | 采集失败的商品数量 |
| 翻页次数 | 整数 | 总共翻了多少页 |
| 最后错误信息 | 文本 | 最后一次报错的内容 |
# 流程开始:初始化全局变量
设置全局变量:流程开始时间 = 当前时间
设置全局变量:成功采集数 = 0
设置全局变量:失败数 = 0
设置全局变量:翻页次数 = 0
# 循环采集商品时
Try
采集商品...
成功采集数 = 成功采集数 + 1
Catch
失败数 = 失败数 + 1
输出日志:"采集失败,失败数={失败数}"
# 翻页时
点击下一页
翻页次数 = 翻页次数 + 1
# 流程结束:生成报告
设置全局变量:流程结束时间 = 当前时间
计算耗时:流程结束时间 - 流程开始时间 → 存入“运行时长”
# 写入报告到Excel
Excel Workbook打开:文件"C:\运行报告.xlsx",自动创建
写入行数据到表格:起始"A1",行数据["项目","值"]
追加行到表格:行数据["开始时间", 流程开始时间]
追加行到表格:行数据["结束时间", 流程结束时间]
追加行到表格:行数据["运行时长(秒)", 运行时长]
追加行到表格:行数据["成功采集数", 成功采集数]
追加行到表格:行数据["失败数", 失败数]
追加行到表格:行数据["翻页次数", 翻页次数]
Excel Workbook保存并关闭
输出日志:"运行报告已生成,成功{成功采集数}条,失败{失败数}条"
五、发送通知:飞书/钉钉机器人
流程运行完后,自动发送报告到群里,不用每天打开电脑看。
操作步骤(以飞书为例)
- 在飞书群组里添加“自定义机器人”,获取webhook地址
- 在影刀里用“发送HTTP请求”指令
- 构造JSON格式的消息内容
# 影刀指令配置
发送HTTP请求
请求方式:POST
URL:https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx
请求头:Content-Type: application/json
请求体:
{
"msg_type": "text",
"content": {
"text": "【影刀流程报告】\n开始时间:{流程开始时间}\n结束时间:{流程结束时间}\n成功:{成功采集数}条\n失败:{失败数}条\n详情:{运行报告路径}"
}
}
钉钉类似,只需要改URL和消息格式。
六、完整日志系统模板
把上面所有内容整合成一个可复用的“日志子流程”。
# 子流程:E01_InitLog(初始化日志系统)
# 在A_Main开头调用
# 创建文件夹
创建文件夹:路径"C:\log_{当前日期}",如存在则跳过
# 初始化全局变量
设置全局变量:日志路径 = "C:\log_{当前日期}"
设置全局变量:流程开始时间 = 当前时间
设置全局变量:成功数 = 0
设置全局变量:失败数 = 0
设置全局变量:错误列表 = [] # 存错误信息
# 输出启动日志
输出日志:"=== 日志系统初始化完成 ==="
输出日志:"日志目录:{日志路径}"
# 子流程:E02_WriteLog(写入日志)
# 输入参数:日志内容(文本)
# 追加到当天的日志文件
文件写入
文件路径:{日志路径}\run.log
写入内容:{当前时间} - {日志内容}
写入方式:追加
# 子流程:E03_OnError(错误处理)
# 输入参数:错误信息(文本)
# 记录到错误列表
错误列表.append(错误信息)
失败数 = 失败数 + 1
# 截图
屏幕截图:保存路径"{日志路径}\error_{错误序号}.png"
# 输出日志
输出日志:"[错误] {错误信息},截图已保存"
# 写入错误日志文件
文件写入:{日志路径}\error.log,内容"{当前时间}|{错误信息}"
# 子流程:E04_GenerateReport(生成报告)
计算耗时
写入报告Excel
# 可选:发送飞书通知
输出日志:"报告生成完成,共{失败数}个错误"
七、日志系统的使用建议
| 流程规模 | 建议的日志级别 | 截图策略 |
|---|---|---|
| 开发调试阶段 | 详细日志(每步都输出) | 每步都截图(方便定位) |
| 日常运行(稳定) | 关键节点日志(子流程进出+错误) | 仅错误时截图 |
| 批量采集(大数量) | 每100条输出一次进度 | 仅错误时截图 |
| 无人值守(夜间) | 完整日志+结束时发送报告 | 错误时截图+通知 |
社区版时长优化:
- 不要每循环都输出日志(IO操作耗时)
- 不要每步截图
- 日志文件定期清理(超过7天删除)
八、易错速查表
| 错误现象 | 原因 | 解决方法 |
|---|---|---|
| 截图保存失败 | 文件夹不存在 | 流程开头用“创建文件夹”指令 |
| 日志文件找不到 | 路径用了相对路径 | 改用绝对路径,如C:\logs\ |
| 飞书通知没收到 | webhook地址错了或网络不通 | 先用浏览器访问webhook测试 |
| 全局变量在子流程里读不到 | 没有声明全局 | 子流程里用“获取全局变量”指令 |
| 日志文件越来越大 | 没有清理机制 | 流程开头检查文件大小,超过10MB就新建 |
推荐资源
- 影刀官方帮助中心:搜索“日志”“输出日志”有示例
- 飞书自定义机器人文档:open.feishu.com(搜索“机器人”)
- 我的经验:从第一天写流程就加上关键节点日志,后期排查问题能省90%的时间
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
