简介:Automation Operation 2.60 是一款面向办公自动化、软件测试与数据抓取场景的桌面级工具,让没有编程基础的使用者也能通过可视化拖拽和模板管理,快速定制鼠标键盘动作、图片/颜色/OCR识别、窗口控制、浏览器操作等自动化流程。资源包共414份文件,容量约742.75MB,包含300个JS脚本、24个DLL库、14个JSON配置、10个Shell脚本、9个EXE程序,以及视频演示、安装包和说明文档,分别承担核心逻辑、运行依赖、参数配置、跨平台调用与部署演示等用途,便于按需查阅和二次开发。已有507人学习下载。该工具提供录制回放、变量管理、Excel集成、智能选择器和后台执行能力,可通过快捷键与配置管理提升效率;同时支持颜色、图片、OCR三种识别方式,能适应普通窗口与复杂网页中的元素定位。借助这些能力,读者能够搭建网页表单批量提交、批量文字提取、软件界面自动化等可复用流程,减少重复性人工干预,适合个人提效与团队流程标准化。
1. Automation Operation 2.60:为什么一款“老”GUI工具至今还是我的桌面自动化备选方案
如果你跟我一样,手里有一堆只有 Windows 客户端、没有 API 的老业务系统,每天还得重复填表单、点按钮、核对界面数据,那你大概率会走到“写自动化脚本”这一步。我试过纯 Python + pyautogui,也试过按键精灵,最后兜兜转转把 Automation Operation 2.60 当成了主力。这是一款带完整可视化 GUI 的自动操作工具,核心能力是鼠标动作模拟、键盘动作模拟和图像识别定位,把三类动作拖到流程面板里就能生成可执行任务。它不要求你写一行代码,但也没有把参数细节藏进黑匣子——鼠标移动轨迹、点击频率、识别阈值都能调。这篇笔记就把我在银行柜面系统、ERP 客户端和内部 OA 上用它做自动化的真实经验拆开讲,适合正在选型、或者已经装了但用不深的从业者。
2. 可视化编排还是硬编码:我为什么选 GUI 工具而不是脚本
2.1 先搞清楚它是哪一类自动化:坐标级、图像级还是逻辑级
桌面自动化工具按照“怎么定位目标元素”基本分三类:基于固定坐标、基于图像识别、基于 UI 控件树。Python 的 pywinauto 属于控件树路线,能拿到窗口句柄和控件句柄,但前提是目标程序用的是标准 Win32 控件;一旦碰上自绘界面、WebView 渲染界面,控件树白扯。pyautogui 属于坐标级,写起来简单,但显示器分辨率一变,所有坐标全部偏移,翻车频率极高。
Automation Operation 2.60 的设计思路是“图像识别 + 相对坐标”的组合。它在流程里先截取目标图片,再通过图像匹配算法找到这张图在屏幕上的当前位置,然后以这个位置为基准偏移出鼠标要点击的坐标。这么一来,窗口位置变了、稍微移了几像素,它依然能锁住目标。这个机制和我后来用 OpenCV 写模板匹配是同样的逻辑,但它把匹配过程封装成了可视化节点,拖出来就能设参数,不用自己写多尺度缩放和灰度转换。
选型时我的判断标准很简单:目标软件能不能稳定提供控件句柄。能,就用 UI 控件方案;不能,就果断上图像识别方案。Automation Operation 属于后者,而且它是 GUI 可视化编排,流程里每一步是鼠标动作还是识别动作、识别失败往哪跳,图上看得一清二楚。这对后续维护意义很大——脚本代码写得再好,半年后你自己也未必记得为什么在那个地方 sleep 了 3 秒;但一个可视化的流程分支,谁打开都能看懂。
2.2 首次安装与第一个任务:从空流程到跑通一次鼠标点击
安装没什么特别的,Windows 10/11 都能跑,装完启动会看到一个空白流程设计器,上方是动作库,中间是流程画布,下方是参数面板。我建议第一次使用不要急着编排复杂逻辑,先创建一个“打开计算器并点击数字 5”的简单任务,把从启动到退出的完整链路走通。
操作上分四步。第一步,在动作库里拖一个“启动程序”节点,程序路径填calc.exe,工作目录留空。第二步,拖一个“等待”节点,等待时间设 1.5 秒,这是等计算器窗口完全渲染出来,我习惯把这里的值写得偏保守,宁可多等也不要还没出现就抢跑。第三步,拖一个“识别并点击”节点,点进参数区会进入截图模式,框选计算器上的数字按钮 5,相似度阈值先保持默认,点击方式选左键单击。第四步,再拖一个“等待”节点,然后拖一个“关闭窗口”节点,窗口标题写“计算器”。
# 这里不是 Automation Operation 的脚本语言,而是我后来用它的“导出流程”功能 # 生成的一段参考伪代码,目的是让你理解每个节点背后发生了什么 def run(): start_program(path="calc.exe", workdir="") wait(seconds=1.5) image_result = find_image(template="btn_5.png", threshold=0.85, region="fullscreen") if image_result.found: mouse.click(x=image_result.center_x, y=image_result.center_y, button="left") else: log.error("识别数字5失败") wait(seconds=0.5) close_window(title="计算器") run()参数说明:threshold=0.85是模板匹配的相似度阈值,0.85 表示匹配相似度达到 85% 才认定找到。这个值我后面会反复调,识别目标颜色单一、背景干净就提到 0.9,目标区域复杂或者存在多窗口干扰就降到 0.75 左右。region="fullscreen"表示在整个屏幕上搜索,如果知道目标大概在屏幕哪个区域,一定要改成指定区域,既提速又防误判。这段逻辑也解释了 Automation Operation 的实际运行机制——每执行到识别节点,它都会实时截取当前屏幕,然后用模板图在当前截图中做匹配,匹配到的中心点就是鼠标点击坐标。
2.3 鼠标动作与键盘动作的参数设计:延迟、轨迹、按键组合
跑通第一个点击之后,接下来最值得花时间调的是鼠标动作和键盘动作的参数。先说鼠标。Automation Operation 的鼠标点击动作里有三个容易忽略的选项:移动方式、移动速度和点击间隔。移动方式默认是“瞬间移动”,也就是鼠标直接从当前位置跳到目标点,这在大多数自动化场景下没问题;但如果目标软件有鼠标悬浮检测、会响应悬浮事件,瞬间移动就容易漏掉悬浮态。我一般会选“按曲线移动”,移动速度设成 30 到 50 像素每帧,模拟真实人手从屏幕一角划过去的轨迹。曲线移动的兼容性更好,代价是每次执行慢几百毫秒,但对需要鼠标悬浮后才弹出的菜单,这种慢是必要的。
键盘动作的参数我踩过坑。工具里的“发送按键”节点支持普通字符和组合键,比如Ctrl+Alt+S。关键的是按键间隔设置,默认值是 10 毫秒,也就是每个键按下到抬起之间的时间。大多数文本框输入没问题,但遇到老系统里的 Web 控件或者 Java Swing 控件,按键间隔太短会丢字符。我习惯把这个值调到 30 毫秒以上,尤其输入 18 位身份证号等长文本时,丢了位只能整段重来,成本更高。组合键我则关注“按键保持时间”,一些老客户端识别不了太快按下太快的组合键,保持时间至少设 200 毫秒。
参数层面,我把鼠标移动速度、按键间隔、识别阈值这三项视为一个系统的整体——识别慢一点,鼠标移动快一点,整体时间可以从 3 秒压缩到 2 秒;反过来也一样。不要单独死磕某一个参数,最好用真实业务场景跑十遍,统计平均耗时。这是可复现性最强的调参路径。
3. 把“识别”真正用好:图像定位、区域限定与多显示器坐标系
3.1 模板图片的截取规范:尺寸、内容边界和灰度干扰
图像识别节点的效果好不好,60% 取决于模板图截得对不对,30% 取决于阈值,10% 才是识别算法。我第一次使用直接截图按钮的四五个像素,结果识别率惨不忍睹,后来才明白模板图的内容边界和尺寸直接影响匹配可信度。
截取模板图首先要保证内容完整。比如识别一个“确认”按钮,要把整个按钮外围轮廓包含进去,四周留 2 到 4 像素的边距。如果只截了按钮中间几个字,图片特征太少,屏幕上任何长得像这几个字的区域都可能是误报目标。其次要避免截取动态内容。典型错误是把系统日期、头像这类会变化的区域当作模板特征,下次运行日期变了就匹配不上。我通常只截目标区域左上角到右下角的静态纹理,比如按钮的下边框和右侧图标,这些部位基本不会变。第三,模板尺寸尽量控制在 30×30 以上。小于这个尺寸的特征点太少,大于 200×200 又可能包含太多背景,匹配时受窗口缩放影响明显。
Automation Operation 的识别节点支持彩色匹配和灰度匹配两种模式。彩色匹配对颜色变化敏感,适合界面主题固定、背景干净的软件;灰度匹配忽略颜色差异,只比对形状和明暗分布。我的经验是,老 ERP 系统界面配色比较固定,用彩色匹配;Web 页面或者有主题换肤功能的客户端,用灰度匹配。两者识别耗时差不了多少,但准确率在不同场景下差距很大。
3.2 用查找区域做限定:为什么 fullscreen 是性能杀手
全屏查找表面省事,实际上是最容易出问题的方案。第一是慢。1920×1080 分辨率下做一次全屏模板匹配,消耗的时间是限定区域的 10 到 20 倍。如果你的流程里有十几个识别节点,累积延迟直接让自动化变成龟速。第二是误识别率高。整个屏幕上相似元素多,一个“确定”按钮在不同弹窗里可能出现多次,全屏找时工具默认返回第一个匹配结果,不一定是你要的那一个。
我一般会在编排流程时先手动打开目标界面,确认目标元素位于屏幕大概哪个区域,然后在识别节点的“查找区域”参数里设定一个缩小后的矩形。比如目标是右上角的搜索栏,区域就设成(右半边屏幕)或者直接填四个边界值。有些版本的 Automation Operation 支持运行时动态获取当前窗口位置,再以窗口原点作为参考坐标系——这个功能强烈建议用,它能把区域限定到窗口内部,窗口挪到第二显示器也能正确定位。做法是给流程加一个“获取窗口位置”节点,输出左上角坐标,后续识别节点的区域偏移基于这个坐标计算。
这些参数的填写逻辑和 OpenCV 的matchTemplate几乎一样,只是 GUI 工具把多尺度缩放和金字塔搜索封装掉了。如果你后面想排查为什么识别慢,打开工具自带的日志,看每个识别节点实际耗时,凡是耗时大于 500 毫秒的基本都是全屏搜索。
3.3 键盘输入与识别组合:做一个稳定的“定位→输入→校验”动作
单个识别节点只能解决“找到目标”,业务往往还需要在目标位置输入内容。Automation Operation 的常规做法是:识别节点后接一个“键盘输入”节点,输入器的焦点自动就定位到识别出的区域。
这个组合里有三个细节要注意。细节一,识别节点找到目标后,工具默认会把鼠标移到目标中心,但不会自动点击。如果目标是个输入框,需要先补一个“左键单击”节点让输入框获得焦点,再发送按键。否则键盘输入直接落到当前系统焦点控件上,而系统焦点往往还在上一个窗口。细节二,输入内容包含中文时,部分老版本工具有编码问题。我遇到的典型表现是识别节点正常、鼠标点击正常,但中文输入到界面变成乱码。解决方法是改用“粘贴文本”模式,把内容先复制到剪贴板再模拟Ctrl+V,绕开键盘事件注入层面的中文 IME 兼容问题。细节三,输入完成后建议加一个“截屏保存”节点,把执行结果截图存到日志目录。这不算功能必需,但自动化操作出问题时,回看截图定位比看纯日志高效得多。
# 同样的,这是从 Automation Operation“定位→输入”流程导出的伪代码参考 # 展示的是识别输入框、点击聚焦、粘贴文本、校验结果的组合逻辑 def fill_form(): field = find_image(template="input_customer_name.png", region=(10, 10, 800, 600)) if not field.found: log.warning("客户名称输入框识别失败,尝试备用模板") field = find_image(template="input_customer_name_v2.png", region=(10, 10, 800, 600)) mouse.click(field.center_x, field.center_y, button="left") wait(0.2) clipboard.set_text("张三科技有限公司") keyboard.press(hotkey="Ctrl+V", hold_time=0.15) wait(0.3) screenshot.save(path="runs/step_003.png") fill_form()逻辑说明:这段伪代码先是按主模板查找输入框,找不到就降级到备用模板,这是我在 GUI 编排里常用的容错写法。找到后单击聚焦,等待 200 毫秒让输入框进入可输入状态,然后走剪贴板粘贴而不是逐字输入。最后保存截图,用于事后比对。参数上值得留意的是hold_time=0.15,组合键按下时间太短容易被目标系统判定为无效按键,太长又可能触发长按功能。0.15 秒是我在多数 Windows 客户端上验证过的中庸值,个别系统需要调整到 0.2 以上。
4. 避坑实践:坐标偏移、识别漂移与执行时序的五条血泪经验
4.1 鼠标点击偏移半个屏幕:高 DPI 缩放惹的祸
现象:脚本在分辨率为 1920×1080、缩放 100% 的机器上正常执行,换到一台 2560×1440、缩放 150% 的电脑上,识别节点找到的位置是对的,但鼠标实际点击点比识别结果偏右下移了几百像素,直接点到了错误按钮上。
原因:截图匹配发生在真实物理像素层面,而鼠标事件的注入坐标经过了 Windows DPI 虚拟化缩放换算。Automation Operation 如果没有做坐标系的 DPI-aware 处理,就会出现识别坐标是物理像素、鼠标注入是虚拟坐标的错位。
解决:第一优先级,在工具设置里找到 DPI 缩放模式,尝试切换为“系统 DPI 感知”或“每显示器 DPI 感知”。第二优先级,右键工具 exe 文件,在兼容性里勾选“替代高 DPI 缩放行为”,缩放执行选“应用程序”。这两个操作二选一,改完重启工具。从那以后我布置任何新机器,第一步就是检查显示缩放比例,不为 100% 的先统一改设置,再跑回归测试,而不是直接信任旧脚本。
4.2 图像识别偶尔追到错误窗口:模板图里带了边框阴影
现象:同样的流程,十次里有八次正常,两次识别到界面右上角的关闭按钮上去了。日志显示匹配相似度都超过了阈值,但目标根本不是同一元素。
原因:我最初截取模板时把窗口的一个圆角边框连同阴影一起截进去了。尺寸小的模板图在灰度匹配下,圆角和阴影组合出来的形状和关闭按钮的叉形轮廓局部相似度很高。而阴影区域是渐变半透明的,在不同时机截屏时受系统渲染影响会有细微差异,所以不是每次都会误判,飘忽不定。
解决:重新截模板图,只保留按钮内部的文字和主要图标特征,四周留边控制在 2 像素。同时把识别阈值从 0.85 提高到 0.9,并限定查找区域到业务弹窗的右下角范围。如果还是偶发误判,在流程里加一个“校验节点”——识别完成后读取该区域文本,确认是预期内容再继续。这属于用流程逻辑兜底匹配算法的不足,是我最推荐的稳妥方案。
4.3 脚本运行到一半突然停下:等待节点和焦点抢占有直接关系
现象:包含 20 个节点的流程,跑到第 7 个识别节点时经常卡住不动,判断是识别找不到目标。但手动把窗口切换到前台,立即重新执行第 7 步又能顺利通过。
原因:前一个节点点击后触发弹窗,弹窗内部有异步加载过程,界面上按钮处于可点击状态但点击后的业务逻辑还没准备好。我原来设置的等待时间是固定值 2 秒,有时网络快 1 秒就绪,有时网络慢需要 3 秒。同时,新弹窗出现时会抢占 Windows 前台焦点,Automation Operation 的识别节点在窗口失去前台焦点时截屏内容不完整,匹配大概率失败。
解决:把固定等待改成“轮询等待”,做法是拖一个“重复执行”节点包裹住识别逻辑,每轮先检测目标是否存在,不存在等 500 毫秒再查,最多循环 10 次。这种模式把固定等待变成条件等待,只在目标真正就绪时才继续下一步。我现在编排所有和弹窗交互的流程,都会在弹窗出现后加至少一轮目标检测,而不是盲目 sleep。这几乎是避免“一半就停”的最有效手段。
4.4 长时间无人值守后越跑越慢:日志文件无限膨胀
现象:一个无人值守任务每半小时跑一次,跑了两天之后,单次执行耗时比最初多了 3 倍。识别节点倒是没失败,就是每个节点响应都慢。
原因:任务里每步截图都追加写入日志文件,两天累计了上千张截图和几十 MB 文本日志。文件变大后,工具每次写日志前做文件打开和定位写入的操作开销显著增加。更隐蔽的是,截图文件一直保留在内存缓冲里没有释放,工具整体占用的内存从 100 MB 涨到 700 MB。
解决:在流程末尾增加一个“日志清理”节点,保留最近 100 条记录,删除更早的截图文件和日志行。或者更简单——在工具设置里开启“日志按大小自动滚动”,把单文件上限设为 5 MB。这之后我养成的习惯是每周清理一次运行目录,自动化程序自己不会做这件事,得靠流程编排时预留资源回收节点。
4.5 相似度阈值改了没用:模板图缓存没有及时刷新
现象:我重新截取了更精确的模板图,替换掉旧的模板文件,但重新运行流程发现识别行为没有任何变化,依然沿用旧模板的匹配结果。
原因:工具把模板图加载后缓存在内存里,替换了磁盘文件但进程没重启,缓存还是旧版本。这在 GUI 工具里非常常见,特别是长时间开着流程设计器反复调试时。
解决:替换模板文件后手动重启 Automation Operation,或者在流程开头加一个“强制刷新资源”节点,确认日志输出里模板的加载路径是对的。我的习惯是每次改模板后先打开预览窗口,确认新的模板图像确实生效再跑全流程。多花十秒,能避免在错误模板基础上反复调参,那才是真正的时间黑洞。
5. 给流程加“后悔药”:验证点、异常分支与一个收尾习惯
自动化脚本做得再稳,也难免遇到目标系统临时升级、界面文案变化这种不可控事件。最后一节我不讲新功能,只讲怎么用现有节点搭出“可回退”的流程结构,这也是我判断一个自动化方案是否适合生产落地的分水岭。
第一个技巧是给每个关键步骤加“验证分支”。比如点击“提交订单”按钮后,原流程直接进入下一步;现在我在其后加一个“识别成功标志”的菱形判断节点——识别目标界面是否出现“订单提交成功”字样,出现就走正常流程,没出现就跳到异常分支。异常分支不直接报错,而是先截屏存档,随后尝试按一次 ESC 键关闭可能弹出的错误提示框,再重新识别一次。这两次机会能覆盖相当一部分偶发弹窗和页面加载延迟问题。工具每个判断节点都支持“执行成功”和“执行失败”两条出边,这个能力和编程语言里的if/else是等价的,不用白不用。
第二个技巧是细化异常分支的恢复动作。以前我认为失败后截图、发一个日志就够,后来发现完全不够——无人值守时日志不会被立刻看到,隔天再处理,当时的现场已经消失。现在我要求流程在连续失败两次以上时,自动关闭并重启目标业务系统,然后回到流程起始位置重新执行。这就需要“循环”和“计数”两个节点配合。循环次数上限设为 3,超过以后才真正终止任务并发送桌面通知,这相当于武断的终断条件,防止异常循环把系统资源耗尽。
第三个技巧和键盘状态有关。自动化脚本跑完之后,如果最后的键盘动作还按着某个修饰键,比如 Alt 键没释放,后续人手操作鼠标会出现各种灵异现象——点击变右键菜单、快捷键莫名触发。我习惯在流程末尾强制加一个“释放所有修饰键”节点,模拟按下并释放 Alt、Ctrl、Shift 各一次。这不算复杂功能,但救过我好几次,尤其是脚本被手动中断后系统键盘状态错乱。手动中断时工具不会自动补发释放事件,只能靠一个收尾动作来兜底。
如果你也常做这类桌面自动化,我的建议是不要急着堆复杂流程——先把一个只有“识别、点击、等待”的最小任务跑满五十次,统计失败率和失败模式,再决定要不要加复杂分支。从那以后我每次发布新流程,都强制自己跑一遍“模拟失败”测试:故意把模板图片换成乱码,确认异常分支真的会按预期触发;故意让目标程序不启动,确认重试逻辑没有死循环。这套流程走完,心里才有底。希望这篇笔记能帮你少踩几个坑,把 Automation Operation 2.60 真正用起来。遇到类似问题欢迎对照检查,也祝你一次跑通。
本文还有配套的精品资源,点击获取