同一个对账流程,我在影刀、UiPath、Power Automate 各做了一遍:RPA 的钱其实不在开发,在维护
一、先说这个活到底长什么样,不然后面那些坑你理解不了
去年 11 月接的一个财务对账项目。每月 5 号,用友 U8 导出应收明细,大约 3.8 万行、11 列,字段是客户编码、户名、单据日期、金额、币种、业务员那一套;另外要从招行企业网银和工行企业网银各下一份流水,招行大概 6000 多条,工行 1.2 万条。财务两个姑娘按「金额完全相等 + 日期前后浮动 3 天 + 对方户名模糊匹配」去找未达账项,手工做一次 2.5 人天,还经常因为户名里多个空格、多个「有限公司」少个「有限」对错。
我一开始的判断很天真:不就是下载文件、读表、比对、把结果写回 Excel 嘛。第一版三天做出来了,跑了四个月,崩了 7 次。我统计了一下,开发花了 18 小时,后面修它花了 26 小时。这个比例后来跟几个同行聊,几乎没人例外——大家在报价的时候都只算开发工时,没人算维护,而维护才是那个无底洞。这里面有个反常识的点:流程越简单、越依赖第三方页面,维护成本占比越高,因为你没有任何控制权,对方改一个按钮的 id 你就得重新拾一遍元素。
二、三个平台各做一遍,差异比宣传页上大得多
为了给客户选型,我把同一个流程在影刀、UiPath、Power Automate Desktop 里各实现了一遍,下面是我自己记下来的实际数据(价格是当时的公开报价,具体你还得去官网核):
| 维度 | 影刀 | UiPath | Power Automate Desktop |
|---|---|---|---|
| 我上手耗时 | 约半天 | 约 2 天 | 约 1 天 |
| 网银流水下载(含 U 盾确认) | 图像识别点按钮,20 次连跑成功率 18/20 | 同样靠图像,但能用锚点 + Computer Vision 组合,19/20 | 对国产网银控件和 U 盾弹窗支持一般,16/20 |
| 10 万行 Excel 读取 | 内置「读取 Excel」8~14 秒 | Read Range 差不多 | Excel 连接器 20 秒以上,大表建议走 Office Script |
| 调试体验 | 变量面板直观,中文报错 | 断点、日志最全,但报错偏工程化 | 云端调试要排队,本地尚可 |
| 授权模式 | 个人版免费,企业版按机器人台数年付 | 社区版免费,企业版 unattended 单台一年千余美元级别 | Premium 约 15 美元/用户/月,托管 RPA 另算 |
| 中文社区 | 强 | 弱 | 中 |
那个「U 盾确认」是全场最难的地方,也是所有选型文章都不提的地方。网银的安全控件弹窗,你用 UIA、用 Win32 都抓不到稳定句柄,最后只能退化成图像匹配——而图像匹配意味着分辨率、缩放比例、系统主题、弹窗位置任何一项变了都得重来。这不是哪个产品的问题,是目前整个 RPA 品类在 GUI 层的天花板。
三、真正把项目拖垮的三件事,跟平台选谁关系不大
第一件,选择器里带 idx。UiPath 的 UiExplorer 里你会看到 target 的 idx='3' 这种属性,意思是我要抓同类元素里的第 3 个。开发的时候它是第 3 个,用户多了个待办提醒之后它变成第 4 个,然后第二天早上 7 点机器人准时挂。我的做法是把所有 idx 全部删掉,改成用 class + aaname(或 aria-label)+ 层级路径做组合校验,宁可多写两行也不留 idx。影刀里对应的是「元素校验」那个开关,一定要打开,它会在运行时用多个属性一起匹配。
第二件,Chrome 自动更新。用了图像识别的地方最怕这个,浏览器一更新,工具栏高度变几个像素,你原来的坐标就偏了。我们现在是把测试机和企业机都锁在同一个大版本,用组策略关掉自动更新,每季度手动升一次,升完拿 20 个用例回归一遍。听着土,但比每次早上收到告警强。
第三件,RDP 断开。这个坑最阴,因为你在本地测永远测不出来:远程桌面一断开或者最小化,图形会话就进入非活动状态,UI 自动化点击全部失效,报错还特别含糊。解决办法是在那台机器上执行 tscon %sessionname% /dest:console 把会话踢回控制台,或者干脆用一台不注销的物理机 / VM,别用 RDP 挂着。另外再加一层:任务计划程序里配触发器,失败重试 3 次、间隔 5 分钟,三次都失败就往钉钉或企业微信推一条 webhook,带上当次运行的截图路径。我们日志保留 30 天,每张截图压到 200KB 左右,一天二十来张,30 天也就 120MB,不心疼。
四、AI Agent 现在能替代 RPA 吗?我的观点是:别做主干,做兜底
今年一堆人问我 Browser Use、Computer Use 这些能不能直接替掉 RPA。我的看法跟主流不太一样:别想着让大模型去跑主流程,那个成本和不确定性你扛不住;但用它做异常兜底,性价比高得离谱。
具体怎么接:在原有的选择器逻辑外面包一层 try/catch,元素找不到的时候不直接抛异常,而是截一张图,1280x720 压成 JPEG 质量 70,连同「当前要做的事」一起丢给视觉模型,让它回答两个问题——现在页面停在哪个状态、弹窗里应该点哪一个按钮。单次调用 1.5~3 秒,成本几分钱。实测下来这种兜底在几十次异常里判对了八成左右,剩下两成还是得人工。但就这一层,把原来 30% 的挂起转成了自愈,客户的运维工单量肉眼可见地掉下来了。
顺带一个省钱观点:如果你的流程是月频次、一年跑 12 次,别买 unattended 授权,attended 手动点一下启动完全够用,那笔授权费够你请人手工做三年。按频次选授权,而不是按「先进程度」选授权,这是我踩过之后才想明白的。
五、如果你也要上 RPA,先过这 8 条再谈开发
- 把流程拆到「一个机器人只干一件事」,下载归下载,比对归比对,中间用固定命名的文件(比如 flow_20241105_zs.csv)传,别在一个流程里串五个系统;
- Excel 超过 3 万行,禁止逐行循环读写,一律先 Read Range 整块读进 DataTable,10 万行的差距是 40 分钟对 12 秒;
- 所有等待改成「等待元素出现」,别写 Sleep 5000,我们统一 15 秒超时;
- 关掉 Excel 的 ScreenUpdating 和公式自动计算,能省掉一大半时间;
- 每个流程必须有独立的日志文件 + 失败截图,出问题先看截图再打断点;
- 固定浏览器大版本、固定屏幕分辨率、固定缩放 100%,这三个变量能灭掉一半的诡异故障;
- 授权模式按调用频次选,月频次的别买 unattended;
- 上线前问一句:这套东西半年后谁维护?如果是你自己,那你写的时候就会收敛很多——我现在的习惯是每个流程文件里写注释,把我踩过的坑原文抄进去,给未来的自己看。