
影刀RPA鼠标键盘进阶教程模拟操作图像识别虚拟驱动复杂交互——搞定网页之外的一切网页自动化在影刀里是最简单的——捕获元素、点击、填表三步搞定。但真实世界里有很多东西不在网页上桌面软件、游戏客户端、后台管理系统、旧版ERP系统、甚至你的电脑桌面本身。这些场景没网页元素可捕获只能用鼠标键盘模拟。这篇文章把模拟操作的所有技巧讲透。一、模拟操作 vs 驱动操作——选对模式少踩80%的坑影刀操作鼠标键盘有两种模式模拟模式默认模拟Windows层面的鼠标移动和键盘输入。优点是几乎所有软件都能用缺点是需要屏幕上确实显示着那个窗口不能锁屏、不能最小化。驱动模式通过虚拟硬件驱动模拟输入比模拟模式更底层不会干扰你的真鼠标真键盘。优点是更稳定、不干扰你干其他事缺点是需要安装驱动管理员权限部分杀毒软件可能误报。什么时候用哪个操作浏览器 → 优先用网页自动化指令不要用模拟网页指令比模拟稳定太多操作桌面软件微信、钉钉、QQ → 用模拟模式 图像识别定位操作需要后台运行的任务 → 用驱动模式模拟模式锁屏就挂了操作老旧的Windows软件没有UI自动化接口 → 模拟模式是唯一选择我第一次用驱动模式的时候装驱动被360报毒拦截了排查了半天才发现是杀毒软件的问题。如果有同样问题先在杀毒软件里加个白名单。二、元素定位四合一——图像识别也要找对锚点虽然这部分侧重图像识别但XPath和CSS在混合场景网页桌面软件联动里依然很重要。XPath 6种写法//tag[attrvalue]— 属性精确定位//tag[text()text]— 文本精确定位//tag[contains(attr,partial)]— 模糊匹配动态class首选//parent/child— 相对路径(//tag[...])[N]— 位置索引//tag[ax and by]— 多条件CSS选择器 8种语法#id2..class3.[attrvalue]4.parent child5.parent child6.:nth-child(N)7..c1.c28.*XPath vs CSS抉择指南网页上元素有唯一id → CSS的#id最简洁要按文本内容定位 → 只能用XPath的text()或contains(text(),)页面class是动态的 → XPath的contains(class,固定部分)最稳重要找父元素 → XPath的/..或者/parent::*在实际混合操作中我经常是先在浏览器里用XPath靠文本找到某个客户名称然后记录这个名字在屏幕上的坐标用图像识别辅助再切换到桌面端ERP软件里用模拟键盘输入这个坐标对应的输入框。三、图像识别——当元素捕获失效时的救星影刀的图像识别指令是基于计算机视觉匹配的。工作原理你提供一张模板图片比如登录按钮的截图影刀在屏幕上找跟这张模板图片相似的区域找到了就告诉你它在哪。核心指令wait_appear(image_path, timeout)— 等待图片出现找不到会一直等到超时click(image_path, anchor5, offset_x0, offset_y0)— 点击找到的图片hover(image_path)— 悬停到图片位置dblclick(image_path)— 双击image_exists(image_path)— 判断图片是否存在返回true/false不等待wait_appear的超时时间设计设10秒。设太短3秒容易因为页面加载慢而误判设太长30秒等得烦躁。我一般设10秒绝大多数的操作在3-5秒内都能完成。锚点9位置详解图像匹配到之后点击位置有9个锚点可选1(左上) 2(中上) 3(右上) 4(左中) 5(正中) 6(右中) 7(左下) 8(中下) 9(右下)为什么需要9个锚点因为有时候你截取的是一个大按钮包含了图标文字点击位置不同效果可能不同。比如有些按钮的可点击区域只在文字上图标区域点不了。这时候要选锚点5正中或者锚点2中上。偏移量的用法锚点确定了大体位置偏移量做微调。店群矩阵自动化突破运营极限# 示例图片找到了但想点图片下方50像素的位置比如点击图片下面的确定按钮click(image_pathtemplate.png,anchor8,offset_x0,offset_y50)我第一次用图像识别的时候锚点选的是正中默认为5但按钮的实际可点击区域在左上角。点了几十次都没反应后来把锚点改成左上锚点1就好了。所以建议找一个有颜色的元素做模板比如红色按钮点击位置选按钮的中心区域。模板图片的制作技巧截取有显著特征的小区域100x50像素足够不要截整块区域模板里包含独特颜色或形状纯白色的按钮截出来没有特征容易匹配到错误位置保存为PNG格式不要用JPGJPG有压缩损失放在固定路径比如C:\影刀模板\不要在代码里频繁改路径图像识别的精度参数精度越高匹配越严格不容易误匹配但可能找不到精度越低匹配越宽松容易找到但可能匹配错位置。默认精度是0.8我一般设0.9偏严格因为宁愿找不到报错也不要点到错误的地方。四、复杂鼠标操作——拖拽、右键、滚轮基础点击之外还有很多鼠标操作。拖拽drag(start_x, start_y, end_x, end_y)— 从起始坐标拖到目标坐标。常见场景把文件从桌面拖到微信聊天窗口在Excel里拖拽填充序列在电商后台拖拽调整商品顺序拖拽的实现分两步先在起始位置按下鼠标mousedown移动到目标位置再松开mouseup。影刀的drag指令封装了这三步。右键菜单right_click(image_path)— 右键点击弹出菜单后再用click指令点菜单项。坑点右键菜单弹出来的位置不是固定的取决于你在哪里点的右键。如果菜单项也是用图像识别点模板要截的是菜单项的文字部分。滚轮滚动scroll(directiondown, distance300)— 模拟鼠标滚轮。常见场景下拉加载更多feed流页面没有下一页按钮在聊天窗口里往上翻历史记录滚轮的速度参数要小心distance设太大比如1000滚动太快有些页面的懒加载跟不上数据加载不全。我一般设300-500滚完等一下500毫秒确保新数据加载出来了再继续。鼠标移动move_to(x, y)— 把鼠标移动到指定坐标不点击。有用场景移到某个区域悬停触发hover效果比如商品缩略图上悬停显示大图移到退出区域测试功能五、键盘操作——不只是输入文字影刀的键盘操作远不止填写输入框。组合键key_down(Ctrl)key_press(C)key_up(Ctrl)— 模拟CtrlC。常用组合键组合键指令场景CtrlC复制复制选中的文本CtrlV粘贴粘贴到输入框CtrlA全选全选文本后删除/替换AltTab切换窗口切换到目标窗口后操作CtrlShiftN新建文件夹/窗口批量操作文件WinD显示桌面操作完成后回到桌面AltF4关闭窗口操作完成后关闭当前窗口注意在浏览器操作场景下尽量用影刀的网页自动化指令点击网页元素、填写输入框不要用键盘模拟。因为键盘模拟依赖窗口焦点——如果弹窗突然弹出来抢了焦点你的键盘输入会打到弹窗上而不是目标输入框。特殊键Tab切换输入框焦点、Enter确认或提交、Esc关闭弹窗、Backspace删除。Tab键在填写表单的时候很有用——填完一个输入框后按Tab跳到下一个输入框比用鼠标点快很多。我第一次用Tab键跳转的时候有些表单的Tab顺序不是按视觉顺序排的有的跳到了页脚的搜索框导致填错了位置。用Tab之前最好先手动按一遍确认Tab顺序是对的。六、窗口操作——多窗口管理影刀可以同时操作多个窗口前提是你能找到当前要操作的是哪个窗口。获取窗口列表get_window_list()返回当前所有可见窗口的标题和句柄。激活窗口activate_window(title微信)把微信窗口切到最前面。窗口是否存在的判断# 在流程里If 窗口是否存在(微信):激活窗口(微信)Else:启动应用程序(微信.exe)窗口句柄每个窗口在Windows系统里有一个唯一的句柄数字ID。如果你要同时操作两个记事本窗口标题都是无标题 - 记事本用标题区分不了要用句柄。获取句柄后所有窗口操作指令都可以指定句柄来精确操作目标窗口。窗口的最小化/最大化最大化maximize_window(title微信)最小化minimize_window(title微信)恢复restore_window(title微信)置顶set_window_top(title微信)我第一次写微信自动发消息的流程时微信窗口不小心被最小化了模拟鼠标点击发送按钮的时候点到了桌面空白处消息没发出去流程也没报错。后来养成习惯每次操作之前都先activate_window确保窗口在最前面。七、虚拟键盘驱动——驱动模式详解驱动模式是升级版的模拟模式核心区别在于驱动模式在Windows驱动层面模拟输入不依赖屏幕显示。这意味着你可以锁屏了流程照样跑。驱动模式适用场景定时任务半夜跑没人盯着屏幕远程桌面里的操作RDP窗口里的元素用普通模拟模式可能操作不了需要高性能输入比如瞬间输入大量文字模拟模式打字太慢会超时驱动模式不适用场景网页操作 → 用网页自动化指令不要用驱动浏览器填表 → 同上网页指令更稳定安装驱动的流程影刀客户端 → 设置 → 驱动管理点安装驱动需要管理员权限如果杀毒软件拦截加白名单安装完之后在指令里把操作模式从模拟改成驱动驱动模式的速度控制驱动模式默认输入速度很快几乎是瞬间完成但有些老旧的软件处理不了这么快——输入太快软件还没响应过来就继续输下一个字符了导致部分字符丢失。解决办法在键盘输入指令里把输入间隔设成50-100毫秒。八、OCR文字识别——从图片中提取文本有些桌面软件里的文字不是标准的控件, 元素捕获不了。这时候先用截图指令截取目标区域再用OCR把文字识别出来。影刀集成了百度AI OCR用的是accurate_basic接口通用文字识别, 精度最高。# OCR识别流程# 1. 截图screenshot(x100,y200,width300,height40,save_totemp.png)# 2. OCR识别resultocr(temp.png)# 3. 处理结果# result [{words: 识别到的文字, location: {...}}, ...]textresult[0][words]ifresultelseOCR的坑截图区域要精确——截太大了会识别出多余的背景文字文字颜色和背景颜色要有足够对比度——白底黑字效果最好繁体字、手写字、艺术字的识别率会下降我第一次用OCR识别ERP系统里的数据截了整个窗口1200x800结果OCR花了10秒才返回还识别出了窗口标题栏、菜单栏的无用文字。后来改成只截取数据表格区域速度从10秒降到了1秒准确率大幅提升。九、平台实战——桌面软件的自动化微信/企业微信打开微信启动应用程序WeChat.exe搜索联系人点击搜索框 → 输入联系人名称 → 等待搜索结果出现 → 点击第一个结果发送消息在输入框粘贴或输入消息内容 → 点击发送按钮或者CtrlEntertemu店群自动化报活动案例发送文件用拖拽指令把文件拖到聊天窗口微信自动化的最大坑微信更新频繁界面经常变。上个月还能用的图像模板这个月可能就匹配不上了。解决办法用文本XPath类思路设计模板——截取发送按钮的文字部分而不是整个按钮。旧版ERP系统不是网页版这类系统通常在Windows本地运行没有API。自动化只能走鼠标键盘模拟用图像识别定位菜单项用模拟鼠标点击菜单用模拟键盘输入查询条件用模拟键盘按Enter确认用模拟键盘Tab在表单的各个输入框之间跳转用截图OCR读取查询结果ERP系统的难点在于界面是同一种颜色、同一种字体图像识别的模板唯一性差。我的做法是截取菜单文字背景色的组合区域做模板比如蓝色的菜单条 白色的查询文字比单独截文字匹配效果好很多。抢票/秒杀场景在倒计时结束前的最后一秒点击抢购按钮用图像识别检测倒计时数字截图 → OCR → 判断是否到0抢票场景对速度要求极高——慢了0.1秒就没了。但这种场景有风险如果平台检测到你用自动化工具可能封号。不是特别需要的话不建议搞。十、系统联动——定时任务 鼠标键盘前面讲了网页自动化可以用定时任务没问题但如果你用的是模拟鼠标键盘模式定时任务有个大坑锁屏了就操作不了。因为模拟鼠标键盘依赖屏幕上确实有东西显示着锁屏之后屏幕是黑的图像识别找不到目标鼠标移动也不起作用。解决方案改用驱动模式驱动模式不需要显示锁屏也能跑定时任务里设置运行前自动解锁屏幕需要配置Windows自动登录把模拟操作改成网页指令如果目标系统有Web版的话飞书通知模拟操作类流程比网页流程更容易出错窗口没了、弹窗挡住了等等所以飞书通知更重要。在每个关键步骤之后发一条状态日志到飞书“已打开微信客户端”“已搜索联系人张三”“已发送消息今日报表已生成”“流程结束总计成功3条失败0条”十一、调试技巧——模拟操作的排障模拟操作的调试比网页操作难很多——网页操作有报错信息模拟操作经常是没反应“点错了”输入漏字这种问题。调试方法1分步运行在流程的每一步之间打断点跑一步停一下用肉眼确认有没有操作到预期的位置。调试方法2截图保存在每次操作前后用截图指令保存屏幕画面。出问题了回看截图能发现窗口被别的弹窗挡住了、或者图像识别匹配到了错误的位置。调试方法3坐标打印在执行点击之前用调试输出打印一下当前要点击的坐标对比一下实际屏幕上那个坐标是不是你期望的位置。调试方法4低速度运行先用慢速度每步等待1-2秒把流程跑通确认所有操作流程都是对的之后再逐步把等待时间缩短。常见报错“图像未找到”模板图片可能过时了目标软件界面变了或者当前屏幕分辨率跟制作模板时的分辨率不同。检查屏幕分辨率、DPI缩放比例“窗口未激活”操作之前忘了activate_window目标窗口在后台“输入不完整”模拟输入速度太快老旧软件跟不上。降低输入间隔十二、速查表——鼠标键盘操作常用指令指令参数说明clickimage_path/image_text/坐标点击dblclickimage_path/image_text/坐标双击right_clickimage_path右键点击hoverimage_path悬停drag起止坐标拖拽scrolldirection, distance滚轮滚动move_tox, y移动鼠标不点击input_text文本, 间隔输入文字key_press按键名按下并释放某个键key_down按键名按住不放key_up按键名释放按键wait_appearimage_path, timeout等待图片出现click_imageimage_path点击匹配到的图片screenshotx, y, w, h, path截取屏幕区域ocrimage_path识别图片文字activate_windowtitle/handle激活窗口get_window_list—获取所有窗口列表鼠标键盘模拟是影刀的最后手段——能用网页指令就别用模拟能用API就别爬页面。但当你面对那些没有API、没有网页版的系统时旧版ERP、桌面客户端这套技能就是你的救命稻草。掌握了模拟操作影刀的应用范围就从浏览器里扩展到了整个电脑。#影刀RPA #RPA教程 #鼠标自动化 #键盘自动化 #图像识别 #驱动模式 #桌面自动化 #模拟操作作者林焱