影刀RPA新手教程:运行日志三层记录法——出问题3分钟定位
流程半夜挂了,第二天打开一看只有一句"执行异常",具体挂在哪一步、数据长什么样、当时页面是什么状态,全都不知道——这种抓瞎的感觉,我头一年至少经历了二十回。后来我给影刀RPA流程加了三层日志记录,现在出问题基本3分钟内定位到具体指令和数据值,这篇把这套方法完整教给你。
先给新手吃颗定心丸:日志不是什么高深东西,就是在流程的关键位置插"打卡记录"。影刀RPA本身已经给了你三层现成的记录体系——流程内的输出日志、客户端本地日志、控制台执行记录,你缺的只是知道每层看什么、怎么组合着用。
三层日志各管一段:第一层管"流程自己说了什么",第二层管"客户端底层发生了什么",第三层管"哪次运行出了问题"。下面从第一层开始讲。
第一层:流程内「输出日志」指令的三种级别
输出日志指令在指令面板搜"日志"就能找到,往流程里一拖就能用。我把它按用途分成三级,命名上直接区分:
| 级别 | 记什么 | 例子 |
|---|---|---|
| 节点级 | 进入哪个大模块 | 【采集】开始处理第3页 |
| 数据级 | 关键变量的值 | 抓到价格:59.9,共120条 |
| 异常级 | 报错信息和现场 | 等待超时,元素:下一页按钮 |
节点级日志放在每个子流程入口和出口,数据级放在循环体内和写入动作前,异常级放在Try-Catch的Catch块里。Catch块里固定做两件事:「错误截图」加「输出日志」,截图存错误现场,日志记下报错文本和当时的变量值,第二天打开就有完整现场。
有个容易忽略的细节:输出日志有字符串长度限制,官方FAQ写明最大可打印2万个字符左右。别把整张表格一口气丢进日志,循环里逐行打关键列就够了,我打印整表超长那次,日志被截断反而误导了排查方向。
日志格式我统一用"【模块】动作+关键值",比如"【写入】已写入第15行,总行数120"。格式统一的好处是控制台执行记录里扫一眼就能看清卡在哪一步。
带异常捕获的日志骨架:新手直接抄
Try-Catch-Finally是第一层日志的骨架,新手照这个结构搭流程:
# 输入:无;输出:日志文件 night_run.log(追加写)# 结构:Try主流程 / Catch记录现场 / Finally收尾,可直接套用# —— Try块(主流程)——# 1. 输出日志:【启动】开始执行采集流程# 2. 打开网页指令,URL参数填目标地址,打开方式选"新建标签页"# 3. 等待元素出现,超时30秒,元素:商品列表容器# 4. 获取相似元素列表,存入变量 price_list# 5. 输出日志:【采集】共获取条数:len(price_list)# 6. 写入行数据到表格,循环逐行追加写入Excel# —— Catch块(异常现场)——# 1. 错误截图指令,保存到 D:\error_shots\,文件名带时间戳# 2. 输出日志:【异常】+ 捕获到的报错文本 + 当前行号变量# —— Finally块(收尾)——# 1. 关闭浏览器# 2. 关闭Excel# 3. 输出日志:【结束】流程退出,无论成败Python块里也可以自己补一份落盘日志,和控制台日志双保险:
# 输入:step_name(步骤名)、info(附加信息)# 输出:D:\night_run.log 追加一行带时间戳的记录fromdatetimeimportdatetimedeflog_step(step_name,info=''):now=datetime.now().strftime('%m-%d %H:%M:%S')withopen(r'D:\night_run.log','a',encoding='utf-8')asf:f.write(f'[{now}][{step_name}]{info}\n')log_step('采集','第3页完成,累计360条')第二层:客户端本地日志与导出日志按钮
流程内日志解决"我的流程说了什么",客户端本地日志解决"客户端底层发生了什么"——启动异常、插件失联、登录问题这类流程外的原因,要看第二层。
官方给的查看方法两条路:
- 快捷键 Win+R 打开运行窗口,输入路径 %localappdata%\ShadowBot\log,回车打开日志文件夹,按时间倒序看最新的日志文件;资源管理器地址栏直接粘贴这个路径也行
- 5.14版本及之后,在「个人头像右键 → 设置 → 关于影刀 → 导出日志」按钮把日志打包导出到自定义位置
我的习惯是夜间任务挂了先看第三层执行记录确认哪次运行出的事,再开本地日志翻对应时间点,最后回到流程内日志看具体步骤。三层从粗到细,路径固定,练两次就是肌肉记忆。
第三层:控制台执行记录与运行详情
定时任务跑的每一次都有底账。控制台进「任务管理 → 执行记录」,能看到任务执行的详情;点进运行详情,可以结束执行中的计划,对执行出异常的计划查看原因、重新运行异常的应用。所有执行记录统一放在执行记录菜单里,包括API执行记录。
任务监控页还有四个汇总数字:当前执行应用数、等待执行应用数、今日完成应用数、今日执行异常数。每天早上扫一眼"今日执行异常"是否为零,不为零就点进执行记录走一遍三层定位。告警通知也在这个页面配置,邮箱、钉钉、企业微信、飞书都可以接,异常自动推人,不用等你自己发现。
元素定位与等待:让日志里的报错"值得看"
日志定位的前提是报错信息本身有意义。定位不稳定的流程,日志里天天是"找不到元素",噪声太大反而掩盖真问题。所以第一层日志之前先把定位做稳:元素捕获点「捕获元素」按钮,浏览器出现橙色边框点击目标;结构不稳定就用XPath写到属性级,往下找用CSS选择器,往上找、按文本找用XPath。
# 场景:日志报"等待超时"时,先核对这些定位是否还成立 # 唯一id定位,最优先 //*[@id="goods-list"] # class属性定位 //div[@class="item-price"] # 文本模糊匹配,应对文案微调 //*[contains(text(),'立即购买')] # 参照物定位:借"销量"文本找旁边的数字 //*[contains(text(),'销量')]/following-sibling::*[1] # CSS等价写法:父子层级用 > 号更短 #goods-list > .item-price等待策略三种——固定等待、超时等待、智能等待,新手统一用「等待元素出现」设30秒超时,超时本身就是一条有价值的异常日志。页面总页数不确定时,用「判断元素是否存在」检查下一页按钮class里的disabled,配合While条件循环退出。
变量、循环与数据处理的日志埋点习惯
变量类型决定你日志里能打什么:数字直接拼进文本,字符串用索引截关键段,列表打长度别打全部,字典先判断键存在再取值,JSON解析后打关键字段。循环体里的埋点别每轮都打,按"每10轮打一次进度"节流,既看得见进展又不刷屏。
数据处理的三个环节各有埋点位置:Excel读完后打行数、清洗后打前后差值、数据库写入后打影响行数。建立连接→执行SQL→关闭连接三步,哪一步失败日志就打哪一步的名字,别笼统写"数据库出错"。
埋点时机在开发阶段就要定,跑通之后再补埋点等于重写一遍流程。我的做法是搭主流程骨架时就把三类日志位的空指令拖好,填充业务逻辑时顺手填日志参数,开发完日志也齐了,一举两得。
| 环节 | 埋点指令 | 打什么 |
|---|---|---|
| 读取完成 | 输出日志 | 读取行数与文件路径 |
| 清洗完成 | 输出日志 | 清洗前后条数对比 |
| 写入完成 | 输出日志 | 写入行数与目标表名 |
| 异常发生 | 错误截图 | 截图加报错文本 |
鼠标键盘图像与平台实战的日志要点
鼠标键盘类指令容易"点了没反应",日志里加一条"已发送点击:按钮名",配合截图能分清是指令没执行还是执行了没生效。图像识别指令在日志里记下匹配度,识别率忽高忽低的场景就该换定位方案了。平台实战里,拼多多、淘宝、小红书各平台的反爬表现不同,日志里记下每轮的采集间隔,限流排查时这就是关键证据。
进阶的HTTP请求和Python协同,日志打请求状态码和返回摘要;系统联动的飞书消息发送成功与否也要落一条日志,通知通道本身也可能是故障点。
断点调试与变量面板:日志之外的两个定位利器
日志是事后看,断点是现场看。流程开发阶段右键任意指令可以添加断点,点「运行」流程会停在断点上,这时配合单步执行一行行往下走,右侧变量面板里所有变量的实时值一览无余。数据不对这类问题,日志只能告诉你"第15行写进去的值不对",断点能让你亲眼看到变量是在哪一步变成脏数据的。
变量面板还有个新手不知道的用法:循环断点时盯列表变量的长度和首尾元素,采集丢数据多半是相似元素列表长度和预期不符,在断点处一看便知。调试完记得删断点,带着断点的流程挂上定时任务,夜里跑到断点直接停住,后面排队任务全部超窗——这个亏我吃过一次,从此发布前先全局检查断点。
调试三件套的分工:输出日志管常态监控,断点加单步管现场还原,变量面板管数据核对。三个都用上,就没有定位不了的问题。
平台实战:三平台采集流程的日志埋点差异
平台不同,日志侧重点不同。拼多多页面结构和价格符号变化多,数据级日志里我固定打印清洗前后的价格原始值,出问题一眼看出是采集错了还是清洗错了。淘宝有风控,每轮采集间隔和是否触发验证码写进日志,限流排查时时间线一目了然。小红书懒加载列表,日志打印每轮滚动后相似元素列表的长度,长度不再增长就是加载完了,这个数字也是判断翻页逻辑是否正常的依据。
鼠标键盘类操作的日志要点是"动作+目标",比如"驱动模式点击:发布按钮";图像识别的日志打印匹配情况,匹配忽高忽低就该换元素定位方案。日志埋点不是越多越好,按平台风险点埋,噪声少信号强。
日志排查易错速查
| 序号 | 现象 | 原因与解法 |
|---|---|---|
| 1 | 日志内容被截断 | 超出2万字符上限,改逐行打关键列 |
| 2 | 只有"执行异常"没细节 | Catch块缺「错误截图」和「输出日志」 |
| 3 | 本地日志找不到 | Win+R输入 %localappdata%\ShadowBot\log |
| 4 | 日志刷屏找不到重点 | 循环体按每10轮打一次,级别分开 |
| 5 | 定时任务查不到记录 | 应用未发版或机器人离线,先查第三层 |
延伸阅读与源码参考
三层日志的埋点模板流程我放在代码仓库 home.linyan.cloud,可以直接参考改造,把模块名换成你的业务模块就能用。搭配官方FAQ《如何查看影刀的运行日志》《打印日志是否有字符串长度限制》一起看,参数和路径以文档为准。
#影刀RPA #RPA自动化 #运行日志 #调试技巧 #报错排查
作者:林焱