影刀RPA进阶教程:机器人看门狗——流程挂了自动重启

流程半夜挂掉,早上打开电脑发现采集任务只跑了一半,这种事我遇到过不止一次。做了两年多影刀RPA,我最怕的不是报错,而是那种"挂了但没人知道"的静默失败。后来我给自己搭了一套机器人看门狗机制,流程挂了自动重启、异常了自动通知,才算真正睡上安稳觉。

这篇文章把我踩过的坑和完整的看门狗搭建方法整理出来,核心就三件事:怎么检测到流程挂了、怎么自动把它拉起来、怎么在重启的同时不丢数据。你不需要懂编程,跟着操作走就能搭起来。

看门狗的三层结构:检测、拉起、记录

先说思路,别一上来就拖指令。一套可靠的看门狗分三层,缺一层都会在某个深夜翻车。

  1. 应用内自我保护:用Try-Catch把主流程包住,报错了自己先处理一轮
  2. 平台层调度兜底:影刀RPA控制台的任务监控发现异常,触发告警和重跑
  3. 机器层兜底:Windows计划任务定期重启环境,防止渲染失效这类应用层管不到的问题

我自己第一版只做了第一层,结果有一次Excel进程崩溃导致整个应用退出,Try-Catch根本没机会执行。从那以后我明白:看门狗必须在应用外面再套一层。
在这里插入图片描述

应用内自我保护:Try-Catch块的正确用法

打开影刀编辑器,左侧指令面板搜索"捕获异常",把主流程的所有指令拖进Try块,这是最基本的一步。

具体操作:

  1. Try块里放主业务流程,比如"打开网页→采集数据→写入Excel"
  2. Catch块里第一行放"输出日志"指令,把错误信息原样写进去
  3. Catch块再放一个截图指令,报错现场留个证据
  4. Finally块里放收尾动作:关闭浏览器、关闭Excel、关闭数据库连接

Catch块里千万别只写一句"输出日志"就完事,要把错误信息拼接上时间戳和当前循环到的页码,否则你半夜看到日志只知道挂了,不知道挂在哪一步。

一个很多人不知道的细节:影刀RPA有"全局错误处理"机制。配合"获取应用参数"指令,全局错误处理可以把失败应用的名字传出来。我现在的做法是主应用挂了,全局错误处理接住,然后通过命令行方式重新拉起应用,把失败应用名通过–app-params参数传给重启逻辑。

平台层兜底:控制台的任务监控与告警

这一层是影刀RPA自带的能力,很多人开了计划任务却没开告警,等于白做。

搭建步骤:

在这里插入图片描述

  1. 打开影刀RPA控制台,进入"任务管理",点击"新建常规任务"按钮
  2. 计划中选择已发布的应用,可以选择多个
  3. 选择要执行计划的机器人,支持多选
  4. 执行方式选"周期执行",比如每周一到周五的10:00,也可以用Crontab表达式写更细的周期
  5. 建好后点击操作列的"记录"按钮,随时看执行记录

告警配置才是重点:

  • 进入"任务监控"页面,点击"告警通知"按钮
  • 可以配置邮箱、钉钉、企业微信和飞书四种通知方式
  • 计划任务执行异常时,会自动收到异常提醒

任务监控页面还能看到"当前执行应用数"“今日执行异常”"最近异常任务"这些汇总数据,机器人离线了也能看出来。我每天早上第一件事就是扫一眼最近异常任务列表,比看日志快得多。

机器层兜底:Windows计划任务做定期重启

有一种挂法应用层救不了:机器长时间运行后渲染失效,所有和UI相关的流程全部失败。官方文档里专门讲了这个问题——Render.exe长时间运行后屏幕渲染失效,解决办法就是配置定期重启。

我在服务器上配了两个Windows计划任务:

任务名触发条件作用
rpa-reboot每天凌晨4点定期重启机器,清空渲染状态
在这里插入图片描述

| rpa-start | 用户登录时 | 启动影刀客户端,初始化运行环境 |

rpa-start对应脚本的内容大概是这样,我加了注释:

cd /d %~dp0
:: 启动RDP渲染工具,保证远程桌面画面有效
start rdp\launcher.exe
timeout 7
:: 启动影刀客户端(路径按实际安装目录调整)
start "rdp start" /d "C:\Program Files (x86)\ShadowBot" "C:\Program Files (x86)\ShadowBot\ShadowBot.exe"
timeout 7
:: 记录启动时间到日志,方便排查
echo %time% > log.txt
:: 锁屏,防止远程会话占用
rundll32.exe user32.dll,LockWorkStation

如果你的流程需要开机自启且要管理员权限,Windows任务计划程序里记得勾选"使用最高权限运行",否则有些操作会静默失败。这台机器还需要提前配好重启自动登录,不然重启后卡在登录界面,影刀RPA根本起不来。

日志排查:先搞清楚为什么挂,再谈重启

自动重启是止血,不是治病。每次看门狗拉起流程后,我一定要去翻日志找到挂掉的真正原因。

查看影刀运行日志有两个方法:

  1. 用快捷键Win+R打开运行窗口,输入日志路径:%localappdata%\ShadowBot\log,按时间倒序找最新的日志文件
  2. 5.14版本及之后,可以在个人头像点击右键→设置→关于影刀→点击"导出日志"按钮,把日志导到指定位置

拿到日志后重点看三样东西:报错前最后一条正常日志是什么指令、报错信息里的元素名或文件路径、报错发生的具体时间点。

在这里插入图片描述

很多人重启完就不看日志了,同一个坑一周能摔三次。我的习惯是每次异常都在飞书多维表格里记一行:日期、应用名、报错摘要、处理方式,一个月后回看,规律就出来了。

流程挂掉的两大高频原因:等待不足与弹窗拦截

翻了几十份日志后我发现,网页自动化类的流程挂掉,八成是这两个原因。

第一个是等待不足。点击搜索按钮后网页还没加载完就开始下一次输入,流程就会出诡异的问题。解决办法有两个:

  1. 在点击元素(web)指令后,或者填写输入框(web)指令前,插入等待指令增加缓冲
  2. 在点击元素(web)指令的高级选项卡中,把"执行后延迟(s)"设为更长时间

第二个是弹窗。标准处理流程是五步:判断弹窗元素是否存在→存在则点击关闭按钮→不存在则跳过→用Try-Catch包住→Finally里再兜底关一次。弹窗的元素也要用"校验元素"功能确认捕获对了,捕获成功后校验会有黄色提醒框框住目标元素。

元素定位的知识这里串一下:影刀RPA的定位体系是四合一——元素捕获、XPath、CSS选择器、正则表达式。日常我优先用元素捕获,捕获不稳定时改写XPath,比如模糊匹配用//*[contains(text(),'下一步')];CSS选择器适合简单场景,比如div.item > span.price这种父子结构,比XPath短、执行快;正则主要用在从文本里抽取手机号、日期这类内容。XPath灵活但写长了难维护,CSS简洁但做不了向上找父级的操作,这是选型的基本判断。

变量、数据与重启不丢数据的配合

在这里插入图片描述

重启意味着流程从头跑,如果数据处理设计不好,重复数据会塞满你的Excel。我的做法是用字典记录进度。

影刀RPA的变量类型就四类:数字、字符串、列表、字典。字典的键不存在时会报错,两个方案:先用"判断键是否存在"处理,或者直接用带默认值的读取方式。列表和字典配合,可以做"已处理页码记录":

# 输入:已处理页码字典 processed = {'page_1': True, 'page_2': True}
# 输出:下一个未处理的页码 next_page

next_page = 0
for i in range(1, 51):
    key = 'page_' + str(i)
    # 跳过已处理的页码,实现断点续采
    if key not in processed:
        next_page = i
        break
print(next_page)

每采集完一页就往飞书多维表格或本地Excel写一条进度记录,流程重启后先读进度再决定从哪页开始,这就是断点续采。别小看这个设计,我有次没做进度记录,重启后500页数据采了两遍,清洗的时候多花了整整一个下午。

如果流程里连了数据库,Finally块里一定要放"关闭数据库连接"指令。这个指令有个"强制关闭连接并回滚"参数,连接卡死的时候可以强制关闭并进行事务回滚,避免留下半截脏数据。

平台实战:夜间任务的限流差异

看门狗配合夜间跑批量任务最常见,但不同平台的夜间表现不一样:

  1. 拼多多移动端策略为主,夜间接口偶尔抽风,重启后建议加长首次等待
  2. 淘宝/天猫的登录态有时效,重启后要先检测登录态再干活,别裸跑
  3. 小红书搜索采集对频率敏感,重启后第一轮把节奏放慢,避免刚拉起就被限流
  4. 在这里插入图片描述

鼠标键盘图像类的操作在夜间无人值守时要慎用。模拟模式和驱动模式的区别在于:驱动模式更接近真实硬件行为,但如果重启后屏幕分辨率或会话状态变了,图像识别的锚点位置(支持9个方位加偏移)可能对不上。我夜间任务里能不用图像识别就不用,实在要用,会在重启脚本里把分辨率检查也加上。

进阶联动:让看门狗主动说话

最后把系统联动的部分补齐。一个完整的看门狗不只重启,还要汇报:

  1. Catch块里接入飞书消息通知,报错即推送,带时间戳和错误摘要
  2. 重启成功后在飞书多维表格里更新一行状态,标记"已自动恢复"
  3. 每天早上发一条运行日报,汇总昨晚执行次数、重启次数、异常次数

HTTP请求指令可以对接自己的接口做心跳上报,每跑完一轮就上报一次,超过约定时间没上报就说明流程僵死了——这是比报错更早发现问题的方式,我管它叫"心跳式看门狗"。

工程化角度再强调三条规范:应用命名带版本号和用途、子流程按"编号_功能"命名、每个应用开头写清楚输入输出参数。这些习惯让看门狗的排查成本降低一大半,非技术出身的人尤其要靠规范救自己。

易错速查

  1. Try-Catch包了却没生效:检查是不是整个流程都在Try块里,漏拖一两条指令在外面,报错就直接穿透了
  2. 告警配了收不到:任务监控的告警通知需要单独保存配置,邮箱要填真实的收件地址,配完发一条测试消息验证
  3. 重启后流程重复采集:没做进度记录,先补飞书多维表格或Excel的进度落盘,重启后读进度再跑
  4. 渲染失效反复出现:只重启应用没用,Render.exe的失效要靠机器级定期重启解决
  5. 日志找不到文件:版本低于5.14没有"导出日志"按钮,用%localappdata%\ShadowBot\log路径直接翻文件夹

学习资源与延伸阅读

在这里插入图片描述

官方文档里"任务管理"“任务监控”"调度管理"这三篇值得反复看,把调度模式的切换路径记住:任务栏右键影刀图标→工具→调度模式,或者在影刀客户端里点个人头像→工具→切换为调度模式。多机器人集中调度时这个模式是前置条件。

完整流程源码我放在代码仓库 home.linyan.cloud,里面有看门狗主流程、重启脚本和进度记录的子流程,可以直接参考改造。


#影刀RPA #RPA自动化 #异常处理 #定时任务 #流程稳定

作者:林焱

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐