影刀RPA进阶教程:分模块异常处理与自动错误截图系统搭建
影刀RPA进阶教程:分模块异常处理与自动错误截图系统搭建
流程跑着跑着突然中断,你不知道在哪一步出错、当时页面长什么样,只能从头再来。这种痛苦做过自动化的都懂。影刀RPA的try-catch-finally机制加上自动截图,能把排错时间从小时级缩到分钟级。
这篇讲怎么给每个模块单独做异常处理,以及搭建一套自动错误截图系统。
分模块Try-Catch-Finally异常处理架构
影刀RPA的异常处理不是把整个流程包在一个Try里就完事,那样Catch块里根本不知道是哪一步出的问题。正确做法是按功能模块拆分,每个模块独立Try。
一个Try块只包一个功能模块,Catch块里记录模块名称和报错信息,这是分模块异常的核心。
操作步骤:
- 把流程按功能拆成模块:登录模块、采集模块、翻页模块、写入模块
- 每个模块外层包一个"Try-Catch-Finally"指令(在指令面板搜索"异常处理")
- Try块内放该模块的所有指令
- Catch块内拖入"输出日志"指令,日志内容写模块名+报错变量
- Finally块内放收尾操作(关闭弹窗、清理临时变量等)
# 影刀RPA中用"执行Python代码"指令实现分模块异常处理的日志格式deflog_error(module_name,error_msg,page_url):"""分模块错误日志记录"""log_entry={"时间":get_current_time(),# 影刀RPA中用"获取当前时间"指令"模块":module_name,# 如"登录模块"、"采集模块""错误":str(error_msg)[:200],# 截断过长的报错信息"页面":page_url,# 当前页面URL"状态":"异常"}# 写入日志文件withopen("C:/Desktop/rpa_error.log","a",encoding="utf-8")asf:f.write(str(log_entry)+"\n")returnlog_entry# 各模块的异常处理结构:# 登录模块 → try: 登录操作 / catch: log_error("登录模块", error, url)# 采集模块 → try: 采集操作 / catch: log_error("采集模块", error, url)# 翻页模块 → try: 翻页操作 / catch: log_error("翻页模块", error, url)影刀RPA的异常处理指令在右侧指令面板搜索"Try"就能找到,拖入后会出现三个区域:Try块、Catch块、Finally块,分别对应正常执行、异常捕获、收尾操作。
自动错误截图系统搭建
异常发生时光记录日志不够,你需要看到当时的页面状态。影刀RPA的"截取屏幕"指令可以在Catch块中自动截图,文件名带上时间戳和模块名。
操作步骤:
- 在Catch块中拖入"截取屏幕"指令
- 截图保存路径设为
C:/Desktop/rpa_screenshots/ - 文件名格式设为
{模块名}_{时间戳}.png - 截图后拖入"输出日志"指令记录截图路径
- 把截图路径和报错信息一起写入日志文件
# 影刀RPA中自动截图的命名规则# 配合"截取屏幕"指令使用importosfromdatetimeimportdatetimedefget_screenshot_filename(module_name):"""生成带模块名和时间戳的截图文件名"""timestamp=datetime.now().strftime("%Y%m%d_%H%M%S")filename=f"{module_name}_{timestamp}.png"filepath=os.path.join("C:/Desktop/rpa_screenshots",filename)# 确保目录存在os.makedirs(os.path.dirname(filepath),exist_ok=True)returnfilepath# 使用:在Catch块中# 1. 先调用此函数生成文件路径# 2. "截取屏幕"指令的保存路径填入返回的filepath# 3. "输出日志"指令记录filepath截图系统的关键:截图目录要提前创建,影刀RPA不会自动建目录,路径不存在会报错。
分模块异常处理对照表
| 模块 | Try块内容 | Catch块操作 | Finally块操作 |
|---|---|---|---|
| 登录模块 | 打开网页、输入账号密码、点登录 | 截图+记录"登录失败" | 关闭可能的弹窗 |
| 采集模块 | 获取相似元素、提取文本 | 截图+记录"采集失败"+当前URL | 清空临时变量 |
| 翻页模块 | 点击下一页、等待加载 | 截图+记录"翻页失败"+当前页码 | 重置等待计数器 |
| 写入模块 | 写入Excel、保存文件 | 记录"写入失败"+已写入行数 | 关闭Excel文件 |
错误通知推送与重试机制
异常发生后除了截图记录,还需要主动通知。影刀RPA可以通过Python发送企业微信通知,同时配合重试机制自动恢复。
操作步骤:
- 在Catch块截图和记录日志后,拖入"调用子流程"指令
- 子流程名为"发送错误通知",传入模块名和报错信息
- 子流程内用"执行Python代码"指令发送Webhook请求
- 重试机制:Catch块最后加一个计数器变量
重试次数 - 如果重试次数<3,用"返回"指令回到Try块开头
- 重试3次仍失败,用"抛出异常"指令终止流程
# 影刀RPA中用"执行Python代码"指令发送企业微信错误通知# 需要配置群机器人的Webhook URLimportrequestsimportjsondefsend_error_notification(webhook_url,module_name,error_msg,screenshot_path):"""发送错误通知到企业微信群机器人"""content=f"""【影刀RPA异常通知】 模块:{module_name}错误:{error_msg[:100]}截图:{screenshot_path}时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"""data={"msgtype":"text","text":{"content":content}}try:response=requests.post(webhook_url,json=data,timeout=10)returnresponse.status_code==200exceptExceptionase:# 通知发送失败不影响主流程returnFalse# 影刀RPA中流程参数配置:# 子流程输入参数:module_name(String), error_msg(String), screenshot_path(String)# 子流程无输出参数影刀RPA的子流程参数通过"流程参数输入输出"机制传递。在子流程编辑界面,右侧面板有"输入参数"和"输出参数"配置区域,添加参数后,调用时传入对应变量。
重试机制实现要点
| 要点 | 说明 |
|---|---|
| 重试计数器 | 每个模块单独维护一个计数器变量 |
| 重试间隔 | 第二次重试等5秒,第三次等10秒 |
| 最大重试次数 | 建议3次,超过则终止并通知 |
| 重试前清理 | Finally块中关闭弹窗、清理临时数据 |
| 日志区分 | 记录是第几次重试,便于分析 |
重试机制不是万能药,如果是XPath失效导致的错误,重试100次也没用。重试适合网络超时、页面加载慢这类偶发错误。
常见问题速查
Q:Catch块里获取不到报错信息怎么办?
A:影刀RPA的异常处理指令,Catch块中有一个默认的exception变量(在指令详情面板中可以看到变量名)。如果没看到,检查是否用的是"异常处理"指令而非手动Try逻辑。Q:截图文件太大占用空间怎么办?
A:在"截取屏幕"指令详情面板中,可以设置截图区域为"指定元素"而非全屏。另外定期用Python脚本清理7天前的截图:os.remove(filepath)。Q:异常处理导致流程变慢怎么办?
A:影刀RPA的Try-Catch本身不影响性能,变慢是因为Catch块中截图和发通知。把通知改成异步(不等待返回结果),截图区域缩小到报错元素附近。Q:社区版能用异常处理指令吗?
A:可以,异常处理是影刀RPA的基础指令,社区版和创业版都支持。但社区版每天30分钟运行时长,异常重试会消耗时间,建议测试阶段用社区版,正式跑用创业版。
推荐资源
- 影刀RPA官方文档 - 异常处理指令详细说明
- 影刀RPA学习中心 - "流程健壮性设计"系列视频
- Python requests库文档:用于企业微信Webhook通知的HTTP请求
#影刀RPA #RPA自动化 #异常处理 #报错排查 #日志系统
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。