☰
Automation Operation 2.60 桌面自动化配置:识别、回放与避坑指南
2026/10/8 4:59:16 网站建设 项目流程

简介:Automation Operation 2.60 是一款面向办公人员、测试工程师及RPA初学者的可视化自动化操作工具包。它通过拖拽式GUI降低使用门槛,支持鼠标键盘模拟、图片/OCR/颜色识别、窗口控制、浏览器自动化与后台执行,并集成变量管理、Excel数据交换、录制回放及模板管理,可应对数据抓取、流程自动化、软件测试等重复性场景。压缩包共414个文件,以JavaScript脚本、DLL动态库、JSON配置、CSS样式及可执行文件为主,还包含PowerShell脚本、HTML页面和说明文档,整体约742.75MB,目录结构清晰,便于按模块调用与二次开发。目前已有507人学习下载,适合希望快速搭建自动化流程、提升重复操作效率的个人用户或团队参考使用。

1. 为什么我会把 Automation Operation 2.60 当成桌面自动化的备选方案

每天在 Windows 上重复"打开窗口、点按钮、填表单、点保存"的人,多半都动过用 Automation Operation 2.60 这类自动化工具的念头。它的卖点很直接:可视化 GUI 把鼠标、键盘、识别串成流程,不用写复杂代码就能上手。

但我先泼盆冷水:纯录制回放的成功率并没有宣传那么高。我最早拿它录"从 Excel 往网页搬数据",录的时候一切正常,回放两次就开始点错地方、输入框没激活就敲键盘。问题不在工具,在没搞懂坐标、时序和识别之间的配合。

这篇笔记适合三类人:做大量重复录入的运营和文员,给内部系统做冒烟测试的测试,以及懒得写完整脚本的开发者。下面按原理、第一个任务、识别配置、避坑、进阶的顺序,给出一套能挂机的方案。

2. 先拆开它的三个引擎:鼠标、键盘与识别到底在底层做什么

用 GUI 工具录脚本不需要懂原理,但回放失败时,不懂原理就无从下手。Automation Operation 2.60 的能力拆开看就三块:鼠标、键盘、识别。这一章把每块背后"工具是怎么想的"讲清楚,每个点都对应你后来会遇到的一种翻车现场。

2.1 鼠标操作不是"模拟点击"这么简单:坐标、轨迹与点击三要素

鼠标自动化的第一件事是坐标。这类工具通常提供两种坐标模式:屏幕绝对坐标和窗口相对坐标。绝对坐标以屏幕左上角为原点,录的时候"开始"按钮在 (800, 500),窗口一挪就废了;窗口相对坐标以目标窗口左上角为原点,窗口移动后坐标自动换算。能用相对坐标的地方尽量别用绝对坐标。

我一般建议新手优先用"窗口标题定位 + 相对坐标"的组合。工具在执行前先找到标题匹配的窗口句柄,再基于窗口原点换算坐标,这样脚本跨窗口、跨分辨率挪动时还兜得住。第二步是理解鼠标事件的分层。常见做法里鼠标模拟分三层:

  • 系统级模拟(SetCursorPos 加 mouse_event),光标真的会动,兼容性最好,但目标窗口必须在前台,权限不够时会被拦;
  • 消息级模拟(PostMessage/SendMessage 往窗口发点击消息),光标不动也能触发,但很多自绘控件、网页控件根本不响应消息级点击;
  • 驱动级模拟,走硬件事件链路,最接近真人操作,普通可视化工具很少开放。

Automation Operation 2.60 这类 GUI 工具默认走系统级模拟,所以你会看到回放时鼠标真的在屏幕上自己动。这也意味着脚本运行期间你不能去抢鼠标,否则步骤会串。

第三件事是点击三要素:坐标、按键、按下时长。间隔太短(小于 10ms),有些程序会当成抖动直接忽略;间隔太长(超过 500ms),可能被理解成拖拽或长按。常规做法是按下后保持 30 到 80ms 再抬起。还有鼠标轨迹这个隐蔽点:真人移动鼠标不是瞬移,途中会经过中间位置,触发悬停事件。如果你录了"鼠标移到菜单项上展开子菜单"的操作,回放时工具把光标直接瞬移过去,子菜单可能根本没展开。解决方法是把移动拆成几步,或者保留录制时的原始轨迹。

# 带轨迹缓冲的点击:分步移动 + 到位停顿 + 按下保持 def smart_click(x, y, button="left", hold_ms=50): move_mouse_in_steps(x, y, steps=5) # 分 5 段移动,触发悬停事件 time.sleep(0.15) # 到位后缓冲,等菜单/按钮进入可点状态 press_button(button) # 按下目标按键 time.sleep(hold_ms / 1000) # 保持按下状态 50ms release_button(button) # 抬起,形成一次完整点击 time.sleep(0.1) # 点击后缓冲,避免下一步过早执行

参数说明:steps 控制移动分段数。界面元素之间有悬停联动就调大到 10 到 15 段,普通按钮 3 到 5 段足够。hold_ms 是按下保持时长,网页里"长按才有反应"的控件可以调到 200ms,普通情况保持默认。到位后的 0.15 秒缓冲很关键,很多脚本"点不上"是因为点击事件比界面就绪早了一步。拿鼠标宏的思路来理解就顺了:宏录的是"按键序列",而这类工具录的是"坐标 + 事件 + 时机"的完整序列,只是把时间轴换成了可编辑的步骤列表。

2.2 键盘自动化:按键映射、组合键与输入法状态

键盘事件比鼠标简单,但有两个坑几乎人人踩过。

第一个坑是组合键的按下顺序。标准做法是:先按修饰键(Ctrl、Alt、Shift),再按主键,然后先抬主键,最后抬修饰键。有些程序在读取按键时会校验修饰键状态,如果你顺序写反——先按 C 再按 Ctrl——收到的就是一次普通按键加一次无效的修饰键事件。我见过有人录 Ctrl+C 回放时老是复制失败,展开步骤才发现工具把两个键写成了并行按下。

第二个坑是输入法。往输入框填文字时,如果目标窗口正处于中文输入法状态,发进去的每个字母先进输入法组字窗口,可能变成拼音组合或被吞掉。常见的绕行方案有三种:输入前先模拟一次输入法切换,把状态固定到英文;让工具走剪贴板绕行——把内容放进剪贴板,再模拟一次 Ctrl+V,这对绝大多数文本框通用;对不支持粘贴的控件才逐键输入,而且逐键输入前必须确认焦点和输入法状态。

第三个能力是键盘映射。这类工具允许你给按键定义别名,把 F8 映射成一段组合动作。真正有用的场景是适配目标软件的非标快捷键:有些工业软件只在特定布局下响应物理键位,用映射把动作重新绑一次,改布局时不用改整条脚本。

# 组合键发送的标准顺序:修饰键先下,修饰键后抬 def send_hotkey(modifier="ctrl", key="c"): key_down(modifier) # 第一步:按下修饰键 time.sleep(0.02) # 给系统分发修饰键状态留时间 key_down(key) # 第二步:按下主键 key_up(key) # 第三步:先抬主键 key_up(modifier) # 第四步:再抬修饰键 time.sleep(0.05) # 给目标程序留出快捷键处理时间

参数说明:0.02 秒是给系统分发事件用的,省略或太短可能在快速连续操作时丢事件;最后 0.05 秒是为了避免紧接着的鼠标点击抢在快捷键处理完成之前执行。如果目标程序反应慢,把这两个值翻倍,比盲目在每步之间加长 sleep 要有效。

2.3 识别能力为什么比固定坐标可靠:图像匹配与 OCR 的底层逻辑

识别是这类工具从"玩具"变成"生产工具"的分水岭。它包含两种东西:图像匹配和文字识别(OCR)。

图像匹配的原理是模板匹配:你截一张目标按钮的小图,工具在屏幕或指定区域里滑动搜索,找到相似度最高的位置返回坐标。相似度阈值是 0 到 1 之间的值,默认一般在 0.8 到 0.9。阈值太高,按钮稍微有点阴影变化就找不到;太低,形状相近的图标会被当成目标。模板匹配对缩放和旋转敏感,同一个按钮在普通屏和高分屏下大小不同,模板就可能失效,第 4 章会讲参数怎么调。

OCR 则是把屏幕上一个矩形区域交给识别引擎,返回字符串。它的价值在于处理动态内容:网页表单里实时变化的提示文字、设备面板上的仪表识别读数、软件版本号等。识别结果可以用来判断"当前处于哪个界面",从而决定下一步动作。

为什么识别比固定坐标可靠?坐标是"假定界面不变",识别是"先确认再行动"。固定坐标的脚本遇到窗口移动就是废的,而识别先找目标再计算相对位置,窗口挪了也能点对。代价是速度:全屏做一次图像匹配通常要 200 到 500ms,OCR 更慢,所以识别步骤不能滥用,只在界面状态不确定的关键节点插入。

# 把"找图"变成带超时的等待动作 def find_image_with_timeout(template, timeout=5000): start = time.time() while time.time() - start < timeout / 1000: pos = find_image(template) # 单次搜索,找不到返回 None if pos: return pos time.sleep(0.3) # 轮询间隔 return None

参数说明:timeout 以毫秒为单位传入,内部换算成秒;轮询间隔 0.3 秒是平衡响应速度和 CPU 占用的常见取值。页面加载超过 5 秒的场景,把 timeout 调到 10000 再配合失败分支,而不是改小间隔去"抢时间"。

3. 在 Automation Operation 2.60 里跑通第一个自动化任务:录制到回放

这一章带你把第一个任务完整跑一遍。以"打开记事本 → 输入文字 → Ctrl+S 保存"为例,这是最不容易受外部因素干扰的流程,适合先验证工具本身链路是否正常,再换到真实业务上。

3.1 开始录制前的准备:界面布局与全局参数

打开工具后你会看到四块区域:左侧是步骤列表,录制的动作按顺序堆在这里;中间是属性面板,选中某一步后在右侧改参数;上方是运行控制区,提供录制、停止、单步、回放按钮;还有一个脚本预览视图,把步骤翻译成可读文本。第一次用的人容易把步骤列表当成最终产物,其实真正的工作在属性面板里逐个步骤调参数。

录制前先处理三件事。第一件,把 Windows 显示缩放处理掉:右键工具程序,打开属性里的兼容性设置,勾选"替代高 DPI 缩放行为",缩放执行选"系统"。不然录制时取的坐标和回放时实际渲染的坐标之间会隔着一层缩放偏差。第二件,把系统输入法固定成英文模式,或者记下录制时的输入法状态。第三件,在全局设置里确认三个参数:默认超时建议 5000ms,失败重试次数建议 1 到 2 次,日志级别选"详细"。

工程组织上,我一般一个业务动作建一个工程,不要把所有场景塞进一个巨大脚本。工程命名按"对象_动作"来,比如"订单页导出_每月跑批",脚本多了也好找。变量要分清全局和局部:局部变量用于单条步骤的参数,全局变量存用户名、路径这些跨步骤复用的值。

3.2 最小可复现任务:录制"打开记事本 → 输入文字 → 保存"

操作步骤固定在七个动作上。新建工程后点录制按钮,工具开始记录你接下来所有鼠标和键盘操作。你手动执行一次目标流程:按 Win 键打开开始菜单,输入 notepad,回车;等记事本窗口出现,在编辑区输入一段测试文字;按 Ctrl+S 弹出另存为对话框,选好路径,点保存。做完后停止录制。

不需要每个动作都录得完美。比如打开记事本,你手动点开始菜单再找应用图标,中间会有大量鼠标移动和点击,这些在回放时没什么用。录制完成后打开步骤列表,把"找图标"相关的移动步骤删掉,只保留 Win 键按下、输入 notepad、回车三条。删减原则是:保留会产生状态变化的事件,删掉为了到达那个位置而发生的轨迹。

步骤录制时的动作回放时的处理
1Win 键唤出开始菜单保留,窗口状态从这里起步
2输入 notepad保留
3回车保留
4点击记事本编辑区保留,改为窗口相对坐标
5输入测试文字保留
6Ctrl+S保留
7在另存为对话框选路径建议删除,改为等待窗口 + 直接输入路径

脚本视图里,录制结果大致长这样:

# 录制产生的步骤序列(脚本视图示意) steps = [ {"type": "keyboard", "action": "win_key", "keys": ["win"]}, {"type": "keyboard", "action": "input", "text": "notepad"}, {"type": "keyboard", "action": "key", "key": "enter"}, {"type": "mouse", "action": "click", "pos": (300, 200), "coordinate": "window_relative", "window": "无标题 - 记事本"}, {"type": "keyboard", "action": "input", "text": "hello automation operation"}, {"type": "hotkey", "action": "send", "keys": ["ctrl", "s"]}, ]

逻辑说明:前三条启动记事本,第四条点击编辑区获取焦点,后两条输入和保存。注意点击编辑区那条用的是 window_relative 坐标,窗口相对坐标让脚本在记事本窗口位置变化时仍然有效。参数说明:input 动作的 text 字段支持转义字符,换行用 \n;hotkey 的 keys 是数组,顺序按修饰键在前。保存对话框弹出后通常需要等待,如果回放时对话框还没出现脚本就继续了,可以在 Ctrl+S 之后手动插入一个"等待窗口出现"步骤,目标是"另存为"对话框,超时设 5000ms。这比死等 2 秒可靠,因为等待条件是"界面就绪"而不是"时间够长"。

保存对话框出现后,用按键输入完整路径再点保存,会比录制时手动选目录更抗环境变化。把路径存在全局变量里,后续每次换路径只改一处。

3.3 第一次回放就翻车的三个原因

回放按钮按下去,脚本开始自己跑。新手第一次回放,常见的翻车现场有三个。

第一个是工具窗口挡住目标。录制时记事本和工具窗口都开着,回放时工具窗口在最前面,鼠标点到的其实是工具面板。解决方法是回放前把工具窗口最小化,或者勾选"运行时隐藏主界面"选项。如果工具提供了"回放前自动隐藏"设置,一定要打开,这是这条坑的根治办法。

第二个是录制时的手动停顿被录进去。人操作时思考时间不均匀,点完一个按钮会想一下再点下一个,录制功能会把超过一定时长的停顿转成"等待"步骤。回放时如果某次界面加载比录制时慢,这些等待步骤的时间可能不够用,也可能让脚本拖沓。我一般会浏览步骤列表,把所有纯等待步骤删掉,替换成 3.2 里那种"等窗口出现"的步骤。

第三个是输入法状态不一致。录制时开着中文输入法,字母直接进记事本;回放时工具往系统发送键盘事件,中文输入法会把字母拦截进组字窗口。表现为字符没进记事本,回放完编辑区是空的或出现一段拼音。解决方法是把系统默认输入法切到英文,或者在输入动作前加一个输入法切换步骤。这个坑在录中文内容时尤其毒,因为很多工具录制时存的是"键盘事件"而不是"文本内容",回放环境一变就丢字。

4. 把识别用起来:图像匹配与 OCR 的落地配置

固定坐标脚本的寿命以"下次界面改版"为界,识别驱动脚本的寿命以"UI 视觉特征不消失"为界。Automation Operation 2.60 的识别能力要配置得当,脚本才敢挂机跑。

4.1 图像匹配的四个必调参数:相似度、查找区域、超时与失败动作

图像匹配在工具里通常以"找图"步骤存在:一张截图、一个查找范围、一个相似度阈值,跑完返回坐标。要让这个步骤在生产环境里扛得住,四个参数必须逐个调过。

相似度阈值是最关键的一个。初始值我一般设 0.85,然后观察一次成功匹配时工具输出的实际相似度。如果实际值保持在 0.9 以上,就把阈值往 0.88、0.90 提,提高精度减少误匹配;如果实际值在 0.8 附近飘,说明模板特征不够独特,先换模板而不是降阈值。阈值降到 0.75 以下要警惕,误匹配率会明显上升,两个长得像的按钮可能互相认错。

查找区域的收益常被人忽略。全屏搜索的耗时是区域搜索的几倍到几十倍,而且全屏意味着全屏范围内相似的图标都可能成为干扰。凡是目标出现在固定窗口内的情况,把查找区域限定到那个窗口的工作区;目标按钮在窗口里位置相对固定的话,更进一步框一个按钮附近的矩形。区域越小,速度和可靠性同时提升。

超时和失败动作是配套的。超时定义找图步骤最多等多久,失败动作定义等不到之后干什么。常见做法是超时设 5000ms,失败动作选"重试"并限定 2 到 3 次,重试之间间隔 500ms,连续三次找不到就跳转到"截图并退出"分支。这样脚本不会因为一次界面卡顿就立即失败,也不会在界面真正出错时无限重试。

参数建议初始值调大调小使用场景
相似度0.85更严格、更易漏检更宽松、更易误检静态界面 0.90,动态背景 0.80
查找区域窗口工作区更慢更快更准按钮固定出现时尽量缩小
超时5000ms更耐等更快失败页面加载时间不定时调大
失败动作重试 2 次更容错更快暴露问题长时间挂机时重试次数调大

4.2 OCR 识别的三个落地要点:中文、数字、灰度预处理

OCR 步骤通常独立于找图存在。工具对屏幕指定区域做文字识别,返回字符串。参数没找图那么复杂,但落地上有三件事要处理。

中文识别先要注意字体和字号。工具内置模型对印刷体中文识别率尚可,但小于 12px 加抗锯齿渲染的字容易识别错。我识别版本号时踩过坑,"1.8.3" 被读成 "1.8.8",就是字号太小加背景反色。应对办法是识别前先做放大和灰度预处理,把目标区域的文字放大到能看清再送去识别。数字和仪表识别优先限制识别区域:仪表识别的场景里,把区域精确框到表盘读数位置,能避免把品牌字样和刻度线也读进去。

第二个要点是灰度与对比度。彩色界面背景复杂时直接识别经常混入噪点。先转灰度、再做对比度增强,识别率提升通常比换模型更明显。像素差异大的目标区域用二值化,把文字变成纯黑纯白再识别。网页里带干扰线的验证码文字,也属于复杂背景这一档,预处理不到位时识别成功率并不高,别指望一个裸 OCR 步骤能扛住。

第三个要点是结果后处理。OCR 返回的字符串常有前后空白、全角半角混用的问题。常见做法是拿到结果先去除首尾空白,再用正则只提取需要的部分。数字场景只保留数字、小数点和负号;路径场景保留字母、数字、斜杠和点。识别结果为空时不要直接判定失败,再补一次重识别或截图存档,让日志留证。

# OCR 结果的后处理:只留数字和负号,空结果主动失败 raw_text = ocr_recognize(region=(100, 200, 60, 20)) # 识别指定区域 value = re.sub(r"[^0-9.\-]", "", raw_text).strip() # 过滤非数字字符 if value == "": save_screenshot("ocr_empty.png") # 存档现场供排查 raise OcrEmptyError("识别为空,截图已保存 ocr_empty.png")

逻辑说明:先识别指定区域,再正则清洗,最后对空结果做带截图的失败处理。region 参数是 (左上角 x, y, 宽, 高),单位像素。参数说明:区域大小不是越大越好,框到目标文字的外接矩形最好;如果目标区域位置会变,先用 4.1 的找图锁定文字附近的一个锚点,再把 region 用锚点坐标加偏移算出来,而不是写死坐标。这样窗口移动后 OCR 区域依然跟着目标走。

4.3 识别 + 鼠标键盘联动:做一个"等按钮出现再点击"的可靠循环

把前面两组能力合起来,最典型的生产用法是"等按钮出现再点击"。比起固定等待,这个模式把"界面是否就绪"的判断完全交给识别,脚本只在按钮真正可点时才会点下去,天然免疫网络延迟和页面加载速度波动。

写这个循环要明确两个细节:一是每次搜索之间加轮询间隔,避免对屏幕做密集连续扫描,把 CPU 占用拉高;二是点击位置用"图像中心 + 偏移"。找到的坐标是图片左上角,按钮的实际点击位置应当在图片中心,有时还要往右下方偏移几像素,避开按钮边缘的圆角区域。

def wait_and_click(template, timeout=10, offset=(0, 0)): """等待模板图像出现,然后点击其中心偏移位置。""" start = time.time() while time.time() - start < timeout: pos = find_image(template, threshold=0.85) # 返回左上角坐标 if pos: center_x = pos[0] + (TEMPLATE_W // 2) + offset[0] center_y = pos[1] + (TEMPLATE_H // 2) + offset[1] smart_click(center_x, center_y) # 复用 2.1 的带缓冲点击 return True time.sleep(0.3) # 轮询间隔,降 CPU 占用 save_screenshot("wait_click_timeout.png") return False

逻辑说明:find_image 返回模板左上角坐标,TEMPLATE_W 和 TEMPLATE_H 是模板图像的宽高,中心点坐标由左上角加一半尺寸算出,再加上 offset 做微调。超时没找到时存档截图并返回 False,由上层决定重试还是退出。

参数说明:timeout 单位是秒,10 秒适合大部分页面加载场景;offset 一般设 (0, 0),只在按钮可点区域不在中心时使用,比如文字在左、点在右侧箭头的情况。这种"找图 + 偏移 + 带缓冲点击"的组合,比直接录坐标点按下去的可靠性高一个量级,我几乎所有会重复用到的脚本都是这个骨架。

5. Automation Operation 2.60 高频故障避坑实录:现象、原因与解决

挂机跑自动化,拼的不是脚本写得多漂亮,是故障出现后能不能在几分钟内定位。下面是五个高频问题,都按"现象 → 原因 → 解决"写。定位故障时先看日志里最后一条步骤类型,再对照这张表选排查方向:

故障特征优先怀疑先查什么
脚本卡住不动等待类步骤死等超时设置、模态对话框
点击位置偏移坐标模式与缩放相对坐标、DPI 设置
鼠标无响应但键盘正常权限隔离工具与目标程序权限
找图变慢或匹配错模板失效阈值、区域、模板截图
循环停不下来退出条件不成立迭代上限、最大超时

5.1 脚本跑几分钟后忽然卡住不再响应

现象:前几步正常,跑到某个鼠标点击步骤后光标停在原地,工具界面假死,任务管理器里显示脚本进程 CPU 占用异常。

原因:最常见的是点击的目标窗口弹出了模态对话框,把界面线程阻塞了,后续等待窗口的步骤一直拿不到目标窗口句柄,形成死等。其次是步骤里有个找图操作在全屏范围反复重试,相似度阈值设太高一直匹配不上,把 CPU 拖满。

解决:给所有等待类步骤加上超时上限,超时后强制跳转到日志和退出分支;把全屏找图改成区域找图;模态对话框这类情况,加一个"检测到对话框就关闭它"的前置步骤。治本的口诀是:任何一步都不能无限等。

5.2 换电脑或改分辨率后所有坐标全部偏移

现象:在 A 机器上跑得好好的脚本,拷到 B 机器上全部点偏,点击落点规律性地向右下偏移一段距离。

原因:录制时的坐标基于原始分辨率和缩放比例。B 机器分辨率不同,绝对坐标直接错位;缩放比例不同,窗口相对坐标也会被系统缩放换算插一脚,坐标采集和事件注入走的两套坐标系不一致。

解决:第一步统一开发机和运行机的显示缩放,两端都设成 100%,或者都选相同的"替代高 DPI 缩放行为";第二步把能换成窗口相对坐标的步骤全部换掉,只在没有可靠窗口句柄的场景保留绝对坐标;第三步对关键按钮改用找图,识别驱动的脚本天然免疫分辨率差异。换机器后先跑一遍自检步骤,把日志里的实际坐标和模板截图一起检查,再放量挂机。

5.3 以管理员权限启动时鼠标模拟失效

现象:脚本本身在普通权限下能跑,一旦右击工具图标"以管理员身份运行",鼠标点击步骤全部无响应,但键盘输入正常。

原因:以管理员权限运行的工具属于高完整性进程,而目标程序是普通权限进程。Windows 的用户界面特权隔离会拦截高权限进程向低权限窗口注入的模拟输入,于是鼠标事件发不进去,键盘事件因为发送链路不同而幸免。

解决:让工具和目标程序以相同权限运行,通常做法是目标程序也以管理员身份启动,或者两边都用普通权限。不要反过来让普通权限工具去操作管理员窗口,那会直接静默失败。验证方法很简单:切换权限后手动执行一次鼠标点击步骤,看日志里注入了几个事件。

5.4 图像识别忽然变慢甚至误匹配

现象:同一个找图步骤,之前 300ms 内出结果,某天突然要 2 秒以上,还把结果匹配到了错误位置。

原因:界面改版导致模板图像特征失效,或者目标按钮背景从纯色变成了渐变或动态图,全屏搜索时干扰项变多。另一个隐蔽原因是色彩模式差异,工具截图时用的抓屏 API 和模板截图时的颜色空间不一致,导致相似度整体下降。

解决:重新截图生成模板,截图时机选在界面静态且无阴影变化的时刻;把查找区域缩小到目标附近;如果怀疑颜色空间问题,把模板和运行时截图都转成灰度再匹配。识别慢还有一个排查方向是同时跑着多个脚本,OCR 引擎是共享的,并发识别会互相排队,看日志确认没有第二份脚本在跑。

5.5 循环条件没写对,脚本开始"自己乱跑"

现象:脚本进入某个循环分支后停不下来,鼠标在屏幕上到处点,随着每次执行还不断截图存日志,把屏幕和磁盘都搞得一团糟。

原因:循环退出条件依赖一个识别结果,而识别结果因为阈值或区域设置不当被当作"始终未找到",脚本只能一直重试;或者退出条件的判断写得过宽,比如用"窗口存在"当退出条件,结果窗口一直存在,循环永远转。

解决:循环必须有双重兜底:一个正常退出条件,一个最大迭代次数或总超时上限,超过上限强制退出。迭代计数器是循环的后悔药,宁可多跑一步检查也不要让它无限转。挂机前先用单步模式把循环路径跑一遍,确认正常分支和异常分支都会走到退出动作。

6. 从"能跑"到"敢挂机":让脚本自己兜底的三个进阶习惯

脚本能完整跑一遍只是起点,敢把它挂在那里过夜是另一回事。三个习惯帮我跨过了那道坎。

第一个习惯是用条件等待替代固定延时。我早期写脚本全是"步骤之间 sleep 1 秒",看起来步骤紧凑,实际上一遇到页面加载波动就崩。后来统一改成"等条件出现再继续":等窗口句柄、等按钮图像、等状态栏文字,等不到就重试,重试超时就退出。改动之后,挂机过夜的成功率明显上升,因为脚本的节奏是被界面状态牵着走的,不是被死时间牵着走的。

第二个习惯是给每一条可能失败的分支写"就地补救"的动作。点击失败先别急着退出,看一眼原因:窗口没了就重新启动目标程序再回到当前步骤;按钮没出来就再等一下;权限弹窗出现就直接点允许。这个思路把"脚本失败后等我处理"变成"脚本自己先处理,处理不了再叫我"。我在脚本里留了一个统一的失败出口:截图存档、写日志、播放提示音,这样睡醒一看日志就知道停在哪一步、因为什么停。

第三个习惯是记录足够多的运行痕迹。每一步的核心参数、每次识别的相似度、每次重试的原因,全部写进日志文件。日志带时间戳,配合关键时刻的截图,故障定位时间能从小时级缩到分钟级。这一步成本很低,收益巨大。

我个人的教训是:不要信"录制完就能用"的宣传,凡是没经过三重测试——单步跑、全流程跑、连续挂机跑——的脚本,都不算完成。现在每写完一个脚本,我都会先拿它处理一遍真实的重复任务,确认三遍通过才交出去。这个习惯帮我挡掉了至少十次会在现场翻车的发布,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询