做了两年RPA,大部分时间都在跟网页打交道。直到有一天老板说:“能不能把ERP系统里的订单自动导出来?”——那个ERP是个古老的Windows桌面软件,没有网页版,没有API,只有界面。
网页自动化有XPath、有元素库,桌面自动化完全不是一回事。窗口可能被遮挡、分辨率不同元素就找不到、深度捕获也捕获不到。这篇文章把Windows桌面自动化的窗口管理、元素定位、图像识别、键盘模拟、微信实战全部讲清楚。
一、桌面自动化的三种定位方式
桌面应用没有DOM树,定位元素的方式跟网页完全不同。影刀提供了三种方式,按优先级排列:
| 定位方式 | 适用场景 | 稳定性 | 配置难度 |
|---|---|---|---|
| 桌面元素捕获 | 标准Windows控件(按钮、输入框、列表) | ⭐⭐⭐⭐ | 低 |
| 图像识别 | 元素捕获不到、自定义控件、图片按钮 | ⭐⭐ | 中 |
| 键盘模拟 | 输入框不响应、快捷键操作、组合键 | ⭐⭐⭐ | 低 |
核心原则:能捕获元素就用元素捕获,捕获不到再用图像识别,最后才考虑键盘模拟。
二、窗口管理:获取、激活、关闭
操作桌面应用的第一步是找到窗口。影刀的“获取窗口对象”指令在“桌面自动化”分类下。
获取窗口对象的三种方式
方式一:通过窗口标题获取(最常用)
在“获取窗口对象”指令的详情面板中,窗口定位方式下拉选“标题”,填入窗口标题的关键词。
# 示例:获取微信窗口
# 窗口标题包含"微信"
# 返回:窗口对象 → 存到变量 win_wechat

注意:标题要用部分匹配,不要写全称。因为窗口标题可能带版本号或状态信息(如“微信 (2) - 正在输入”)。
方式二:通过窗口类名获取(更精确)
如果多个窗口标题相似(比如开了多个Excel),用类名区分更准确。
方式三:通过当前激活窗口获取
适用于“用户已经打开了目标窗口,RPA直接操作当前窗口”的场景。
激活窗口:把窗口拉到前台
获取到窗口对象后,用“激活窗口”指令把它切换到前台。每次操作前先激活窗口,确保指令发到正确的目标。
获取窗口对象(标题="微信") → win
激活窗口(win)
等待(500) # 给窗口切换留时间
这里容易踩坑:窗口最小化或隐藏在后台时,激活可能不生效。建议在激活前先用“显示窗口”指令把窗口恢复到正常状态。
关闭窗口
用“关闭窗口”指令关闭指定的窗口对象。注意不是关闭应用,只是关闭当前窗口。
三、桌面元素捕获:能捕获就别用图像
影刀V5.30及以上版本支持智能元素(Win端) ,可以捕获桌面元素。目前已支持ACC、UIA类型的桌面元素。
操作步骤
- 在指令面板搜索“捕获元素(桌面)”或“获取桌面元素”
- 点击“捕获元素”按钮,鼠标移到桌面应用的目标控件上
- 出现橙色高亮边框后点击确认
- 在详情面板中可以编辑定位条件
影刀版本差异:社区版也支持桌面元素捕获,但部分高级控件类型(Java、SAP)需要更高版本。
桌面元素捕获的坑
坑1:开发时能捕获,运行时变
有用户反馈:开发时元素标签是<div>、<li>,运行RPA应用时变成了<Grouping>。
解决方法:每次打开Windows软件后,先手动打开影刀捕获一下元素,等元素标签恢复正常后,再启动自动化程序。
坑2:换台机器元素就失效
桌面元素的定位受分辨率、缩放比例影响很大。
解决方法:
- 在部署文档里标注:分辨率至少1920x1080、缩放100%
- 统一用一台专门跑RPA的虚拟机
- 关闭360等可能拦截的安全软件
坑3:深度捕获也捕获不到
有些自定义控件(如自绘按钮、图形界面),深度捕获也抓不到。
解决方法:切换到图像识别方案。
四、图像识别:元素捕获不到时的救命稻草
图像识别是桌面自动化的“备胎方案”——不依赖元素结构,只看图片匹配。
两种图像识别方式
方式一:点击图像(模板匹配)
通过预设的图片模板,在屏幕上找到匹配的位置并点击。
操作步骤:
1. 截图:把要点击的按钮截成一张小图片(PNG格式)
2. 拖入“点击图像”指令
3. 在详情面板中上传截图
4. 设置相似度(默认0.8,太严格可能找不到,太宽松可能点错)
5. 设置点击偏移(如果需要点击图片的某个特定位置)
适用场景:文字样式固定(字体、大小、颜色不变)的按钮、图标、特殊符号。
方式二:鼠标悬停在文本上(OCR)
通过识别屏幕上的文字内容定位位置,再把鼠标移过去。
操作步骤:
1. 拖入“鼠标悬停在文本上(OCR)”指令
2. 在详情面板中输入要识别的文字
3. 影刀通过AI引擎识别文字位置并移动鼠标
适用场景:元素不可捕获但文字可见的场景(如带文字标签的按钮、列表项)。
图像识别的三大坑
坑1:不同分辨率下识别失败
影刀图像识别目前没有区域设置,不同分辨率下同一图像的识别精准度不同。
解决方法:
- 固定屏幕分辨率和缩放比例
- 截图时尽量截特征明显的区域(不要截纯色背景)
- 降低相似度阈值(从0.9降到0.7)
坑2:图像识别不稳定,时好时坏
“窗口应用点击和图片识别点击太不稳定了,又得重新修改自动化流程”。
解决方法:
- 每次运行前先激活目标窗口,确保窗口在最前面
- 截图时保留窗口标题栏作为参照物,提高匹配准确率
- 配合“等待图像出现”指令,等图像加载完再操作
坑3:图像识别没有区域设置
目前影刀图像识别不支持限定搜索区域,全屏搜索效率低且容易误匹配。
解决方法:用Python脚本辅助实现区域截图+图像识别。
五、键盘模拟:输入框不响应时的终极方案
做桌面自动化最让人头疼的场景之一:输入框就是不吃你塞进去的文字。
键盘输入指令
指令面板搜索“键盘输入”(也叫“模拟键盘输入”)。
基础用法:
键盘输入(内容="Hello World")
输入快捷键: 点击指令详情面板的“插入键盘符号”按钮,展开软键盘,选择要模拟的按键或组合键。
# 模拟Ctrl+C(复制)
键盘输入(组合键="Ctrl+C")
# 模拟Alt+F4(关闭窗口)
键盘输入(组合键="Alt+F4")
输入框不响应的三种解法
解法一:先点击再输入
很多输入框需要先获得焦点才能接受输入。
点击元素(输入框) # 先让输入框获得焦点
等待(200)
键盘输入(内容="要输入的文字")
解法二:用剪切板中转
某些加密输入框(如密码框、支付密码框)拦截键盘输入事件。
复制文本到剪贴板("要输入的文字")
点击元素(输入框)
模拟按键(Ctrl+V) # 粘贴
解法三:模拟逐字符输入
部分老旧系统对粘贴事件不响应,但逐字符输入可以。
循环遍历(文字列表, 当前字符):
键盘输入(当前字符)
等待(50) # 每个字符之间留一点间隔
六、实战:微信桌面端自动化(完整案例)
微信是桌面自动化最常见的场景之一。下面是一个完整的微信自动化流程模板。
场景:根据Excel名单批量发送消息
A_Main(主流程)
├─ 【读取联系人列表】
│ └─ 从Excel读取A列联系人昵称 → 联系人列表
│
├─ 【打开微信】
│ ├─ 获取窗口对象(标题="微信") → win
│ ├─ 激活窗口(win)
│ └─ 等待(1000)
│
├─ 【循环发送消息】
│ ├─ 循环列表(联系人列表, 当前联系人):
│ │ ├─ 【搜索联系人】
│ │ │ ├─ 点击搜索框(桌面元素捕获)
│ │ │ ├─ 键盘输入(Ctrl+A) # 清空之前的搜索内容
│ │ │ ├─ 键盘输入(当前联系人)
│ │ │ └─ 等待(1000)
│ │ │
│ │ ├─ 【点击联系人】
│ │ │ ├─ 尝试:点击元素(联系人条目)
│ │ │ └─ 如果失败:点击图像(联系人头像截图) # 备选方案
│ │ │
│ │ ├─ 【输入消息】
│ │ │ ├─ 点击输入框(桌面元素捕获)
│ │ │ ├─ 键盘输入(消息内容)
│ │ │ └─ 键盘输入(Enter) # 发送
│ │ │
│ │ └─ 等待(随机1-3秒) # 防风控
│ └─ 循环结束
│
└─ 【关闭】
└─ 输出日志("消息发送完成")
微信自动化的关键元素捕获
# 桌面元素捕获参考(实际需根据微信版本调整)
# 搜索框:通常是一个输入框控件
# 联系人列表:列表控件,每个联系人是一个列表项
# 消息输入框:多行文本输入控件
# 发送按钮:按钮控件
注意:微信版本更新频繁,元素结构可能变化。建议每季度重新校验一次关键元素。
微信自动化的风控规避
微信对自动化操作的检测非常严格。以下策略必须执行:
- 控制频率:每条消息之间加随机延迟(1-3秒) ,不要固定间隔
- 控制总量:单次运行不超过200条消息,避免触发风控
- 模拟真实操作:不要用纯键盘操作,适当加入鼠标移动和点击
- 分散时段:批量任务分多次执行,不要集中在同一时间段
七、进阶:AI视觉操作屏幕(V5.30+新特性)
影刀V5.30版本推出了“对话操作屏幕”指令——基于AI视觉大模型(VLM),用自然语言让AI识别/操作屏幕。
相比传统图像识别的优势:
- 图像语义理解:AI能理解“登录按钮”“关闭窗口”等语义
- 智能规划:自动规划操作步骤
- 处理验证码:AI识别验证码内容并操作通过验证
使用方式:在指令面板搜索“对话操作屏幕”,用自然语言描述要执行的操作即可。
社区版用户注意:该功能基于云端AI服务,调用可能消耗AI额度,具体以影刀官方说明为准。
八、桌面自动化的通用避坑指南
坑1:自己电脑跑得好好的,换台机器就不行了
原因:分辨率不同、缩放比例不同、杀毒软件拦截。
解决方案:
- 统一分辨率(1920×1080)和缩放(100%)
- 统一浏览器版本
- 关闭360等安全软件
- 用专门跑RPA的虚拟机
坑2:图像识别在不同分辨率下失效
解决方案:
- 固定屏幕分辨率
- 截图时保留窗口标题栏作为参照
- 降低相似度阈值
坑3:元素捕获时能定位,运行时找不到
解决方案:
- 每次操作前先“激活窗口”
- 用Try-Catch包裹,捕获不到时切换到图像识别备选方案
- 在流程开始前手动捕获一次元素“激活”识别能力
坑4:键盘输入内容乱码或缺失
解决方案:
- 检查输入法是否切换到英文状态
- 用剪切板中转代替直接键盘输入
- 逐字符输入代替整段粘贴
九、完整实战:ERP订单导出自动化(综合应用)
这是一个结合窗口管理、元素捕获、图像识别、键盘模拟的完整案例。
A_Main(主流程)
├─ 【打开ERP】
│ ├─ 打开桌面应用(ERP.exe路径)
│ ├─ 获取窗口对象(标题="ERP系统") → win
│ └─ 激活窗口(win)
│
├─ 【登录】
│ ├─ 尝试:点击元素(用户名输入框) → 键盘输入(账号)
│ ├─ 如果失败:点击图像(用户名输入框截图) → 键盘输入(账号) # 备选
│ ├─ 尝试:点击元素(密码输入框) → 键盘输入(密码)
│ ├─ 如果失败:点击图像(密码输入框截图) → 键盘输入(密码)
│ └─ 点击元素(登录按钮)
│
├─ 【导航到订单导出页面】
│ ├─ 点击元素(订单管理菜单)
│ ├─ 等待(1000)
│ ├─ 点击元素(订单导出子菜单)
│ └─ 等待页面加载(3000)
│
├─ 【设置导出条件】
│ ├─ 点击元素(日期选择器)
│ ├─ 键盘输入(开始日期)
│ ├─ 点击元素(导出按钮)
│ └─ 等待导出完成(5000)
│
└─ 【关闭】
├─ 关闭窗口(win)
└─ 输出日志("导出完成")
常见问题/易错速查
-
桌面元素捕获和网页元素捕获有什么区别 → 网页有DOM树和XPath,桌面应用没有。桌面元素捕获依赖Windows的UI自动化框架(UIA/ACC),不同应用支持程度不同。
-
图像识别太不稳定怎么办 → 优先尝试桌面元素捕获。实在不行再用图像识别,并配合固定分辨率、降低相似度阈值、保留窗口标题栏作为参照物。
-
键盘输入不响应 → 先点击输入框获得焦点;用剪切板中转(Ctrl+V);或用逐字符输入代替整段粘贴。
-
换台机器元素就失效 → 固定分辨率和缩放比例,统一用一台专门跑RPA的虚拟机。
-
微信自动化会被封吗 → 微信对自动化操作检测严格。控制频率(每条消息间隔1-3秒)、控制总量(单次不超过200条)、分散时段执行。
-
社区版能做桌面自动化吗 → 可以。桌面元素捕获、图像识别、键盘模拟这些指令社区版都支持。但“对话操作屏幕”等AI功能可能消耗额度。
推荐资源
- 影官方帮助中心搜索“桌面自动化”和“窗口对象”
- 影刀开发者社区搜“桌面元素”有大量踩坑记录
- 影刀官方社区“做了半年RPA机器人,我把影刀流程自动化的坑都踩了一遍”
- B站“小可耐教你学影刀RPA”有桌面自动化的实操视频
#影刀RPA #RPA自动化 #桌面自动化 #窗口管理 #图像识别 #微信自动化
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
