影刀RPA进阶教程_错误截图自动采集与异常报告生成

影刀RPA进阶教程_错误截图自动采集与异常报告生成 影刀RPA进阶教程错误截图自动采集与异常报告生成流程跑崩了不可怕可怕的是不知道什么原因崩的。影刀自带的日志有时候不够直观——报错信息写了找不到元素但你不知道当时页面上到底显示的是什么。核心解法在关键节点自动截图出错时把截图环境信息打包成异常报告发给你的微信或飞书。这篇文章讲一套轻量但实用的异常监控方案。一、三层截图策略——不同目的不同截图不是所有地方都要截图截图太多影响性能太少查不出问题。层级截图时机目的频率L1 关键节点登录后、翻页前、采集完成确认流程走到了正确位置每个关键步骤L2 异常触发Catch 到错误时记录出错时页面的样子出错时| L3 定时巡检 | 每隔 30 分钟 | 长时间运行要知道还在跑 | 低频巡检 |L1 关键节点截图# 在一个完整的采集流程中埋点打开网页(https://target-site.com)等待元素出现(登录按钮,10秒)# 关键节点1登录成功后的首页截图网页(D:\日志\screenshots\{关键词}_登录后_{时间戳}.png)-截图1遍历关键词列表:输入搜索词(搜索框,当前关键词)点击搜索 等待元素出现(商品列表,5秒)# 关键节点2搜到结果后截图网页(fD:\日志\screenshots\{关键词}_搜索后_{时间戳}.png)采集商品数据()# 关键节点3采集完成截图网页(fD:\日志\screenshots\采集完成_{时间戳}.png)过一段时间回头看截图一眼就能确认流程走到了哪个位置。拼多多店群自动化上架方案L2 异常触发截图在 Try-Catch 里截图尝试:# 你的核心业务逻辑点击元素(提交按钮)捕获 所有异常 为 e:# 异常时截图时间戳当前时间格式化(yyyyMMdd_HHmmss)截图路径fD:\日志\errors\{时间戳}_异常截图.png截图网页(截图路径)# 采集环境信息当前URL获取当前页面URL()# 组装异常报告错误信息f ⚠️ 流程异常 时间{时间戳}错误{e}当前URL{当前URL}截图{截图路径}输出日志(错误信息)# 发送通知发送企业微信通知(webhook,错误信息)# 重新抛出或继续抛出异常# 如果想停止流程# 或继续 # 如果只是记录后继续L3 定时巡检长时间运行的流程比如连续采集几小时周期性截图确认还活着# 流程启动时记录开始时间开始时间当前时间 上次巡检时间当前时间# 主循环里加入巡检逻辑条件循环(True):执行采集逻辑()当前当前时间 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d42300a89e884406ad62e66a3151b9f9.png#pic_center)如果 时间差(当前,上次巡检时间)30分钟:截图网页(fD:\日志\patrol\{关键词}_巡检_{格式化时间(当前)}.png)输出日志(f[巡检] 流程正常运行中已运行{时间差(当前,开始时间)}分钟)上次巡检时间当前 如果 已到最后一页:跳出循环二、异常报告的完整结构一个好的异常报告应该让收到的人通常是你自己3 秒内理解出什么事了defbuild_error_report(error,screenshot_path,context):组装结构化的异常报告当前时间获取当前时间(%Y-%m-%d %H:%M:%S)当前URL获取当前页面URL()reportf ┌─────────────────────────────┐ │ ⚠️ 影刀流程异常报告 │ ├─────────────────────────────┤ │ 时间{当前时间}│ │ 流程{流程名称}│ │ 关键词{context}│ │ 页面URL{当前URL}│ │ 错误类型{type(error).__name__}│ │ 错误详情{str(error)[:200]}│ │ 截图文件{screenshot_path}│ └─────────────────────────────┘ # 写到本地日志文件追加文本到文件(D:\日志\异常汇总.log,report)# 如果开了通知比如工作时间小时当前时间.小时 如果8小时22:发送企业微信通知(webhook_url,report)returnreport为什么加了个工作时间判断凌晨 3 点流程崩了发企业微信把你吵醒不值得。凌晨的异常记录到日志就行第二天早上再看。三、异常统计与趋势分析单次异常不可怕但如果某个流程天天崩同一个错就需要修了。记录每次运行状态# 每次流程结束记录运行摘要defrecord_run_summary(status,error_count,duration_seconds):summary{流程:流程名称,时间:获取当前时间(%Y-%m-%d %H:%M:%S),状态:status,# 成功失败部分成功错误次数:error_count,耗时(秒):duration_seconds}# 追加到运行历史 CSV写入CSV(D:\日志\运行历史.csv,[summary])快速分析趋势攒了一周的运行记录后用 Pandas 快速看趋势importpandasaspd dfpd.read_csv(rD:\日志\运行历史.csv,encodingutf-8)# 成功率totallen(df)successlen(df[df[状态]成功])print(f本周成功率{success/total*100:.1f}%)# 平均耗时avg_durationdf[耗时(秒)].mean()print(f平均执行时间{avg_duration:.0f}秒)# 哪些天失败了failuresdf[df[状态]!成功]print(f失败记录{len(failures)}次)print(failures[[时间,错误次数]])一个简单的分析就能看出这个流程到底稳不稳定有没有在变差。四、截图文件管理——别让日志撑爆磁盘截图多了很占空间。加个自动清理逻辑TEMU店群如何管理运营importosimporttimedefauto_clean_screenshots(screenshot_dir,max_age_days7):删除超过 N 天的截图nowtime.time()max_age_secondsmax_age_days*86400deleted0forfinos.listdir(screenshot_dir):filepathos.path.join(screenshot_dir,f)文件修改时间os.path.getmtime(filepath)ifnow-文件修改时间max_age_seconds:os.remove(filepath)deleted1print(f已清理{deleted}个过期截图文件)returndeleted在流程开始或结束时调用一次就行。五、一个完整的异常监控子流程通用性强的部分抽成子流程每个项目复用子流程名称C02_异常监控模块 参数 - screenshot_dir (字符串) 截图保存目录 - webhook_url (字符串) 通知 Webhook - max_age_days (数字) 截图保留天数# C02_异常监控模块 的核心逻辑defon_error(error,context_keyword):统一的异常处理入口时间戳格式化时间(yyyyMMdd_HHmmss)截图路径f{screenshot_dir}\{时间戳}_错误.png# 1. 截图截图网页(截图路径)# 2. 写日志当前URL获取当前URL()错误日志f[{时间戳}] 关键词{context_keyword}| URL{当前URL}|{error}追加文本到文件(f{screenshot_dir}\..\error.log,错误日志)# 3. 推送通知工作时间小时当前时间.小时 如果8小时22:msgf⚠️ 流程异常\n时间{时间戳}\n关键词{context_keyword}\n错误{str(error)[:100]}发送微信通知(webhook_url,msg)# 4. 清理过期截图auto_clean_screenshots(screenshot_dir,max_age_days)六、常见坑截图路径中文乱码Windows 上路径有中文时截图指令可能会失败。建议截图目录用纯英文路径比如D:\logs\screenshots\。截图太多拖慢流程每次截图都要几百毫秒别在每个循环迭代里都截图。只在关键节点和异常时截图。截图文件命名要包含关键词否则出了 100 张图你根本不知道哪张对应哪个操作。Catch 里不要吞掉异常截图和通知只是副作用异常本身该抛还是要抛或者做好降级处理别让流程静默失败。作者林焱本文为《影刀RPA学习手册》系列文章之一内容源于实操经验的整理与分享。