影刀RPA进阶教程:异常重试与断点续跑机制设计

流程跑到第800条数据时网络抖了一下,报错停止。重新跑一遍,前面800条又要重采。一晚上就耗在重复劳动上。

影刀RPA默认遇到异常就停,但真实采集环境里,网络波动、页面偶发加载失败、元素暂时不可见,都是常态。 给流程加上重试和断点续跑,才能让它在无人值守时真正跑完。

这篇把异常重试、断点续跑、状态记录一次讲透,每个操作精确到按钮。

picture.image

异常重试的三种策略与影刀RPA实现

重试不是简单“再跑一次”,要分场景选策略。

① 立即重试:出错后立刻重试,适合偶发的元素未找到。

picture.image

② 延迟重试:等待几秒再重试,适合页面加载慢、网络抖动。

③ 降级重试:换一种方式操作,比如模拟点击失败后改用JS点击。

操作路径:在Try-Catch的Catch块中,加“循环执行”指令控制重试次数。

picture.image

Try块:
  点击元素(目标按钮)

Catch块:
  循环执行(次数3)
    → 等待时间(2000毫秒)
    
![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/13d5cfaf15da49ccb6bd377f8773d09d~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1791901532&x-signature=IASQwN9PHKGY8FMGHerPBAOq%2BVY%3D)
    → Try块:
        点击元素(目标按钮)
    → Catch块:
        输出日志("第 $循环索引$ 次重试失败")
  → 如果3次都失败,输出日志("重试耗尽,跳过")

picture.image 这里很容易踩坑,注意看:重试循环里也要包Try-Catch,否则重试本身报错会中断整个流程。

版本差异提醒:影刀RPA社区版每天30分钟运行时长,重试会消耗时间。创业版无限制,适合长时间无人值守。魔法指令(3.0新特性)可对话式生成重试逻辑,但状态记录还是手动写更稳。

断点续跑的核心:记录已处理位置

断点续跑的关键是“记住跑到哪了”。下次启动时,从上次中断的地方继续。

picture.image

记录方式一:文件记录

每处理完一条,把当前索引写入一个文本文件。

# 影刀RPA中写入断点文件的Python代码
with open(r'D:\断点\拼多多采集.txt', 'w') as f:
    f.write(str(当前索引))

记录方式二:Excel记录

把已处理的商品ID写入Excel,下次跑之前先读取,跳过已处理的。

import pandas as pd

# 读取已处理ID
df_done = pd.read_excel(r'D:\断点\已处理.xlsx')
done_ids = set(df_done['商品ID'].tolist())

# 本次待处理数据
df_all = pd.read_excel(r'D:\数据\待采集.xlsx')

# 过滤掉已处理的
df_todo = df_all[~df_all['商品ID'].isin(done_ids)]

picture.image

记录方式三:数据库记录

用SQLite存已处理ID,查询快,不怕文件损坏。

import sqlite3

conn = sqlite3.connect(r'D:\断点\progress.db')
cursor = conn.cursor()

# 建表
cursor.execute('''CREATE TABLE IF NOT EXISTS done (
    product_id TEXT PRIMARY KEY,
    done_time TEXT
)''')

# 插入已处理
cursor.execute('INSERT OR IGNORE INTO done VALUES (?, ?)', (product_id, now))
conn.commit()

推荐一个方法,实测好用:用SQLite存断点,配合 INSERT OR IGNORE 自动去重,不用手动判断。

断点续跑的流程改造:从循环开头跳过

有了断点记录,流程改造分三步。

第一步:循环开始前读取断点

# 读取已处理ID列表
done_ids = set(pd.read_excel(r'D:\断点\已处理.xlsx')['商品ID'].tolist())

第二步:循环内判断是否已处理

在循环开头加“条件分支”:

条件:$当前行$['商品ID'] in $done_ids$
满足时:继续下一次循环
不满足时:正常处理

第三步:处理完后写入断点

每处理完一条,追加到已处理Excel或SQLite。

# 追加到已处理列表
new_done = pd.DataFrame({'商品ID': [product_id]})
new_done.to_csv(r'D:\断点\已处理.csv', mode='a', header=False, index=False)

这里很容易踩坑,注意看:断点文件要定期备份。文件损坏了,断点信息丢失,又得从头跑。

重试与断点续跑的配合:完整异常处理模板

把重试和断点续跑串起来,形成完整的异常处理模板。

循环数据表格(待采集数据)
  → 条件分支(是否已处理)
      满足:继续下一次循环
      不满足:
        → Try块:
            采集单条数据
            写入结果
            写入断点
        → Catch块:
            循环执行(重试3次)
              → 等待时间(2000毫秒)
              → Try块:
                  采集单条数据
                  写入结果
                  写入断点
              → Catch块:
                  输出日志("重试失败,记录错误")
                  写入错误日志
        → Finally块:
            关闭弹窗
  → 循环结束
→ 输出日志("采集完成,成功 $成功数$ 条,失败 $失败数$ 条")

容易踩的坑:重试成功后也要写入断点。不要只在第一次成功时写,重试成功同样要记录。

版本差异提醒:影刀RPA社区版每天30分钟运行时长,断点续跑能有效利用有限时间。创业版无限制,适合大批量任务。

断点续跑的日志与监控

断点续跑需要配套日志,知道哪些成功了、哪些失败了、哪些跳过了。

# 影刀RPA中记录断点续跑日志的格式
# [2026-10-02 01:15:30] 商品ID 123456 采集成功
# [2026-10-02 01:15:35] 商品ID 123457 采集失败,已重试3次
# [2026-10-02 01:15:36] 商品ID 123458 已处理,跳过
# [2026-10-02 01:15:40] 商品ID 123459 采集成功

在Catch块中加“输出日志”,记录失败的商品ID和错误信息。流程结束后,把失败列表发到企业微信或飞书。

{
    "msgtype": "text",
    "text": {
        "content": "影刀RPA采集完成\n成功:$成功数$\n失败:$失败数$\n跳过:$跳过数$\n失败ID:$失败ID列表$"
    }
}

推荐一个方法,实测好用:失败的商品ID单独存一个文件,下次跑之前先跑失败列表,成功后再合并到主数据。

常见问题与易错速查

问题原因解决方法
重试后仍失败元素永久失效记录错误,跳过
断点文件丢失没备份定期备份断点文件
重复采集断点没写入处理完立刻写断点
重试次数太多死循环设上限3次
社区版超时30分钟限制分批次或升级创业版

特别提醒:断点续跑不适合所有场景。数据量小、跑得快的流程,直接重跑更简单。数据量大、跑得慢的,才值得做断点。

推荐资源

  • 影刀RPA官方文档:搜索“Try指令”和“循环执行”
  • 影刀学院B站账号:有异常重试实战视频
  • SQLite教程:www.runoob.com/sqlite

一个实测好用的习惯:先用小数据量测试重试和断点逻辑,故意制造网络错误,看流程能不能自动恢复。确认后再跑全量。


#影刀RPA #RPA自动化 #异常重试 #断点续跑 #异常处理 #流程设计

作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论