AiBote 2022 新研发的自动化框架,支持 Android 和 Windows 系统。速度非常快

Ai-Bot 基于流行的 Node.js 和 JavaScript 语言 的一款新自动化框架,支持 Windows 和 Android 自动化。

1、Windows xpath 元素定位算法支持 支持 Windows 应用、.NET、WPF、Qt、Java 和 Electron 客户端程序 和 ie、edge chrome 浏览器

2、Android 支持原生 APP 和 H5 界面,元素定位 速度是 appium 十倍,无线远程自动化操作多台安卓设备

3、基于 opencv 图色算法,支持找图和多点找色,1080*2340 全分辨率找图 50MS 以内

4、内置免费 OCR 人工智能技术,无限制获取图片文字和找字功能。

5、框架协议开源,除官方 node.js SDK 外,用户可自行封装其他语言。目前有 Android 端 第三方用户使用 python 封装的 AiBot.py 模块

6、界面开发基于 chromium 内核,可使用 html、ccs 等 web 前端语言开发界面。

7、框架免费开源、支持打包 exe 和界面开发

基础视频教程:https://www.bilibili.com/video/BV1vt4y137TH?spm_id_from=333.999.0.0
界面开发教程:https://www.bilibili.com/video/BV1fP411G734?spm_id_from=333.999.0.0

Aibote RPA 官方网址:http://www.ai-bot.net/
交流 QQ 群:818820872

下面是开发文档和通信协议:

AndoridBot开发手册

主函数示例

const AndroidBot = require('AndroidBot');//引用AndroidBot模块

//初始化AndroidBot对象,设置服务端监听端口,手机端默认连接端口16678
AndroidBot.registerMain(main, 16678);
/**用作代码提示,main函数会被多次调用,不能使用全局变量
* @param {AndroidBot} androidBot
*/
async function main(androidBot){
   
    await androidBot.setImplicitTimeout(3000);//设置找图色隐式等待时间
	let point = await androidBot.findColor("#0e76b1");//查找指定颜色值坐标点
    console.log(point);
}

等待超时

await androidBot.sleep(3000);
//显示等待
//参数一 整型,等待时间,单位毫秒

await androidBot.setImplicitTimeout(waitMs, intervalMs = 5);
//隐式等待
//参数一 整型,等待时间,单位毫秒
//参数二 整型,心跳间隔,单位毫秒。可选参数,默认5毫秒

图片与颜色

await androidBot.saveScreenshot(savePath, options = {
   });
//截图保存
//参数一 字符串类型,保存图片路径。建议存放在手机 /storage/emulated/0/Android/data/com.aibot.client/files/ 目录下
//参数二 JSON类型,可选参数{
   {region:[left:number, top:number, right:number, bottom:number], threshold:[thresholdType:number, thresh:number, maxval:number]}} options 
//region截图区域 [10, 20, 100, 200], 默认全屏
//threshold二值化图片, thresholdType算法类型:
//                                            0   THRESH_BINARY算法,当前点值大于阈值thresh时,取最大值maxva,否则设置为0
//                                            1   THRESH_BINARY_INV算法,当前点值大于阈值thresh时,设置为0,否则设置为最大值maxva
//                                            2   THRESH_TOZERO算法,当前点值大于阈值thresh时,不改变,否则设置为0
//                                            3   THRESH_TOZERO_INV算法,当前点值大于阈值thresh时,设置为0,否则不改变
//                                            4   THRESH_TRUNC算法,当前点值大于阈值thresh时,设置为阈值thresh,否则不改变
//                                            5   ADAPTIVE_THRESH_MEAN_C算法,自适应阈值
//                                            6   ADAPTIVE_THRESH_GAUSSIAN_C算法,自适应阈值
//                                            thresh阈值,maxval最大值,threshold默认保存原图。thresh和maxval同为255时灰度处理
//成功返回false,失败返回true

await androidBot.getColor(x, y);
//获取颜色值
//参数一 整型,横坐标
//参数二 整型,纵坐标
//成功返回#开头的颜色值,失败返回null

await androidBot.findImage(imagePath, options = {
   });
//找图1
//参数一 字符串,小图片路径(手机)
//参数二 JSON类型,可选参数,{
   {region:[left:number, top:number, right:number, bottom:number], sim:number, threshold:[thresholdType:number, thresh:number, maxval:number]}} options
//region 指定区域找图 [10, 20, 100, 200],region默认全屏
//sim浮点型 图片相似度 0.0-1.0,sim默认1。该值不宜设置太低,否则查找速度会非常慢
//threshold二值化图片, thresholdType算法类型:
//                                            0   THRESH_BINARY算法,当前点值大于阈值thresh时,取最大值maxva,否则设置为0
//                                            1   THRESH_BINARY_INV算法,当前点值大于阈值thresh时,设置为0,否则设置为最大值maxva
//                                            2   THRESH_TOZERO算法,当前点值大于阈值thresh时,不改变,否则设置为0
//                                            3   THRESH_TOZERO_INV算法,当前点值大于阈值thresh时,设置为0,否则不改变
//                                            4   THRESH_TRUNC算法,当前点值大于阈值thresh时,设置为阈值thresh,否则不改变
//                                            5   ADAPTIVE_THRESH_MEAN_C算法,自适应阈值
//                                            6   ADAPTIVE_THRESH_GAUSSIAN_C算法,自适应阈值
//                                            thresh阈值,maxval最大值,threshold默认保存原图。thresh和maxval同为255时灰度处理
//成功返回{x:number, y:number} 失败返回null
//相似度低,导致查找速度慢,应当使用 matchTemplate 函数查找

await androidBot.matchTemplate(imagePath, options = {
   });
//找图2
//参数一 字符串,小图片路径(手机)
//参数二 JSON类型,可选参数,{
   {region:[left:number, top:number, right:number, bottom:number], sim:number, threshold:[thresholdType:number, thresh:number, maxval:number]}} options
//region 指定区域找图 [10, 20, 100, 200],region默认全屏
//sim浮点型 图片相似度 0.0-1.0,sim默认0.95
//threshold二值化图片, thresholdType算法类型:
//                                            0   THRESH_BINARY算法,当前点值大于阈值thresh时,取最大值maxva,否则设置为0
//                                            1   THRESH_BINARY_INV算法,当前点值大于阈值thresh时,设置为0,否则设置为最大值maxva
//                                            2   THRESH_TOZERO算法,当前点值大于阈值thresh时,不改变,否则设置为0
//                                            3   THRESH_TOZERO_INV算法,当前点值大于阈值thresh时,设置为0,否则不改变
//                                            4   THRESH_TRUNC算法,当前点值大于阈值thresh时,设置为阈值thresh,否则不改变
//                                            5   ADAPTIVE_THRESH_MEAN_C算法,自适应阈值
//                                            6   ADAPTIVE_THRESH_GAUSSIAN_C算法,自适应阈值
//                                            thresh阈值,maxval最大值,threshold默认保存原图。thresh和maxval同为255时灰度处理
//multi 找图数量,默认为1,找单个图片坐标
//成功返回,单个坐标点 [{x:number, y:number}],多坐标点图[{x1:number, y1:number}, {x2:number, y2:number}...] 失败返回null
//纯黑色小图,应当使用 findImage 函数查找

await androidBot.findAnimation(frameRate, options = {
   });
//找动态图
//参数一 整型,前后两张图相隔的时间,单位毫秒
//参数二 JSON类型,可选参数,{
   {region:[left:number, top:number, right:number, bottom:number]}} options
//region 指定区域找图 [10, 20, 100, 200],region默认全屏
//成功返回,单个坐标点 [{x:number, y:number}],多坐标点图[{x1:number, y1:number}, {x2:number, y2:number}...] 失败返回null

await androidBot.findColor(mainColor, options = {
   });
//找色
//参数一 字符串,#开头的色值
//参数二 JSON类型,可选参数,{
   {subColors:[[offsetX:number, offsetY:number, strSubColor:string], ...], region:[left:number, top:number, right:number, bottom:numbe], sim:number}} options
//subColors 相对于mainColor 的子色值,[[offsetX, offsetY, "#FFFFFF"], ...],subColors默认为null
//region 指定区域找图 [10, 20, 100, 200],region默认全屏
//sim相似度0.0-1.0,sim默认为1
//成功返回{x:number, y:number} 失败返回null

await androidBot.compareColor(mainX, mainY, mainColor, options = {
   });
//比色
//参数一 整型,主颜色所在的X坐标
//参数二 整型,主颜色所在的Y坐标
//参数三 字符串,#开头的色值
//参数四 JSON类型,可选参数,{
   {subColors:[[offsetX:number, offsetY:number, strSubColor:string], ...], region:[left:number, top:number, right:number, bottom:number], sim:number}} options
//subColors 相对于mainColor 的子色值,[[offsetX, offsetY, "#FFFFFF"], ...],subColors默认为null
//region 指定区域找图 [10, 20, 100, 200],region默认全屏
//sim相似度0.0-1.0,sim默认为1
//成功返回true 失败返回 false

OCR系统

await androidBot.findWords(ocrServer, words, options = {
   })
//找字
//参数一 字符串类型,ocr服务地址 ocr.ai-bot.net
//参数二 字符串类型,要查找的文字
//参数三 JSON类型,可选参数 {region:[left:number, top:number, right:number, bottom:number], scale:number}} options
//region 指定区域 [10, 20, 100, 200],region默认全屏
//scale浮点型 图片缩放率, 默认为 1.0 原大小。大于1.0放大,小于1.0缩小,不能为负数。仅在区域识别有效
//成功功返回数组[{x:number, y:number}, ...],文字所在的坐标点, 失败返回null

await androidBot.getWords(ocrServer, options = {
   })
//获取屏幕文字
//参数一 字符串类型,ocr服务地址 ocr.ai-bot.net
//参数二 JSON类型,可选参数 {region:[left:number, top:number, right:number, bottom:number], scale:number}} options
//region 指定区域 [10, 20, 100, 200],region默认全屏
//scale浮点型 图片缩放率, 默认为 1.0 原大小。大于1.0放大,小于1.0缩小,不能为负数。仅在区域识别有效
//成功返回手机上的文字, 失败返回null

点击手势

await androidBot.click(x, y);
//点击坐标
//参数一 整型,横坐标
//参数二 整型,纵坐标
//成功返回true 失败返回false

await androidBot.doubleClick(x, y);
//双击坐标
//参数一 整型,横坐标
//参数二 整型,纵坐标
//成功返回true 失败返回false

await androidBot.longClick(x, y, duration);
//长按坐标
//参数一 整型,横坐标
//参数二 整型,纵坐标
//参数三 整型,长按时长,单位毫秒 
//成功返回true 失败返回false

await androidBot.swipe(startX, startY, endX, endY, duration);
//滑动坐标
//参数一 整型,起始横坐标
//参数二 整型,起始纵坐标 
//参数三 整型,结束横坐标
//参数四 整型,结束纵坐标
//参数五 整型,滑动时长,单位毫秒 
//成功返回true 失败返回false

await androidBot.dispatchGesture(gesturePath, duration);
//执行手势
//参数一 JSON类型,手势路径 {[[x:number, y:number], [x1:number, y1:number]...]}
//参数二 整型,手势时长,单位毫秒 
//成功返回true 失败返回false

发送文本

await androidBot.sendKeys(text);
//参数一 字符串类型,发送的文本,需要打开aibote输入法
//成功返回true 失败返回false

发送按键

await androidBot.back();
//成功返回true 失败返回false

await androidBot.home();
//成功返回true 失败返回false

await androidBot.recents();
//成功返回true 失败返回false

await androidBot.sendVk(keyCode);
//参数一 整型,发送按键值,需要打开aibote输入法。例如:回车:66 
//按键对照表 https://blog.csdn.net/yaoyaozaiye/article/details/122826340
//成功返回true 失败返回false

启动APP

await androidBot.startApp(name);
//参数一 字符串类型,包名或者app名称
//成功返回true 失败返回false

屏幕大小

await androidBot.getWindowSize();
//成功返回{width:number, height:number}

图片大小

await androidBot.getImageSize(imagePath);
//参数一 字符串类型,图片路径
//成功返回{width:number, height:number}

获取安卓ID

await androidBot.getAndroidId();
//成功返回安卓手机ID

URL请求

await androidBot.urlRequest(url, requestType, contentType = "null", postData = "null")
//参数一 字符串类型,请求的地址,http:// 或者 https://开头
//参数二 字符串类型,请求类型,GET或者POST
//参数三 字符串类型,可选参数,用作POST 内容类型
//参数四 字符串类型,可选参数,用作POST 提交的数据
//返回请求数据内容

Toast消息提示

await androidBot.showToast(text)
//参数一 字符串类型,Toast提示的内容
//成功返回true 失败返回false

验证码系统

await androidBot.getCaptcha(filePath, username, password, softId, codeType, lenMin = 0);
//识别验证码
//参数一 字符串类型,图片文件路径
//参数二 字符串类型,用户名
//参数三 字符串类型,密码
//参数四 字符串类型,软件ID
//参数四 字符串类型,图片类型 参考https://www.chaojiying.com/price.html
//参数五 字符串类型,最小位数 默认0为不启用,图片类型为可变位长时可启用这个参数
//返回JSON类型{
   {err_no:number, err_str:string, pic_id:string, pic_str:string, md5:string}}
//err_no,(数值) 返回代码  为0 表示正常,错误代码 参考https://www.chaojiying.com/api-23.html
//err_str,(字符串) 中文描述的返回信息 
//pic_id,(字符串) 图片标识号,或图片id号
//pic_str,(字符串) 识别出的结果
//md5,(字符串) md5校验值,用来校验此条数据返回是否真实有效

await androidBot.errorCaptcha(username, password, softId, picId);
//识别报错返分
//参数一 字符串类型,用户名
//参数二 字符串类型,密码
//参数三 字符串类型,软件ID
//参数四 字符串类型,图片ID 对应 getCaptcha返回值的pic_id 字段
//返回JSON类型{
   {err_no:number, err_str:string}}
//err_no,(数值) 返回代码
//err_str,(字符串) 中文描述的返回信息

await androidBot.scoreCaptcha(username, password);
//查询验证码剩余题分
//参数一 字符串类型,用户名
//参数二 字符串类型,密码
//返回JSON类型{
   {err_no:number, err_str:string, tifen:string, tifen_lock:string}}
//err_no,(数值) 返回代码
//err_str,(字符串) 中文描述的返回信息
//tifen,(数值) 题分
//tifen_lock,(数值) 锁定题分

元素操作

await androidBot.getElementRect(xpath);
//获取位置
//参数一 字符串类型,元素路径
//成功返回{left:number, top:number, right:number, bottom:number},失败返回null

await androidBot.getElementDescription(xpath);
//获取元素描述
//参数一 字符串类型,元素路径
//成功返回元素描述内容,失败返回null

await androidBot.getElementText(xpath);
//获取文本
//参数一 字符串类型,元素路径
//成功返回元素内容,失败返回null

await androidBot.setElementText(xpath, text);
//设置文本
//参数一 字符串类型,元素路径
//参数一 字符串类型,设置的文本
//成功返回true 失败返回false

await androidBot.clickElement(xpath);
//击元素
//参数一 字符串类型,元素路径
//成功返回true 失败返回false

await androidBot.scrollElement(xpath, direction);
//滚动元素
//参数一 字符串类型,元素路径
//参数二 整型,0 向前滑动, 1 向后滑动
//成功返回true 失败返回false

await androidBot.existsElement(xpath);
//判断元素是否存在
//参数一 字符串类型,元素路径
//成功返回true 失败返回false

await androidBot.isSelectedElement(xpath);
//判断元素是否选中
//参数一 字符串类型,元素路径
//成功返回true 失败返回false

文件传输

await androidBot.pushFile("d:\\1.png", "/storage/emulated/0/1.png");
//上传文件到手机
//参数一 字符串类型,电脑文件路径
//参数二 字符串类型,安卓文件保存路径, 安卓外部存储根目录 /storage/emulated/0/
//媒体文件会自动更新至相册
//成功返回true 失败返回false

await androidBot.pullFile("/storage/emulated/0/1.png", "d:\\1.png");
//拉取文件到电脑
//参数一 字符串类型,安卓文件路径, 安卓外部存储根目录 /storage/emulated/0/
//参数二 字符串类型,电脑文件保存路径

Intent跳转

await androidBot.openUri("alipayqr://platformapi/startapp?saId=10000007");
//跳转uri
//参数一 字符串类型,跳转链接
//成功返回true,失败返回 false

await androidBot.callPhone("10086");
//拨打电话
//参数一 字符串类型,拨打的电话号码
//成功返回true,失败返回 false

await androidBot.sendMsg("10086", "123")
//发送短信
//参数一 字符串类型,发送的电话号码
//参数二 字符串类型,短信内容
//成功返回true,失败返回 false

获取包名/窗口

await androidBot.getActivity();
//成功返回当前activity

await androidBot.getPackage();
//成功返回当前package

安卓剪切板

await androidBot.setClipboardText(text);
//设置剪切板内容
//参数一 字符串型,设置的文本
//成功返回true 失败返回 false

await androidBot.getClipboardText();
//获取剪切板内容,需要打开aibote输入法。
//成功返回剪切板文本,失败返回null

python 使用方法说明

下载安装

pip install AiBot.py

编写脚本

# 1. 导入 AiBotMain 类
from AiBot import AiBotMain

# 2. 自定义一个脚本类,继承 AiBotMain
class CustomScript(AiBotMain):
    # 3. 设置等待参数
    # 3.1 设置等待时间
    wait_timeout = 3
    # 3.2 设置重试间隔时长
    interval_timeout = 0.1

    # 4. 重写方法,编写脚本
    # 注意:此方法是脚本执行入口
    def script_main(self):
        # 5. API 演示
        # 注意:Python 端支持的 api 与 Nodejs 基本相同
        # 此处仅演示部分 api,更多 api 请自行查阅 上面 Nodejs 文档

        # 截图
        self.save_screenshot("xxx.png")
        # 获取坐标点颜色
        self.get_color((100, 100))
        # 查找图片
        self.find_image("xxx.png")
        # 点击坐标
        self.click((100, 100))
        # 滑动
        self.swipe((100, 100), (200, 200), 3)

教程中仅演示部分 api,更多 api 请自行查阅 Nodejs文档。

调用 execute 方法启动脚本

from AiBot import AiBotMain

class CustomScript(AiBotMain):

    def script_main(self):
        self.show_toast("启动成功")


if __name__ == '__main__':
    # 注意:此处监听的端口号,必须和手机端的脚本端口号一致;
    # 监听 16678 号端口
    CustomScript.execute(16678)

AndoridBot开源协议

Aibote安卓云端自动化框架,采用云端服务模式构建。由安卓手机客户端主动连接服务器/电脑服务端程序,
服务端应采用多线程TCP协议和多个安卓设备通信。构架模式决定了自动化代码部署在云端,能有效防止脚本被第三方恶意破解。
结合Aibote远程投屏技术,可直接连接远程用户设备做自动化机器人编写,完美解决远程自动化测试需求。独家图色定位算法,
50毫秒以内的速度遍历查找2340*1080分辨率的设备。为了让更多人体验到我们产品,我们决议在此公布框架协议,
希望有更多开发者能完善并封装成各种计算机语言。

发送命令协议格式:len/len/len...\ndata
//len:函数名和参数的(字节)长度,统一为十进制 字符串类型
//data:函数名和参数数据 类型为 字符串或字节类型(string/byte) 

接收命令协议格式:len/data
//len:返回数据包的(字节)长度
//data:返回的数据,类型为字符串或字节类型(string/byte) 

协议示例:
//截图保存
sendData("saveScreenshot", "/storage/emulated/0/Android/data/com.aibot.client/files/1.png", 80, 150, 30, 30, 0, 127, 255);
// 参数一:函数名称
// 参数二:保存的图片路径(手机)
// 参数三:矩形左上角x坐标
// 参数四:矩形左上角y坐标
// 参数五:矩形右下角x坐标
// 参数六:矩形右下角y坐标
// 参数七:二值化算法类型
// 参数八:二值化阈值
// 参数九:二值化最大值
发送数据包:14/61/2/3/2/2/1/3/3\nsaveScreenshot/storage/emulated/0/Android/data/com.aibot.client/files/1.png8015030300127255
返回数据包:"false"或者 "true"

//获取色值
sendData("getColor", 100, 200);
// 参数一:函数名称
// 参数二:x坐标
// 参数三:y坐标
数据包:8/3/3\ngetColor100200
返回数据包:"false"或者 "true"

//找图
sendData("findImage", "/storage/emulated/0/Android/data/com.aibot.client/files/1.png", 0, 0, 0, 0, 0.95, 0, 0, 0);
// 参数一:函数名称
// 参数二:保存的图片路径(手机)
// 参数三:矩形左上角x坐标
// 参数四:矩形左上角y坐标
// 参数五:矩形右下角x坐标
// 参数六:矩形右下角y坐标
// 参数七:相似度
// 参数八:二值化算法类型
// 参数九:二值化阈值
// 参数十:二值化最大值
数据包:9/61/1/1/1/1/4/1/1/1\nfindImage/storage/emulated/0/Android/data/com.aibot.client/files/1.png00000.95000
返回数据包:成功"x|y" 失败"-1.0|-1.0"

//找图2
sendData("matchTemplate", "/storage/emulated/0/Android/data/com.aibot.client/files/1.png", 0, 0, 0, 0, 0.95, 0, 0, 
  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值