你是不是也遇到过这种场景:让 AI 帮你点网页、填表单、发文章,日志里明明显示"已点击", 可远程桌面上的按钮就是毫无反应,最后只能自己接手收尾。
这篇不讲空泛概念,只讲一套把 AI 桌面自动化真正跑稳的做法:先收敛工具层级,再把验证补齐。
读完你会得到:
- 为什么"坐标点击成功"经常只是假成功
- 一套从
UIA、OCR 到原始坐标的稳定降级顺序 - 怎么把远程桌面、审批、发布这类流程做成可复用的自动化链路
🎯 真正让自动化翻车的,往往不是模型
很多人第一反应是模型不够聪明,但桌面自动化里最常见的问题, 其实是执行链路不稳定:窗口没聚焦、控件没暴露、鼠标被远程桌面同步抢回去、点击后也没人验证结果。
当这些问题叠在一起时,AI 看起来像"已经做了", 其实只是把一串并不可靠的动作发了出去。
桌面自动化最危险的错觉,不是"做不到",而是"看起来已经做到了"。
🚀 想稳定,第一步不是多试,而是先换工具层级
如果一上来就用像素坐标点按钮,成功率通常会越来越差。 更稳的做法,是按从高到低的控制层级往下走:
| 层级 | 适用对象 | 稳定性 | 典型工具 |
|---|---|---|---|
| 语义控件层 | 输入框、按钮、列表 | ✅ 最高 | desktop_fill_text_field / desktop_click_control |
| 标注检查层 | 复杂编辑器、多字段窗口 | ✅ 很高 | desktop_inspect_window |
| 可见文字层 | 自绘按钮、菜单、弹窗文本 | ⚠️ 中高 | desktop_click_text |
| 原始坐标层 | 以上都不通时兜底 | ❌ 最脆弱 | desktop_capture_window + desktop_click_at |
一句话:能用语义控件,就别猜坐标;能先检查结构,就别盲点页面。
⚙️ 一条实战里很好用的降级路径
在 CliGate 这类本地控制平面里,桌面能力不是单独存在的, 它要跟助手任务、审批、渠道通知、定时任务一起协同。
真正好用的执行顺序,通常像这样:
text
Assistant 任务
-> 聚焦目标窗口
-> 优先找 UIA 控件并直接填写/点击
-> 找不到时,用 inspect_window 看标注结构
-> 还不行,再走 OCR 找可见文字
-> 最后才用截图 + 坐标点击
-> 每一步都做读回 / wait_change 验证
这条顺序的价值,不是"理论更优雅",而是它能把失败点暴露出来: 到底是窗口没起来、控件没找到、OCR 没命中,还是输入其实被系统丢了。
自动化稳定性的关键,不在于少失败,而在于失败时你知道到底失败在哪一层。
🧩 为什么远程桌面里"点了没反应"特别常见
很多人第一次把自动化搬到远程环境,就会踩到一个反直觉的问题: 鼠标位置明明动了,日志也说 click 成功,但页面并没有任何变化。
这类问题常见有 3 种来源:
- RDP 指针同步冲突:代理刚把鼠标挪过去,远程会话又把它拉回原位。
- 权限级别不一致:目标窗口是高权限,自动化进程是普通权限,输入会被系统静默丢掉。
- 误把 hover 当命中:坐标大概对了,但其实没落在真正可交互区域上。
对比一下就很清楚:
| 现象 | 常见误判 | 更合理的结论 |
|---|---|---|
click ok 但界面没变 |
按钮坏了 | ⚠️ 很可能根本没点中或输入被丢弃 |
| 光标总被拉走 | 坐标算错了 | ⚠️ 更可能是远程桌面同步干扰 |
| 发布按钮没反应 | 网站卡住了 | ⚠️ 也可能是隐藏必填项没补齐 |
💡 验证链一补上,自动化就从"玄学"变成工程
桌面任务最怕的不是失败,而是没有验证 。 如果点击之后不检查 moved、cursor shape、wait_change.changed, 你就很容易把"动作发出去了"误当成"业务完成了"。
所以一个能长期复用的流程,至少要补上这些校验:
- 输入后读回:字段值是否真的写进去了
- 点击后验变:界面是否真的切页、弹窗、加载或提交成功
- 状态再确认:发布类动作要看真实结果页或工具返回,不靠主观猜测
- 异常可定位:失败时写清是控件缺失、未登录、桥接断开还是权限问题
bash
# 例如平台发布前,先用 CLI 验证桥接与登录态
wechatsync platforms --auth
# 真正发布时再按实际登录的平台执行
wechatsync sync article.md -p csdn,juejin -t "你的文章标题"
这也是为什么本地 AI 控制平面很重要: 它不只是"替你点一下",而是把验证、记录、回报一起纳入执行链路。
⚠️ 一旦要长期跑,桌面能力必须和任务系统绑在一起
零散脚本在单次演示里没问题,但一旦进入真实工作流, 你很快就会遇到这些问题:今天能点,明天页面改版;这次登录着,下次登录态过期;现在窗口在前台,定时任务跑时却不是。
这时真正有价值的,不是再补几个 if-else, 而是把这些能力统一放进一个持续运行的系统里:
- 任务记录:知道这次在做什么、做到哪一步了
- 审批与策略:高风险动作可控,低风险动作自动放行
- 定时执行:固定时间自己跑,不靠人盯着
- 渠道回报:结果能直接发到钉钉、飞书、Telegram
- 多层工具兜底:CLI、文件、桌面自动化可以互相补位
真正能落地的桌面自动化,不是"会点按钮",而是"能被长期调度、验证和追踪"。
✅ 今天就能直接套用的 3 条经验
如果你也在做 AI 自动化,我最建议先把这 3 条落地:
- 先语义、后坐标:优先 UIA/文本/OCR,原始点击永远放最后。
- 所有动作都验结果 :不要因为工具返回
ok就宣布成功。 - 把自动化放进任务系统:让日志、回报、定时和审批成为默认能力。
当你把这三件事补齐之后,桌面自动化的体验会出现一个很明显的变化: 它不再像"偶尔灵、偶尔不灵"的演示,而更像一条能持续复用的生产链路。
如果你已经在同时维护浏览器自动化、CLI 工具和渠道机器人, 那么比起继续堆脚本,先把执行入口和验证机制收口,往往才是最省时间的那一步。