api自动化框架_ai开源框架

(80) 2024-07-15 11:01:03

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/
交流 群:

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

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/ //成功返回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="); //跳转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.png27255 返回数据包:"false"或者 "true" //获取色值 sendData("getColor", 100, 200); // 参数一:函数名称 // 参数二:x坐标 // 参数三:y坐标 数据包:8/3/3\ngetColor 返回数据包:"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, 
THE END

发表回复