欢迎光临
我们一直在努力

影刀RPA避坑指南_流程长期运行的稳定性保障

影刀RPA避坑指南:流程长期运行的稳定性保障——让流程挂机7天不出事

流程写出来,跑一次正常。跑10次也正常。

但挂机跑7天、每天自动跑、连续跑一个月,才是真正的考验。

在这里插入图片描述

这篇文章来自长期运维经验——那些第一次写流程绝对不会想到、但上线一定遇到的问题。


一、内存泄漏:最隐蔽的杀手

现象:流程跑了2小时没问题,跑6小时后电脑越来越卡,最终浏览器崩溃。

在这里插入图片描述

原因:每次循环创建了对象却没有释放。

# 有内存泄漏风险的写法
条件循环(True):
截图当前页面() # ← 截图对象存在内存里,循环N次 = N张截图在内存里
保存截图("screenshot.png") # 存到磁盘了,但内存里还在

# 修复:控制截图频率,或每次覆盖
条件循环(True):
# 只在关键节点截图
如果 需要截图:
截图当前页面() –> 截图1
保存截图(截图1, "checkpoint.png")

# 定期重启浏览器(释放浏览器内存)
如果 循环次数 % 500 == 0:
输出日志("重启浏览器释放内存")
关闭当前浏览器()
重新启动浏览器()
重新登录()

每跑500~1000个操作后重启一次浏览器,是最简单最有效的内存泄漏防护。

店群矩阵自动化突破运营极限!

在这里插入图片描述


二、定时重启:不要相信"永久在线"

# 流程分段执行,段间重启

# 早班:8:00~12:00
如果 当前时间 在 8:00~12:00:
执行早班任务()
# 执行完主动退出,等定时任务下次触发

# 午班:13:00~18:00
如果 当前时间 在 13:00~18:00:
执行午班任务()

# 夜班:20:00~23:00
如果 当前时间 在 20:00~23:00:
执行夜班任务()

不要写一个无限循环的流程7×24小时跑。分段定时触发,每段之间浏览器重新初始化。


在这里插入图片描述

三、断网重连

网络不会一直稳定。WiFi偶尔波动、路由器定期重启、宽带运营商断线——这些都是正常现象。

def 网络操作(操作函数, 最大重试=3):
重试 = 0
while 重试 < 最大重试:
Try:
结果 = 操作函数()
return 结果
Catch 网络异常:
重试 += 1
输出日志(f"网络异常,第{重试}次重试")
固定等待(10秒 * 重试) # 每次重试等更久

raise Exception("网络重试耗尽")

所有涉及网络的操作(打开网页、发HTTP请求、API调用)都应该有重试逻辑。

在这里插入图片描述


四、磁盘空间

流程跑久了会生成大量文件——日志、截图、临时Excel、Cookie文件…

# 定时清理
def 清理磁盘():
日志目录 = "D:\\\\日志\\\\"

# 删除7天前的日志
遍历文件夹(日志目录, "*.log") –> 文件列表

![在这里插入图片描述](https://i–blog.csdnimg.cn/direct/476fffd5b7884756959a55aa1f86199c.png#pic_center)

for 文件 in 文件列表:
修改时间 = 获取文件修改时间(文件)
if (当前时间 – 修改时间).days > 7:
删除文件(文件)
输出日志(f"已清理: {获取文件名(文件)}")

磁盘满了会直接导致流程无法写文件,静默失败。


五、元素定位漂移

同一个XPath,昨天还能定位到的元素,今天突然找不到了。

原因:网站发布更新,class名称变了、页面布局改了、A/B测试分配了不同的版本。

在这里插入图片描述

# 多策略定位
def 智能定位(元素名, 备选方案列表):
"""用一个定位策略找不到,换下一个"""
for 策略 in 备选方案列表:
判断元素是否存在(策略) –> 找到了
if 找到了:
return 策略

输出日志(f"所有定位策略都失败了: {元素名}")
截图当前页面() # 存下证据

[video(video–XbAfxhWa–1781240994026)(type–csdn)(url–https://live.csdn.net/v/embed/524992)(image–https://v–blog.csdnimg.cn/asset/b59aed2f01d4fe8583467562aaf4dcfd/cover/Cover0.jpg)(title–temu店群自动化报活动案例)]

return None

# 使用
定位 = 智能定位("价格", [
"//span[@class='price-new']", # 方案A
"//span[contains(@class,'price')]", # 方案B
"//em[contains(text(),'¥')]" # 方案C
])

重要节点用多策略定位,降级处理,而不是直接报错退出。


六、时间变了

在这里插入图片描述

凌晨跑流程,发现有些操作行为异常。排查下来:服务器时间是UTC+0,你的系统是UTC+8。

# 统一处理时间
获取当前时间() → 使用系统本地时间(影刀默认)

# 如果需要精确的时间差,统一为时间戳
import time
timestamp = int(time.time()) # Unix时间戳,全球唯一

还有夏令时问题。中国不用夏令时,但如果你的流程涉及海外平台,注意有些国家会切换。


在这里插入图片描述

七、稳定性的自我检测

# 健康检查子流程
def 健康检查():
检查清单 = {
"磁盘剩余空间": 检查磁盘空间 > 1GB,
"网络连通": 能否访问目标网站,
"浏览器实例": 浏览器是否响应,
"登录态": 检测登录状态,
"Python环境": 能否import关键库
}

for 项目, 状态 in 检查清单:
if not 状态:
调用子流程("C_发送通知", {"type": "error", "content": f"健康检查失败: {项目}"})
return False

return True

# 主流程开头
if not 健康检查():
退出流程()


作者:林焱

在这里插入图片描述

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

赞(0)
未经允许不得转载:171主机测评 » 影刀RPA避坑指南_流程长期运行的稳定性保障
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址