流程半夜跑完了,你只知道“失败了”,但不知道失败在哪一步、当时页面长什么样。
没有日志的流程就像没有黑匣子的飞机,坠毁了都不知道原因。
搭建一个简单的日志系统,关键节点记下来、出错截个图、跑完发个报告,排查问题从一小时缩到三分钟。
我也是被坑过好几次才开始认真做日志的,下面这套方案实测好用。
一、日志系统三件套——节点日志+错误截图+运行报告
| 组件 | 作用 | 存放位置 |
|---|---|---|
| 关键节点日志 | 记录“做了什么”,方便定位到哪一步 | 本地txt文件 / 输出窗口 |
| 错误截图 | 出错时保存页面现场,事后看 | 本地文件夹(按时间命名) |
| 运行报告 | 汇总本次运行情况(成功数、失败数、耗时) | 飞书/钉钉消息 / Excel汇总表 |
二、关键节点日志——用“输出日志”写流水账
场景:想知道流程跑到了第几页、采了多少条数据。
核心:在流程的关键位置加上“输出日志”指令,内容包含当前步骤和时间。
操作步骤
-
在流程开始时加一条日志:
流程开始,时间:{当前时间}。 -
在翻页前加:
开始采集第{页码}页。 -
在循环内每采10条加一次:
已采集{数量}条。 -
在子流程入口/出口加日志:
进入子流程A_登录/退出子流程A_登录。 -
在异常捕获的Catch块里加:
出错:{错误信息}。
影刀实操示例
# 输出日志指令的内容写法
"=== 流程开始 ==="
"当前时间:" + 获取当前时间("yyyy-MM-dd HH:mm:ss")

"开始采集关键词:" + 关键词变量
"第" + str(当前页) + "页采集完成,本页采集" + str(本页数量) + "条"
"流程结束,总计采集" + str(总数量) + "条"
日志分级建议:
INFO:正常步骤(翻页、采集成功)WARNING:可忽略的异常(重试成功、元素缺失)ERROR:导致跳过数据的错误
存储到文件:
“输出日志”默认只在影刀的输出窗口显示,流程关闭就没了。
用“写入文本”指令把日志追加到本地文件。
# 每写一条日志,同时写入txt文件
日志内容 = "2025-12-09 14:30:00 - INFO - 开始第3页采集"
写入文本(文件路径="C:\logs\run.log", 内容=日志内容, 追加=True)
三、错误截图——Catch里存现场
场景:流程跑失败了,你想知道当时浏览器显示什么。
核心:在Try-Catch的Catch块里加“截图保存”指令。
操作步骤
- 在可能出错的指令外面包上Try-Catch。
- 在Catch块的第一行拖入“截图保存”。
3. 截图路径用动态变量,避免覆盖。
- 可选:同时截取页面HTML源码。
代码示例
# Catch块里
Try:
截图保存(路径="C:\error_screenshots\error_" + 获取当前时间("yyyyMMdd_HHmmss") + ".png")
Catch:
# 截图本身也可能失败,忽略
输出日志("截图失败")
# 再记录错误信息
输出日志("错误详情:" + 获取最后一次错误信息())
截图命名规范:
error_20251209_143050_page3.png(日期_时间_第几页)
这样一眼就知道什么时候、哪一页出错了。
自动清理旧截图:
截图多了占硬盘,在流程开始前删除3天前的截图。
用“遍历文件夹”+“判断文件修改时间”+“删除文件”。
四、运行报告——跑完发飞书/钉钉通知
场景:流程跑完了(尤其是定时任务),你想知道跑了多少条、用了多久、有没有失败。
核心:在流程开始记录开始时间,结束时统计结果,通过Webhook发送到飞书/钉钉群。
操作步骤
- 流程开始时记录
开始时间。 - 定义三个累计变量:
总采集数、成功数、失败数。 - 流程结束时计算
耗时 = 当前时间 - 开始时间。 - 组装报告内容(支持Markdown格式)。
- 调用“发送HTTP请求”指令,POST到飞书/钉钉机器人。
报告内容示例
## RPA运行报告
**应用名称**:小红书笔记采集
**开始时间**:2025-12-09 14:00:00
**结束时间**:2025-12-09 14:08:23
**总耗时**:8分23秒
**采集结果**:成功120条 / 失败3条
**失败原因**:第5页网络超时(已跳过)
**日志文件**:C:\logs\run.log
**错误截图**:C:\error_screenshots\error_20251209_140523.png
飞书机器人配置
- 在飞书群组里添加“自定义机器人”,获取Webhook URL。
- 影刀里拖入“发送HTTP请求”指令,方法POST,URL填Webhook。
- Body里写JSON格式:
{
"msg_type": "text",
"content": {
"text": "报告内容"
}
}
影刀实操:
Body内容用“创建JSON”指令组装,或用Python代码拼接字符串。
五、完整日志系统模板(可直接套用)
主流程结构
A_初始化日志()
├─ 创建日志文件夹(如果不存在)
├─ 删除3天前的旧日志
└─ 创建本次运行的日志文件
B_主循环()
├─ 记录开始时间
├─ 循环翻页:
│ ├─ 输出日志("开始第N页")
│ ├─ Try:
│ │ └─ 采集当页数据()
│ ├─ Catch:
│ │ ├─ 截图保存(error_N.png)
│ │ └─ 记录失败数+1
│ └─ 输出日志("第N页完成,成功M条")
└─ 计算总耗时
C_发送报告()
└─ 组装报告 → 发送飞书/钉钉
日志写入辅助子流程
创建一个子流程公共_写日志,接收两个参数:级别(INFO/WARN/ERROR)和内容。
内部操作:
- 组装完整日志行:
时间 [级别] 内容。 - 输出到影刀输出窗口(用“输出日志”)。
- 追加写入到
C:\logs\{当天日期}.log。
这样每次只需要调用这个子流程,不用重复写“输出日志”+“写入文本”。
六、社区版用户特别提醒
- 日志文件和截图不占用RPA运行时长,放心写。
- 但频繁写入文件(每秒一次)会影响性能,建议批量写入(每10条写一次)。
- 截图文件较大,尽量控制在每张200KB以内(可以在截图指令里降低质量)。
七、常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 日志文件越来越大 | 没有清理机制 | 流程开始前删除7天前的日志 |
| 截图保存失败 | 文件夹不存在 | 先“创建文件夹” |
| 飞书收不到消息 | Webhook URL错误或网络不通 | 在浏览器访问URL测试,检查是否被拦截 |
| 日志里的时间不对 | 时区设置问题 | 用“获取当前时间”指定时区,如+8 |
| Catch里截图时又报错 | 截图指令本身可能失败 | 截图指令也包一层Try(或忽略) |
八、推荐资源
- 飞书自定义机器人文档:搜索“飞书开放平台 自定义机器人”。
- 影刀官方教程:《日志与调试》(帮助中心搜索“日志”)。
- 我的习惯:所有重要流程都保留至少7天的日志,出问题能回溯到一周前。
- 扩展阅读:系列第23篇《常见报错速查》——配合日志定位错误码。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
