影刀RPA进阶教程:Windows桌面应用程序自动化操作指南
网页自动化是影刀的强项,但有时你需要操作桌面端程序——比如操作微信客户端、操作 WPS、操作 ERP 系统客户端。
桌面程序自动化和网页自动化思路不同:没有 DOM 树、没有 XPath、不能用浏览器指令。但影刀支持"窗口操作"和"图像识别",能覆盖大部分场景。
一、窗口操作:找到并激活目标窗口
1.1 查找窗口
# 1. 直接用窗口标题查找激活窗口("微信")# 找到标题含"微信"的窗口并置顶# 2. 用窗口类名精确查找激活窗口("Notepad",类名="Notepad")# 3. 查找所有匹配的窗口查找窗口("微信")->窗口列表 输出日志(f"找到{len(窗口列表)}个微信窗口")1.2 窗口操作指令
| 指令 | 作用 |
|---|---|
| 激活窗口 | 把窗口置顶,获得焦点 |
| 最大化窗口 | 窗口最大化 |
| 最小化窗口 | 窗口最小化到任务栏 |
店群矩阵自动化突破运营极限!
| 关闭窗口 | 关闭窗口 |
| 移动窗口 | 移动窗口到指定位置 |
| 调整窗口大小 | 设置窗口宽高 |
# 典型操作序列激活窗口("微信")等待(1秒)最大化窗口()# 确保窗口在最前面再操作移动窗口("微信",0,0)# 移到左上角调整窗口大小("微信",1280,800)# 设固定大小二、图像识别:定位桌面程序里的元素
桌面程序没有 HTML 元素,影刀通过"图像识别"来找按钮。
2.1 截图定位
# 步骤1:先在画面上截取目标按钮的图片# 用影刀的"截图工具"截一个微信"发送"按钮的图,保存为 send_button.png# 步骤2:用图像识别找到这个按钮的位置查找图片("D:\\图片库\\send_button.png")->找到的位置# 返回 (x, y) 坐标# 步骤3:点击鼠标移动到(找到的位置.x,找到的位置.y)鼠标点击()# 或者直接用组合指令点击图片("D:\\图片库\\send_button.png")2.2 图像识别的精度控制
# 匹配度设置查找图片("button.png",匹配度=0.9)# 0.9 = 90% 相似度就算匹配# 设太低会误匹配,设太高稍微变一点就不认识了# 建议:先在测试环境试出合适的匹配度# 一般 0.85~0.95 之间2.3 多个相似按钮的处理
# 如果画面中有多个相同图标(比如多个"关闭"按钮)查找所有图片("close_button.png")->所有位置 遍历列表(所有位置,位置):鼠标移动到(位置.x,位置.y)鼠标点击()等待(0.5秒)三、键盘模拟
桌面程序的输入不走"输入文本"指令,要走键盘模拟。
# 激活目标窗口激活窗口("记事本 - 无标题")等待(0.5秒)# 输入文本(模拟键盘敲击)模拟输入("Hello World")# 模拟快捷键模拟按键("Ctrl","S")# 保存模拟按键("Ctrl","A")# 全选模拟按键("Ctrl","C")# 复制模拟按键("Ctrl","V")# 粘贴模拟按键("Alt","F4")# 关闭窗口# 模拟回车模拟按键("Enter")# 模拟 Tab 切换焦点模拟按键("Tab")注意:模拟输入和输入文本的区别——
输入文本:直接设置元素的文本内容(用于网页)模拟输入:模拟键盘逐字敲击(用于桌面程序)
temu店群自动化报活动案例
四、实战:自动操作微信发送消息
# 场景:给指定联系人发送采集结果# 1. 激活微信窗口激活窗口("微信")等待(1秒)# 2. 用快捷键打开搜索模拟按键("Ctrl","F")等待(0.5秒)# 3. 输入联系人名字模拟输入("数据日报群")等待(1秒)# 4. 回车进入聊天模拟按键("Enter")等待(0.5秒)# 5. 输入消息模拟输入(f"今日采集完成,共计{变量_总数}条数据")等待(0.3秒)# 6. 发送模拟按键("Enter")输出日志("微信消息发送完成")五、桌面自动化的常见坑
| 问题 | 原因 | 解决 |
|---|---|---|
| 图像识别找不到 | 窗口大小变了/分辨率变了 | 固定窗口大小和分辨率 |
| 输入中文变乱码 | 输入法状态不对 | 输入前按 Shift 切到英文输入 |
| 点击位置偏移 | 窗口不在固定位置 | 先移动窗口到 (0,0) |
| 被其他窗口遮挡 | 弹窗冒出来了 | 操作前先激活窗口 |
| 不同电脑上截图不匹配 | DPI/缩放不同 | 截图和目标电脑的缩放一致 |
六、什么时候该放弃桌面自动化
桌面自动化比网页自动化脆弱 10 倍。以下情况不建议用:
- 需要跨多台电脑运行(截图不通用)
- 目标程序界面经常更新
- 目标程序有反自动化检测(如某些金融软件)
遇到这些情况,优先考虑:这个桌面软件有没有网页版?有没有 API?有没有导出功能?
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。