影刀RPA进阶教程:流程日志系统的搭建——关键节点日志、错误截图与运行报告
流程跑完打开Excel发现数据只有一半,你不知道是第几页崩的、什么原因崩的、崩溃时页面长什么样。
日志系统就是解决这个问题的。它回答三个问题:什么时候崩的?在哪崩的?崩的时候长什么样?
一、日志系统的三个层次
| 层次 | 作用 | 实现方式 |
|---|---|---|
| 关键节点日志 | 记录流程运行到哪一步、关键变量值 | "输出日志"指令 |
| 错误截图 | 异常发生时自动保存页面截图 | Catch块 + "截图保存"指令 |
| 运行报告 | 流程结束后输出一份汇总 | Python代码指令生成报告 |
三个层次叠加,线上排查从"盲猜"变成"看一眼日志就知道问题在哪"。
二、关键节点日志
在哪里加日志
拼多多店群自动化上架方案
不要每条指令都加,只在"里程碑"位置加:
# === 日志插入点 ===输出日志("========== 流程开始 ==========")输出日志("搜索关键词:连衣裙")输出日志("目标页数:10页")输出日志("输出路径:D:\数据.xlsx")# 每个子流程前后输出日志("→ 开始搜索商品...")调用子流程("B_搜索商品")输出日志("← 搜索完成")输出日志("→ 开始采集列表...")调用子流程("C_列表采集")输出日志("← 采集完成,共采集"+str(总条数)+"条")# 翻页时记录输出日志("翻到第"+str(当前页)+"页,当前页采集"+str(当前页条数)+"条")# 关键判断判断元素是否存在("下一页按钮")输出日志("下一页是否存在:"+str(元素是否存在))# 异常捕获尝试捕获(Try):采集操作()捕获异常(Catch):输出日志("!!! 错误:"+错误信息)输出日志("!!! 发生在第"+str(当前页)+"页,第"+str(当前序号)+"条")输出日志("========== 流程结束 ==========")三、日志的格式规范
日志不能随便写,要保证事后看能快速定位。
推荐格式:
[时间] [级别] 模块名 - 具体信息在影刀里用这种方式实现:
# 用当前时间()函数获取时间戳输出日志("["+当前时间()+"] [INFO] 采集模块 - 第"+str(页码)+"页采集完成,共"+str(条数)+"条")# 错误日志输出日志("["+当前时间()+"] [ERROR] 采集模块 - 第"+str(页码)+"页:找不到商品列表元素")实际运行时日志输出样例:
[2026-06-09 14:30:01] [INFO] 主流程 - 流程启动,搜索词:连衣裙 [2026-06-09 14:30:03] [INFO] 搜索模块 - 搜索完成 [2026-06-09 14:30:05] [INFO] 采集模块 - 第1页采集完成,共20条 [2026-06-09 14:30:07] [INFO] 采集模块 - 第2页采集完成,共20条 [2026-06-09 14:30:09] [ERROR] 采集模块 - 第3页找不到下一页按钮,可能是最后一页 [2026-06-09 14:30:10] [INFO] 清洗模块 - 清洗完成,原始40条→有效38条 [2026-06-09 14:30:11] [INFO] 主流程 - 流程结束,成功采集38条数据一眼就看出:第3页翻页停了,可能是到了最后一页,不是bug。
四、错误截图——崩溃时留下现场
Catch块里除了输出日志,再加一步截图。这样排查时不用复现现场,看截图就知道页面当时长什么样。
# === 带截图的异常处理 ===尝试捕获(Try):获取相似元素列表("商品卡片列表")->卡片列表 遍历采集...捕获异常(Catch 任意异常):时间戳=当前时间()截图文件名="D:\\日志\\异常截图_"+时间戳+".png"输出日志("[ERROR] 捕获异常:"+错误信息)截图保存(截图文件名)# 继续还是停止?如果 是致命错误:输出日志("[FATAL] 流程终止")终止流程 否则:输出日志("[WARN] 跳过当前页,继续下一页")截图保存到固定的日志目录,按日期分类:
D:\影刀日志\ ├── 2026-06-09\ │ ├── 正常运行.log │ ├── 异常截图_143005_第3页.png │ └── 异常截图_150120_验证码.png ├── 2026-06-10\ ...TEMU店群如何管理运营?
五、运行报告——流程结束后的汇总
最后一步,用Python代码汇总整个流程的运行结果。
# === 运行报告(Python代码指令) ===importdatetime now=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")报告=f""" ======================================== 影刀RPA流程运行报告 ======================================== 流程名称:拼多多商品搜索采集 执行时间:{now}---------------------------------------- 搜索关键词:连衣裙 目标页数:10页 ---------------------------------------- 实际采集页数:{总页数}页 采集商品数:{总条数}条 清洗后有效数:{有效条数}条 异常次数:{异常次数}次 ---------------------------------------- 异常详情:{异常详情文本}======================================== """# 写入日志文件importos log_dir=r"D:\影刀日志"os.makedirs(log_dir,exist_ok=True)log_file=os.path.join(log_dir,f"运行报告_{now.replace(':','-')}.txt")withopen(log_file,'w',encoding='utf-8')asf:f.write(报告)print(报告)六、日志不要存太多——自动清理
日志文件不清理的话,三个月能堆几个G。
在流程末尾加一步自动清理:
# 清理7天前的日志importosimporttime log_dir=r"D:\影刀日志"now=time.time()seven_days_ago=now-7*24*3600forfolderinos.listdir(log_dir):folder_path=os.path.join(log_dir,folder)ifos.path.isdir(folder_path):folder_time=os.path.getmtime(folder_path)iffolder_time<seven_days_ago:importshutil shutil.rmtree(folder_path)print(f"已清理过期日志:{folder}")七、速查:日志系统要覆盖的关键点
| 位置 | 记录内容 | 指令 |
|---|---|---|
| 流程启动 | 参数(搜索词、页数、输出路径) | 输出日志 |
| 每个子流程前后 | 进入/退出 + 耗时或结果条数 | 输出日志 |
| 每次翻页 | 页码、本页条数 | 输出日志 |
| 每次条件判断 | 判断结果(True/False) | 输出日志 |
| Catch块 | 错误信息、页码、序号 | 输出日志 + 截图保存 |
| 流程结束 | 汇总报告 | Python代码 |
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。