惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
O
OpenAI News
酷 壳 – CoolShell
酷 壳 – CoolShell
The GitHub Blog
The GitHub Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 聂微东
Engineering at Meta
Engineering at Meta
W
WeLiveSecurity
Hacker News: Ask HN
Hacker News: Ask HN
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
D
Docker
F
Full Disclosure
AI
AI
罗磊的独立博客
博客园 - 【当耐特】
U
Unit 42
S
SegmentFault 最新的问题
Stack Overflow Blog
Stack Overflow Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Palo Alto Networks Blog
博客园_首页
H
Help Net Security
量子位
月光博客
月光博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
F
Fortinet All Blogs
D
DataBreaches.Net
B
Blog RSS Feed
Webroot Blog
Webroot Blog
TaoSecurity Blog
TaoSecurity Blog
S
Secure Thoughts
爱范儿
爱范儿
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Attack and Defense Labs
Attack and Defense Labs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
CERT Recently Published Vulnerability Notes
Martin Fowler
Martin Fowler
Blog — PlanetScale
Blog — PlanetScale
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Securelist

Sekyoro的博客小屋

Agent从入门到开发 Claude Code 实战 网络中有趣的协议 Beyond AI Coding:Harness工程与更好地AI开发 C++重点知识回顾 项目场景扩展(二) OpenClaw学习与实战 项目场景扩展(一) 搭建Agent+MCP+SKILL进行成熟Vibe Coding 分布式IM聊天系统学习 AI工具尝鲜:从"模态爆发"到"生态耕耘" Java、JVM、并发进阶 经典算法题解析 线段树问题 服务器网站备份实战 cls文件编写实战 智力题总结 RAG系统设计 从零开始大数据 资源调度与项目管理平台 凤凰架构学习 博客网站构建指南 k8s学习 Java进阶知识 操作系统与计算机网络经典 构建AI应用程序的框架以及解决方案 MySQL与Redis经典面经 刷题总结篇
从自动化测试到游戏脚本:使用Maafw开发
本文作者: Sekyoro · 2026-06-04 · via Sekyoro的博客小屋

起因是想用自动化的流程做一些游戏任务,右面发现了MAA相关资源并尝试学习开发一些流程。这里总结一下踩坑和经验。

开发环境搭建

最早是从MaaAssistantArknights/MaaAssistantArknights中脱离的框架,目前用于MAA1999/M9A: 重返未来overflow65537/MAA_SnowBreak等等项目。框架在下文中简称maa或maafw.

官方简介如下:

MaaFramework 是基于图像识别技术、运用 MAA 开发经验去芜存菁、完全重写的新一代自动化黑盒测试框架。低代码的同时仍拥有高扩展性,旨在打造一款丰富、领先、且实用的开源库,助力开发者轻松编写出更好的黑盒测试程序,并推广普及。

推荐vscode+neko-para/maa-support-extension进行开发,也方便使用插件测试。

注意,插件有个maa.agentTimeout设置超时时间,如果你发现连接不上,并且一般都是30秒关闭连接,那就有可能是超时了,可以把时间设置更长一点。

image-20260604165943683

重点知识

官方文档1.1 快速开始 | MaaFramework

一般采用JSON+自定义逻辑扩展。JSON中会通过识别+动作定义节点。常用的动作包括点击,按键等等。

任务流水线协议

/assets/resource下包含资源文件夹,例如image,model以及pipeline.

pipeline中定义任务流水线。3.1 任务流水线(Pipeline)协议 | MaaFramework

一个节点包含节点名称,以及识别行为,后续,以及前后等待时间,识别等待时间和最多进入次数等。

对当前节点的 next 列表进行顺序检测,依次尝试识别每个子节点

若本轮均未命中,则继续下一轮检测;直到超时或有节点命中

当检测到某个子节点匹配成功时,立即终止后续节点检测。执行匹配节点的 action 定义的操作

从entry开始,针对第一个节点开始识别并进行动作,若该节点识别命中,并且动作成功,进入next列表。在next列表中循环检测,如果一个子节点识别命中则进入,如果动作成功进入其next列表重复流程,如果失败进入该节点on_error列表。

如果第一个节点识别命中但动作失败同样进入on_error列表,如果识别失败直接终止。

如果某个节点的next列表识别超时,则进入当前节点的on_error列表。如果全都走了一遍未命中且超时则终止。

设置timeout控制当前节点的 next 列表识别的超时时间

当满足以下任意条件时,任务流程终止:

  • 当前节点的 next 列表为空(若存在 [JumpBack] 回跳点,会先回跳)
  • 当前节点的 next 列表未命中且超时
  • 外部调用 post_stop 或执行了 StopTask 动作

核心:识别成功才算进入,如果一个节点下的next列表识别超时则走on_error(但next中节点还未识别完),如果都未命中且超时则退出

识别recognition类型包括默认 DirectHit
可选的值:DirectHit | TemplateMatch | FeatureMatch | ColorMatch | OCR | NeuralNetworkClassify | NeuralNetworkDetect | And | Or | Custom

动作action包括默认 DoNothing
可选的值:DoNothing | Click | LongPress | Swipe | MultiSwipe | Scroll | ClickKey | LongPressKey | InputText | StartApp | StopApp | StopTask | Command | Shell | Screencap | Custom

next接下来要执行的节点列表。可选,默认空。
按顺序识别 next 中的每个节点,只执行第一个识别到的

on_error本节点内的 next 列表中没有任何节点命中并且循环识别超时,或动作执行失败后,接下来会执行该列表中的节点。可选,默认空。

这里存在一点疑惑,next 列表中没有任何节点命中并且循环识别超时到底是走on_error列表还是直接中止

rate_limit: uint
识别速率限制,单位毫秒。可选,默认 1000 。
每轮识别最低消耗 rate_limit 毫秒,不足的时间将会 sleep 等待。

timeout: int
当前节点next 列表识别的超时时间,毫秒。可选,默认 20 * 1000(20 秒)

repeat: uint
动作重复执行次数。可选,默认 1 ,即不重复。

max_hit: uint
该节点最多可被识别成功多少次。可选,默认 UINT_MAX ,即无限制。
若超过该次数,其他 node 的 next 列表中的该 node 会被跳过,既不会被识别也不会被执行

anchor: string | list | object
锚点名称。可选,默认空。
当节点识别命中并执行动作后,会将该锚点名设置为对应的节点(无论动作成功或失败)。多个节点可设置同一个锚点名,后执行的会覆盖先执行的。

支持三种格式:

  • 字符串"anchor": "MyAnchor" - 将锚点设置为当前节点

  • 字符串数组"anchor": ["A", "B"] - 将多个锚点都设置为当前节点

  • 对象 💡 v5.7"anchor": {"A": "TargetNode", "B": ""} - 将锚点 A 设置为 TargetNode,锚点 B 清除(空字符串表示清除该锚点)

    nexton_error 中可通过 [Anchor] 属性引用该锚点,运行时会解析为最后设置该锚点的节点。如果引用的锚点未设置或已被清除,该节点将被跳过(不会执行)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"NodeA": {
"recognition": {
"type": "TemplateMatch",
"param": {

"template": "A.png",
"roi": [100, 100, 10, 10]
}
},
"action": {
"type": "Click",
"param": {

"target": "XXX"
}
},

"next": ["NodeB"],
"pre_delay": 1000,

}
}

类型放入 type 字段,其余参数放入 param 字段中

PIV2协议

所谓 ProjectInterface,即 MaaFramework 的一个标准化的项目结构声明,该声明目前包含 interface.json 一个文件。通过定义 PI,你可以使用 MaaFramework 的各种衍生工具。因此,即使你打算纯粹依靠通用编程语言集成,也建议定义包含基础信息的 PI。

一般可以通过PI定义项目信息以及UI展示。一般的UI项目会展示任务信息以及一些参数。3.3 Project Interface V2 协议 | MaaFramework

在已有应用中添加节点/任务

个人开发基于MAA的应用

可以使用MaaXYZ/MaaPracticeBoilerplate: MaaFramework 通用项目模板

以及参考资料how_to_develop

目前maafw提供了python,go,nodejs,c#以及rust等语言的binding,可以结合这些框架开发一些客户端,目前已经有MaaXYZ/MFAAvalonia: 基于 Avalonia 的 MAAFramework 通用 GUI 项目MistEO/MXU: MaaFramework Next UI等通用UI

相关资料

  1. MaaAssistantArknights/MaaAssistantArknights: 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients.
  2. MaaFramework
  3. 开发指南 | 开发文档 | MAA 文档站
  4. MaaHub
  5. MAA1999/M9A: 重返未来:1999 小助手 | Assistant For Reverse: 1999
  6. MistEO/MXU: MaaFramework Next UI
  7. 1bananachicken/MaaNTE: MaaNTE. Nevertheless to Everless automatic assistant 异环小助手
  8. MaaXYZ/MaaFramework: 基于图像识别的自动化黑盒测试框架 | An automation black-box testing framework based on image recognition

-------------本文结束感谢您的阅读-------------