流程跑到第800条数据时网络抖了一下,报错停止。重新跑一遍,前面800条又要重采。一晚上就耗在重复劳动上。
影刀RPA默认遇到异常就停,但真实采集环境里,网络波动、页面偶发加载失败、元素暂时不可见,都是常态。 给流程加上重试和断点续跑,才能让它在无人值守时真正跑完。
这篇把异常重试、断点续跑、状态记录一次讲透,每个操作精确到按钮。
异常重试的三种策略与影刀RPA实现
重试不是简单“再跑一次”,要分场景选策略。
① 立即重试:出错后立刻重试,适合偶发的元素未找到。
② 延迟重试:等待几秒再重试,适合页面加载慢、网络抖动。
③ 降级重试:换一种方式操作,比如模拟点击失败后改用JS点击。
操作路径:在Try-Catch的Catch块中,加“循环执行”指令控制重试次数。
Try块:
点击元素(目标按钮)
Catch块:
循环执行(次数3)
→ 等待时间(2000毫秒)

→ Try块:
点击元素(目标按钮)
→ Catch块:
输出日志("第 $循环索引$ 次重试失败")
→ 如果3次都失败,输出日志("重试耗尽,跳过")
这里很容易踩坑,注意看:重试循环里也要包Try-Catch,否则重试本身报错会中断整个流程。
版本差异提醒:影刀RPA社区版每天30分钟运行时长,重试会消耗时间。创业版无限制,适合长时间无人值守。魔法指令(3.0新特性)可对话式生成重试逻辑,但状态记录还是手动写更稳。
断点续跑的核心:记录已处理位置
断点续跑的关键是“记住跑到哪了”。下次启动时,从上次中断的地方继续。
记录方式一:文件记录
每处理完一条,把当前索引写入一个文本文件。
# 影刀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)]
记录方式三:数据库记录
用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学习手册》系列文章之一,内容源于实操经验的整理与分享。
