使用须知
aibot能力: 1、androidbot,底层自主研发,支持安卓原生app和h5界面元素和图色定位。元素元素定位速度是appium框架的的10倍,2340*1080 图色定位仅需要50毫秒! 2、windowsbot,底层自主研发,支持windows应用、.net、winform、wpf、qt、java(swing和awt等gui库)和electron 等语言开发的窗口界面元素和图色定位,独家xpath算法 简洁急速, 元素/图色定位速度分别是可视化rpa的3倍和20倍! 3、webbot,底层自主研发,支持chromium内核的所有浏览器和应用。c/c 语言基于浏览器内核协议研发而成的一款web自动化框架。速度是selenium 10倍! 4、android远程投屏,底层自主研发,可在一台电脑监控观察多台安卓rpa机器人运行状态并批量管理操作 5、自建ocr服务器,支持文字识别和定位,免费且不限制使用次数! 6、自研aibotescriptui界面开发工具,提供人机交互功能,打包exe发布机器人可以在离线环境运行!
andoridbot 开源协议
aibote安卓云端自动化框架,采用云端服务模式构建。由安卓手机客户端主动连接服务器/电脑服务端程序, 服务端应采用多线程tcp协议和多个安卓设备通信。构架模式决定了自动化代码部署在云端,能有效防止脚本被第三方恶意破解。 结合aibote远程投屏技术,可直接连接远程用户设备做自动化机器人编写,完美解决远程自动化测试需求。独家图色定位算法, 50毫秒以内的速度遍历查找2340*1080分辨率的设备。为了让更多人体验到我们产品,我们决议在此公布框架协议, 希望有更多开发者能完善并封装成各种计算机语言,封装请参考nodejs版的说明 发送命令协议格式:len/len/len...\ndata //len:名和参数的(字节)长度,统一为十进制 字符串类型 //data:名和参数数据 类型为 字符串或字节类型(string/byte) 接收命令协议格式:len/data //len:数据包的(字节)长度 //data:返回的数据,类型为字符串或字节类型(string/byte) 协议示例: //截图保存 ("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 返回数据包:""或者 "true" //获取色值 ("getcolor", 100, 200); // 参数一: // 参数二:x坐标 // 参数三:y坐标 数据包:8/3/3\ngetcolor100200 返回数据包:#000000 //找图 ("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 ("matchtemplate", "/storage/emulated/0/android/data/com.aibot.client/files/1.png", 0, 0, 0, 0, 0.95, 0, 0, 1); // 参数一:函数 // 参数二:保存的图片路径(手机) // 参数三:矩形左上角x坐标 // 参数四:矩形左上角y坐标 // 参数五:矩形右下角x坐标 // 参数六:矩形右下角y坐标 // 参数七:相似度 // 参数八:二值化阈值 // 参数九:二值化最大值 // 参数十:多个坐标点 数据包:13/61/1/1/1/1/4/1/1/1\nmatchtemplate/storage/emulated/0/android/data/com.aibot.client/files/1.png00000.95001 返回数据包:单坐标点成功"x|y" 多坐标点成功 "x1|y1/x2|y2..." 失败"-1.0|-1.0" //找动态图 senddata("findanimation", 100, 0, 0, 0, 0); // 参数一:函数 // 参数二:前后两张图相隔的时间,单位毫秒 // 参数三:矩形左上角x坐标 // 参数四:矩形左上角y坐标 // 参数五:矩形右下角x坐标 // 参数六:矩形右下角y坐标 数据包:13/3/0/0/0/0\nfindanimation1000000 返回数据包:单坐标点成功"x|y" 多坐标点成功 "x1|y1/x2|y2..." 失败"-1.0|-1.0" //找色 senddata("findcolor", "#e8f2f8", "1020#e7f0f7", 0, 0, 0, 0, 1); // 参数一:函数 // 参数二:主颜色值 // 参数三:相对偏移的颜色点,以 "x坐标 y坐标 色值" 字符串形式 // 参数四:矩形左上角x坐标 // 参数五:矩形左上角y坐标 // 参数六:矩形右下角x坐标 // 参数七:矩形右下角y坐标 // 参数八:相似度 数据包:9/7/11/1/1/1/1/1\nfindcolor#e8f2f81020#e7f0f700001 返回数据包:成功"x|y" 失败"-1.0|-1.0" //比色 senddata("comparecolor", 100, 200, "#e8f2f8", "1020#e7f0f7", 0, 0, 0, 0, 1); // 参数一:函数 // 参数二:主颜色值所在的x坐标 // 参数三:主颜色值所在的y坐标 // 参数四:主颜色值 // 参数五:相对偏移的颜色点,以 "x坐标 y坐标 色值" 字符串形式 // 参数六:矩形左上角x坐标 // 参数七:矩形左上角y坐标 // 参数八:矩形右下角x坐标 // 参数九:矩形右下角y坐标 // 参数十:相似度 数据包:12/3/3/7/11/1/1/1/1/1\ncomparecolor100200#e8f2f81020#e7f0f700001 返回数据包:""或者 "true" //手指按下 senddata("press", 10, 20, 3000); // 参数一:函数名称 // 参数二:x坐标 // 参数三:y坐标 // 参数四:按下持续时间 数据包:5/2/2/4\npress10203000 返回数据包:""或者 "true" //手指移动 senddata("move", 10, 20, 3000); // 参数一:函数名称 // 参数二:x坐标 // 参数三:y坐标 // 参数四:移动持续时间 数据包:4/2/2/4\nmove10203000 返回数据包:""或者 "true" //手指抬起 senddata("release"); // 参数一:函数名称 数据包:7\nrelease 返回数据包:""或者 "true" //点击坐标 senddata("click", 200, 500); // 参数一:函数名称 // 参数二:x坐标 // 参数三:y坐标 数据包:5/3/3\nclick200500 返回数据包:""或者 "true" //双击坐标 senddata("doubleclick", 200, 500); // 参数一:函数名称 // 参数二:x坐标 // 参数三:y坐标 数据包:11/3/3\ndoubleclick200500 返回数据包:""或者 "true" //长按坐标 senddata("longclick", 10, 20, 3000); // 参数一:函数名称 // 参数二:x坐标 // 参数三:y坐标 // 参数四:长按持续时间 数据包:9/2/2/4\nlongclick10203000 返回数据包:"false"或者 "true" //滑动坐标 senddata("swipe", 10, 10, 200, 200, 1000); // 参数一:函数名称 // 参数二:开始x坐标 // 参数三:开始y坐标 // 参数四:结束x坐标 // 参数五:结束y坐标 // 参数六:滑动耗时 数据包:5/2/2/3/3/4\nswipe10102002001000 返回数据包:"false"或者 "true" //执行手势 senddata("dispatchgesture", "1000/1558\n100/100\n799/800\n234/89", 3000); // 参数一:函数名称 // 参数二:执行手势坐标位, 以"/"分割横纵坐标 "\n"分割坐标点。注意:末尾坐标点没有\n结束 // 参数三:手势耗时 数据包:15/35/4\ndispatchgesture1000/1558\n100/100\n799/800\n234/893000 返回数据包:"false"或者 "true" //发送文本 senddata("sendkeys", "aibot"); // 参数一:函数名称 // 参数二:文本内容 数据包:8/5\nsendkeysaibot 返回数据包:"false"或者 "true" //返回 senddata("back"); // 参数一:函数名称 数据包:4\nback 返回数据包:"false"或者 "true" //home senddata("home"); // 参数一:函数名称 数据包:4\nhome 返回数据包:"false"或者 "true" //最近任务列表 senddata("recents"); // 参数一:函数名称 数据包:7\nrecents 返回数据包:"false"或者 "true" //发送按键 senddata("sendvk", 187); // 参数一:函数名称 // 参数二:虚拟键值 按键对照表 https://blog.csdn.net/yaoyaozaiye/article/details/122826340 数据包:6/3\nsendvk187 返回数据包:"false"或者 "true" //启动app senddata("startapp", "qq"); // 参数一:函数名称 // 参数二:启动app的名称或者包名 数据包:8/2\nstartappqq 返回数据包:"false"或者 "true" //屏幕大小 senddata("getwindowsize"); 数据包:13\ngetwindowsize 返回数据包:"width|height" //图片大小 senddata("getimagesize", "/storage/emulated/0/android/data/com.aibot.client/files/1.png"); 数据包:12/61\nsavescreenshot/storage/emulated/0/android/data/com.aibot.client/files/1.png 返回数据包:"width|height" //获取安卓id senddata("getandroidid"); 数据包:12\ngetandroidid 返回数据包:"1f73c8f2f3b2f108" //ocr senddata("ocr", 0, 0, 0, 0, 1.0); 数据包:3/1/1/1/1\3\nocr00001.0 返回数据包:[[[7.0, 18.0], [61.0, 18.0], [61.0, 38.0], [7.0, 38.0]], ('办公自动化', 0.8806074261665344)][[[4.0, 94.0], [49.0, 94.0], [49.0, 118.0], [4.0, 118.0]], ('rpa', 0.978314220905304)] //url请求 senddata("urlrequest", "http://www.baidu.com", "get", "null", "null"); 数据包:10/20/3/4/4\nurlrequesthttp://www.baidu.comgetnullnull 返回数据包:返回请求数据内容 //toast消息提示 senddata("showtoast", "rpa"); 数据包:9/2\nshowtoastrpa 返回数据包:"false"或者 "true" //识别验证码 senddata("getcaptcha", "/storage/emulated/0/android/data/com.aibot.client/files/1.png", "username", "password", "123456", "1004", "0"); 数据包:10/61/8/8/6/4/1\n/storage/emulated/0/android/data/com.aibot.client/files/1.pngusernamepassword12345610040 返回数据包:"{"err_no":0,"err_str":"ok","pic_id":"9160109360600112681","pic_str":"8vka","md5":"35d5c7f6f53223fbdc5b72783db0c2c0"}" //识别报错返分 senddata("errorcaptcha", "username", "password", "123456", "9160109360600112681"); 数据包:12/8/8/6/19\nerrorcaptchausernamepassword1234569160109360600112681 返回数据包:"{"err_no":0,"err_str":"ok"}" //查询验证码剩余题分 senddata("scorecaptcha", "username", "password"); 数据包:12/8/8\nscorecaptchausernamepassword 返回数据包:"{"err_no":0,"err_str":"ok","tifen":821690,"tifen_lock":0}" //获取元素位置 senddata("getelementrect", "com.aibot.client/com.aibot.client:id=inputserver"); 数据包:14/48\ngetelementrectcom.aibot.client/com.aibot.client:id=inputserver 返回数据包:"239|628|989|764" //获取元素描述内容 senddata("getelementdescription", "com.aibot.client/com.aibot.client:id=inputserver"); 数据包:21/48\ngetelementdescriptioncom.aibot.client/com.aibot.client:id=inputserver 返回数据包:"192.168.2.7" //获取元素文本 senddata("getelementtext", "com.aibot.client/com.aibot.client:id=inputserver"); 数据包:14/48\ngetelementtextcom.aibot.client/com.aibot.client:id=inputserver 返回数据包:"192.168.2.7" //设置元素文本 senddata("setelementtext", "com.aibot.client/com.aibot.client:id=inputserver", "rpa"); 数据包:14/48/3\nsetelementtextcom.aibot.client/com.aibot.client:id=inputserverrpa 返回数据包:"false"或者 "true" //点击元素 senddata("clickelement", "com.aibot.client/com.aibot.client:id=inputserver"); 数据包:12/48\nclickelementcom.aibot.client/com.aibot.client:id=inputserver 返回数据包:"false"或者 "true" //滚动元素 senddata("scrollelement", "com.aibot.client/com.aibot.client:id=inputserver", 0); 数据包:13/48/1\nclickelementcom.aibot.client/com.aibot.client:id=inputserver0 返回数据包:"false"或者 "true" //判断元素是否存在 senddata("existselement", "com.aibot.client/com.aibot.client:id=inputserver"); 数据包:13/48\nexistselementcom.aibot.client/com.aibot.client:id=inputserver 返回数据包:"false"或者 "true" //判断元素是否选中 senddata("isselectedelement", "com.aibot.client/com.aibot.client:id=inputserver"); 数据包:17/48\nisselectedelementcom.aibot.client/com.aibot.client:id=inputserver 返回数据包:"false"或者 "true" //上传文件 senddata("pushfile", "/storage/emulated/0/1.png", filedata); //filedata 文件字节数据 数据包:8/25/655423\npushfile/storage/emulated/0/1.pngfiledata 返回数据包:"false"或者 "true" //拉取文件 senddata("pullfile", "/storage/emulated/0/1.png"); 数据包:8/25\npullfile/storage/emulated/0/1.png 返回数据包:文件字节数据 //跳转uri senddata("openuri", "alipayqr://platformapi/startapp?said=10000007"); 数据包:7/45\nopenurialipayqr://platformapi/startapp?said=10000007 返回数据包:"false"或者 "true" //拨打电话 senddata("callphone", "10086"); 数据包:9/5\ncallphone10086 返回数据包:"false"或者 "true" //发送短信 senddata("sendmsg", "10086", "123"); 数据包:7/5/3\nsendmsg10086123 返回数据包:"false"或者 "true" //获取活动窗口(activity) senddata("getactivity"); 数据包:11\ngetactivity 返回数据包:".mainactivity" //获取活动包名(package) senddata("getpackage"); 数据包:10\ngetpackage 返回数据包:"com.aibot.client" //设置剪切板文本 senddata("setclipboardtext", "aibote"); 数据包:16/6\nsetclipboardtextaibote 返回数据包:"false"或者 "true" //获取剪切板文本 senddata("getclipboardtext"); 数据包:16\ngetclipboardtext 返回数据包:"aibote" //创建textview控件 senddata("createtextview", 100, "aibote textview", 10, 10, 300, 100); 数据包:14/3/15/2/2/3/3\ngetcreatetextview100aibote textview1010300100 返回数据包:"false"或者 "true" //创建edittext控件 senddata("createedittext", 101, "aibote edittext", 10, 10, 300, 100); 数据包:14/3/15/2/2/3/3\ngetcreateexitview101aibote exitview1010300100 返回数据包:"false"或者 "true" //创建checkbox控件 senddata("createcheckbox", 102, "aibote checkbox", 10, 10, 300, 100); 数据包:14/3/15/2/2/3/3\ngetcreatecheckbox102aibote checkbox1010300100 返回数据包:"false"或者 "true" //获取脚本配置参数 senddata("getscriptparam"); 数据包:14\ngetscriptparam 返回数据包:{"100":"aibote textview"}
windowsbot 开源协议
aibote windows自动化框架,由node.js客户端连接 windowsdriver.exe服务端程序,采用tcp协议传输命令。
全国领先xpath元素定位算法,一键拾取控件元素、图色 坐标等属性。与安卓端代码统一书写格式,降低用户学习成本。
独家图色定位算法,50毫秒以内的速度遍历查找1920*1080分辨率的设备。为了让更多人体验到我们产品,
我们决议在此公布框架协议,希望有更多开发者能完善并封装成各种计算机语言,封装请参考nodejs版的函数说明
发送命令协议格式:len/len/len...\ndata
//len:函数名和参数的(字符串)长度,统一为十进制 字符串类型
//data:函数名和参数数据 类型为 字符串或字节类型(string/byte)
接收命令协议格式:len/data
//len:返回数据包的(字符串)长度
//data:返回的数据,类型为字符串或字节类型(string/byte)
协议示例:
//查找句柄
senddata("findwindow", "classname", "windowname");
// 参数一:函数名称
// 参数二:窗口类名
// 参数三:窗口名
发送数据包:10/9/10\nfindwindowclassnamewindownmae
返回数据包:成功"65862",失败 "null"
//查找句柄数组
senddata("findwindows", "classname", "windowname");
// 参数一:函数名称
// 参数二:窗口类名
// 参数三:窗口名
发送数据包:11/9/10\nfindwindowsclassnamewindownmae
返回数据包:成功返回多个句柄"65862|65863|65864",失败 "null"
//查找子句柄
senddata("findsubwindow", 65862, "classname", "windowname");
// 参数一:函数名称
// 参数二:当前窗口句柄
// 参数三:窗口类名
// 参数四:窗口名
发送数据包:13/5/9/10\nfindsubwindow65862classnamewindownmae
返回数据包:成功"460538",失败 "null"
//查找父句柄
senddata("findparentwindow", 460538);
// 参数一:函数名称
// 参数二:当前窗口句柄
发送数据包:16/6/\nfindparentwindow460538
返回数据包:成功"65862",失败 "null"
//获取窗口名称
senddata("getwindowname", 65862);
// 参数一:函数名称
// 参数二:窗口句柄
发送数据包:13/5\ngetwindowname65862
返回数据包:成功"aibote",失败 "null"
//显示/隐藏窗口
senddata("showwindow", 65862, true);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:显示窗口 true, 隐藏窗口 false
发送数据包:10/5/4\nshowwindow65862true
返回数据包:"false"或者 "true"
//设置窗口到最顶层
senddata("setwindowtop", 65862);
// 参数一:函数名称
// 参数二:窗口句柄
发送数据包:12/5\nsetwindowtop65862
返回数据包:"false"或者 "true"
//移动鼠标
senddata("movemouse", 65862, 100, 100, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:x坐标
// 参数四:y坐标
// 参数五:操作模式
发送数据包:9/5/3/3/5\nmovemouse65862100100false
返回数据包:"true"
//移动鼠标(相对坐标)
senddata("movemouserelative", 65862, 100, 100, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:x坐标
// 参数四:y坐标
// 参数五:操作模式
发送数据包:17/5/3/3/5\nmovemouserelative65862100100false
返回数据包:"true"
//滚动鼠标
senddata("rollmouse", 65862, 100, 100, 10, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:x坐标
// 参数四:y坐标
// 参数五:鼠标滚动次数,负数下滚鼠标,正数上滚鼠标
// 参数六:操作模式
发送数据包:9/5/3/3/2/5\nrollmouse658621001002false
返回数据包:"true"
//点击鼠标
senddata("clickmouse", 65862, 100, 100, 1, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:x坐标
// 参数四:y坐标
// 参数五:点击类型,单击左键:1 单击右键:2 按下左键:3 弹起左键:4 按下右键:5 弹起右键:6 双击左键:7 双击右键:8
// 参数六:操作模式
发送数据包:9/5/3/3/1/5\nclickmouse658621001001false
返回数据包:"true"
//发送文本
senddata("sendkeys", "rpa");
// 参数一:函数名称
// 参数二:输入的文本
发送数据包:8/3\nsendkeysrpa
返回数据包:"true"
//后台发送文本
senddata("sendkeysbyhwnd", 65862, "rpa");
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:输入的文本
发送数据包:14/5/3\nsendkeysbyhwnd65862rpa
返回数据包:"true"
//输入虚拟键值(vk)
senddata("sendvk", 13, 1);
// 参数一:函数名称
// 参数二:虚拟键值 回车对应 vk键值 13
// 参数三:输入类型,按下弹起:1 按下:2 弹起:3
发送数据包:6/2/1\nsendvk131
返回数据包:"true"
//后台输入虚拟键值(vk)
senddata("sendvkbyhwnd", 65862, 13, 1);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:虚拟键值 回车对应 vk键值 13
// 参数四:输入类型,按下弹起:1 按下:2 弹起:3
发送数据包:12/5/2/1\nsendvkbyhwnd65862131
返回数据包:"true"
//截图保存
senddata("savescreenshot", 65862, "d:/1.png", 80, 150, 30, 30, 0, 127, 255, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:保存的图片路径(手机)
// 参数四:矩形左上角x坐标
// 参数五:矩形左上角y坐标
// 参数六:矩形右下角x坐标
// 参数七:矩形右下角y坐标
// 参数八:二值化算法类型
// 参数九:二值化阈值
// 参数十:二值化最大值
// 参数十一:前后台截图
发送数据包:14/5/8/2/3/2/2/1/3/3/5\nsavescreenshot65862d:/1.png8015030300127255false
返回数据包:"false"或者 "true"
//获取色值
senddata("getcolor", 65862, 100, 200, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:x坐标
// 参数四:y坐标
// 参数五:前后台获取颜色值
数据包:8/5/3/3/5\ngetcolor65862100200false
返回数据包:#000000
//找图
senddata("findimage", 65862, "d:/1.png", 0, 0, 0, 0, 0.95, 0, 0, 1, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:保存的图片路径(手机)
// 参数四:矩形左上角x坐标
// 参数五:矩形左上角y坐标
// 参数六:矩形右下角x坐标
// 参数七:矩形右下角y坐标
// 参数八:相似度
// 参数九:二值化阈值
// 参数十:二值化最大值
// 参数十一:多个坐标点
// 参数十二:前后台找图
数据包:9/5/8/1/1/1/1/4/1/1/1/5\nfindimage65862d:/1.png00000.95001false
返回数据包:单坐标点成功"x|y" 多坐标点成功 "x1|y1/x2|y2..." 失败"-1.0|-1.0"
//找动态图
senddata("findanimation", 65862, 100, 0, 0, 0, 0, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:前后两张图相隔的时间,单位毫秒
// 参数四:矩形左上角x坐标
// 参数五:矩形左上角y坐标
// 参数六:矩形右下角x坐标
// 参数七:矩形右下角y坐标
// 参数八:前后台找动态图
数据包:13/5/3/0/0/0/0/5\nfindanimation658621000000false
返回数据包:单坐标点成功"x|y" 多坐标点成功 "x1|y1/x2|y2..." 失败"-1.0|-1.0"
//找色
senddata("findcolor", 65862, "#e8f2f8", "1020#e7f0f7", 0, 0, 0, 0, 1, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:主颜色值
// 参数四:相对偏移的颜色点,以 "x坐标 y坐标 色值" 字符串形式
// 参数五:矩形左上角x坐标
// 参数六:矩形左上角y坐标
// 参数七:矩形右下角x坐标
// 参数八:矩形右下角y坐标
// 参数九:相似度
// 参数十:前后台找色
数据包:9/5/7/11/1/1/1/1/1/5\nfindcolor65862#e8f2f81020#e7f0f700001false
返回数据包:成功"x|y" 失败"-1.0|-1.0"
//比色
senddata("comparecolor", 65862, 100, 200, "#e8f2f8", "1020#e7f0f7", 0, 0, 0, 0, 1, false);
// 参数一:函数名称
// 参数二:窗口句柄
// 参数三:主颜色值所在的x坐标
// 参数四:主颜色值所在的y坐标
// 参数五:主颜色值
// 参数六:相对偏移的颜色点,以 "x坐标 y坐标 色值" 字符串形式
// 参数七:矩形左上角x坐标
// 参数八:矩形左上角y坐标
// 参数九:矩形右下角x坐标
// 参数十:矩形右下角y坐标
// 参数十一:相似度
// 参数十二:前后台比色
数据包:12/5/3/3/7/11/1/1/1/1/1/5\ncomparecolor65862100200#e8f2f81020#e7f0f700001false
返回数据包:"false"或者 "true"
//ocr
senddata("ocr", 65862, 0, 0, 0, 0, 1.0, false);
数据包:3/5/1/1/1/1/3/5\nocr6586200001.0false
返回数据包:[[[7.0, 18.0], [61.0, 18.0], [61.0, 38.0], [7.0, 38.0]], ('办公自动化', 0.8806074261665344)][[[4.0, 94.0], [49.0, 94.0], [49.0, 118.0], [4.0, 118.0]], ('rpa', 0.978314220905304)]
//ocrbyfile
senddata("ocrbyfile", "d:/1.png", 0, 0, 0, 0, 1.0);
数据包:9/8/1/1/1/1/3\nocrbyfiled:/1.png00001.0
返回数据包:[[[7.0, 18.0], [61.0, 18.0], [61.0, 38.0], [7.0, 38.0]], ('办公自动化', 0.8806074261665344)][[[4.0, 94.0], [49.0, 94.0], [49.0, 118.0], [4.0, 118.0]], ('rpa', 0.978314220905304)]
//获取指定元素名称
senddata("getelementname", 65862, "window/text");
数据包:14/5/11\ngetelementname65862window/text
返回数据包:"aibote is pure code rpa"
//获取指定元素文本
senddata("getelementvalue", 65862, "window/edit");
数据包:15/5/11\ngetelementvalue65862window/edit
返回数据包:"aibote rpa"
//获取指定元素矩形大小
senddata("getelementrect", 65862, "window/button");
数据包:14/5/13\ngetelementrect65862window/button
返回数据包:"239|628|989|764"
//获取指定元素窗口句柄
senddata("getelementwindow", 65862, "window/button");
数据包:16/5/13\ngetelementwindow65862window/button
返回数据包:"460538"
//点击元素
senddata("clickelement", 65862, "window/button", 1);
数据包:12/5/13/1\nclickelement65862window/button1
返回数据包:"false"或者 "true"
//设置指定元素作为焦点
senddata("setelementfocus", 65862, "window/button");
数据包:15/5/13\nsetelementfocus65862window/button
返回数据包:"false"或者 "true"
//设置元素文本
senddata("setelementvalue", 65862, "window/button", "rpa");
数据包:15/5/13/3\nsetelementvalue65862window/buttonrpa
返回数据包:"false"或者 "true"
//滚动元素
senddata("setelementscroll", 65862, "window", -1, 0.1);
数据包:16/5/6/2/3\nsetelementscroll65862window-10.1
返回数据包:"false"或者 "true"
//关闭窗口
senddata("closewindow", 65862, "window");
数据包:11/5/6\nclosewindow65862window
返回数据包:"false"或者 "true"
//设置窗口状态
senddata("setwindowstate", 65862, "window", 2);
数据包:14/5/6/1\nsetwindowstate65862window2
返回数据包:"false"或者 "true"
//设置剪切板文本
senddata("setclipboardtext", "rpa");
数据包:16/3\nsetclipboardtextrpa
返回数据包:"false"或者 "true"
//获取剪切板文本
senddata("getclipboardtext");
数据包:16\ngetclipboardtext
返回数据包:"rpa"
//启动指定程序
senddata("startprocess", "cmd", true, false);
数据包:12/3/4/5\nstartprocesscmdtruefalse
返回数据包:"false"或者 "true"
//执行cmd命令
senddata("executecommand", "ipconfig", 300);
数据包:14/8/3\nexecutecommandipconfig300
返回数据包:返回cmd执行结果
//指定url下载文件
senddata("downloadfile", "http://www.gogo.com/rpa.rar", "d:/rpa.rar", true);
数据包:12/27/10/4\ndownloadfilehttp://www.gogo.com/rpa.rard:/rpa.rartrue
返回数据包:"true"
//打开excle
senddata("openexcel", "d:/rpa.xlsx");
数据包:9/11\nopenexceld:/rpa.xlsx
返回数据包:"null"或者 {"book":"088173sdfu13","path":"d:/rpa.xlsx"}
//打开excel表格
senddata("openexcelsheet", "088173sdfu13", "d:/rpa.xlsx", "sheet1");
数据包:14/12/11/6\nopenexcelsheet088173sdfu13d:/rpa.xlsxsheet1
返回数据包:"null"或者 "a123hhi123f132"
//保存excel
senddata("saveexcel", "088173sdfu13", "d:/rpa.xlsx");
数据包:9/12/11\nsaveexcel088173sdfu13d:/rpa.xlsx
返回数据包:"false"或者 "true"
//写入数字到表格
senddata("writeexcelnum", "a123hhi123f132", 0, 0, 123);
数据包:13/14/1/1/3\nwriteexcelnuma123hhi123f13200123
返回数据包:"false"或者 "true"
//写入字符串到表格
senddata("writeexcelstr", "a123hhi123f132", 0, 0, "rpa");
数据包:13/14/1/1/3\nwriteexcelstra123hhi123f13200rpa
返回数据包:"false"或者 "true"
//读取excel表格数字
senddata("readexcelnum", "a123hhi123f132", 0, 0);
数据包:12/14/1/1\nreadexcelnuma123hhi123f13200
返回数据包:123
//读取excel表格字串
senddata("readexcelstr", "a123hhi123f132", 0, 0);
数据包:12/14/1/1\nreadexcelstra123hhi123f13200
返回数据包:"rpa"
删除excel表格行
senddata("removeexcelrow", 0, 0);
数据包:14/1/1\nremoveexcelrow00
返回数据包:"false"或者 "true"
删除excel表格列
senddata("removeexcelcol", 0, 0);
数据包:14/1/1\nremoveexcelcol00
返回数据包:"false"或者 "true"
webbot 开源协议
aibote web自动化框架,由node.js客户端连接 webdriver.exe服务端程序,采用tcp协议传输命令。
webbot 基于chromium内核研发而成的一款web自动化框架,因此支持chromium内核的所有浏览器和应用程序。框架稳定,运行速度非常快!
为了让更多人体验到我们产品,我们决议在此公布框架协议,希望有更多开发者能完善并封装成各种计算机语言,封装请参考nodejs版的函数说明
发送命令协议格式:len/len/len...\ndata
//len:函数名和参数的(字符串)长度,统一为十进制 字符串类型
//data:函数名和参数数据 类型为 字符串或字节类型(string/byte)
接收命令协议格式:len/data
//len:返回数据包的(字符串)长度
//data:返回的数据,类型为字符串或字节类型(string/byte)
协议示例:
//跳转url
senddata("goto", "http://www.ai-bot.net);
数据包:4/21\ngotohttp://www.ai-bot.net
返回数据包:"false"或者 "true"
//新建tab页面并跳转到指定url
senddata("newpage", "http://www.ai-bot.net);
数据包:7/21\nnewpagehttp://www.ai-bot.net
返回数据包:"false"或者 "true"
//返回
senddata("back");
数据包:4\nback
返回数据包:"false"或者 "true"
//前进
senddata("forward");
数据包:7\nforward
返回数据包:"false"或者 "true"
//刷新
senddata("refresh");
数据包:7\nrefresh
返回数据包:"false"或者 "true"
//获取当前页面id
senddata("getcurpageid");
数据包:12\ngetcurpageid
返回数据包:"e2db8a0856d83c4c3c194b79bbc2235f"
//获取所有页面id
senddata("getallpageid");
数据包:12\ngetallpageid
返回数据包:"e2db8a0856d83c4c3c194b79bbc2235f|e2db8a0856d83c4c3c194b79bbc22352"
//切换当前页面
senddata("switchcurpage");
数据包:13\nswitchcurpage
返回数据包:"false"或者 "true"
//切换指定页面
senddata("switchpage", "e2db8a0856d83c4c3c194b79bbc2235f");
数据包:10/32\nswitchpagee2db8a0856d83c4c3c194b79bbc2235f
返回数据包:"false"或者 "true"
//关闭当前页面
senddata("closepage");
数据包:9\nclosepage
返回数据包:"false"或者 "true"
//获取当前url
senddata("getcurrenturl");
数据包:13\ngetcurrenturl
返回数据包:"http://www.ai-bot.net",失败返回 "webdriver error"
//获取当前标题
senddata("gettitle");
数据包:8\ngettitle
返回数据包:"rpa自动化平台",失败返回 "webdriver error"
//切换frame
senddata("switchframe", "https://passport.126.com/webzj");
数据包:11/30\nswitchframehttps://passport.126.com/webzj
返回数据包:"false"或者 "true"
//切换到主frame
senddata("switchmainframe");
数据包:15\nswitchmainframe
返回数据包:"false"或者 "true"
//点击元素
senddata("clickelement", "/html/body/header/div/nav/ul/li[5]/a");
数据包:12/36\nclickelement/html/body/header/div/nav/ul/li[5]/a
返回数据包:"false"或者 "true"
//设置编辑框值
senddata("setelementvalue", "/html/body/header/div/nav/ul/li[5]/a", "rpa");
数据包:15/36/3\nclickelement/html/body/header/div/nav/ul/li[5]/arpa
返回数据包:"false"或者 "true"
//获取文本
senddata("getelementtext", "/html/body/header/div/nav/ul/li[5]/a");
数据包:14/36\ngetelementtext/html/body/header/div/nav/ul/li[5]/a
返回数据包:"rpa"
//设置属性值
senddata("setelementattribute", "/html/body/header/div/nav/ul/li[5]/a", "src", "http://www.ai-bot.net");
数据包:19/36/3/22\nsetelementattribute/html/body/header/div/nav/ul/li[5]/asrchttp://www.ai-bot.net
返回数据包:"false"或者 "true"
//获取指定属性的值
senddata("getelementattribute", "/html/body/header/div/nav/ul/li[5]/a", "src");
数据包:19/36/3\ngetelementattribute/html/body/header/div/nav/ul/li[5]/asrc
返回数据包:"http://www.ai-bot.net"
//获取矩形位置
senddata("getelementrect", "/html/body/header/div/nav/ul/li[5]/a");
数据包:14/36\ngetelementrect/html/body/header/div/nav/ul/li[5]/a
返回数据包:'{"left":74,"top":19,"right":117, "bottom":42,"width":43, "height":23}'
//判断元素是否选中
senddata("isselected", "/html/body/header/div/nav/ul/li[5]/a");
数据包:10/36\nisselected/html/body/header/div/nav/ul/li[5]/a
返回数据包:成功返回"true",失败返回"webdriver error"
//判断元素是否可见
senddata("isdisplayed", "/html/body/header/div/nav/ul/li[5]/a");
数据包:11/36\nisdisplayed/html/body/header/div/nav/ul/li[5]/a
返回数据包:成功返回"true",失败返回"webdriver error"
//清空元素
senddata("clearelement", "/html/body/header/div/nav/ul/li[5]/a");
数据包:12/36\nclearelement/html/body/header/div/nav/ul/li[5]/a
返回数据包:"false"或者 "true"
//输入文本
senddata("sendkeys", "/html/body/header/div/nav/ul/li[5]/a", "aibote");
数据包:8/36/6\nsendkeys/html/body/header/div/nav/ul/li[5]/aaibote
返回数据包:"false"或者 "true"
//发送回车键
senddata("sendenter");
数据包:9\nsendenter
返回数据包:"false"或者 "true"
//点击鼠标
senddata("movemouse", "100", "200");
数据包:9/3/3\nmovemouse100200
返回数据包:"false"或者 "true"
//滚动鼠标
senddata("wheelmouse", "0", "100");
数据包:10/1/3\nwheelmouse0100
返回数据包:"false"或者 "true"
//截图
senddata("takescreenshot");
数据包:14\ntakescreenshot
返回数据包:成功返回png图片格式 base64 字符串,失败返回null
//元素截图
senddata("takescreenshot", "/html/body/header/div/nav/ul/li[5]/a");
数据包:14/36\ntakescreenshot/html/body/header/div/nav/ul/li[5]/a
返回数据包:成功返回png图片格式 base64 字符串,失败返回null
//点击警告框
senddata("clickalert", "true", "prompttext");
数据包:10/4/10\nclickalerttrueprompttext
返回数据包:"false"或者 "true"
//获取警告框文本
senddata("getalerttext");
数据包:12\ngetalerttext
返回数据包:"aibote rpa"
//获取指定url匹配的cookies
senddata("getcookies", "http://www.ai-bot.net");
数据包:10/21\ngetcookieshttp://www.ai-bot.net
返回数据包:成功返回json格式的字符串,失败返回null
//获取所有cookies
senddata("getallcookies");
数据包:13\ngetallcookies
返回数据包:成功返回json格式的字符串,失败返回null
//注入javascript
senddata("executescript", "(function () {return 'aibote rpa'})();");
数据包:13/38\nexecutescript(function () {return 'aibote rpa'})();
返回数据包:"aibote rpa" 假如注入代码为函数且有return语句,则返回retrun 的值,否则返回null;
文章源自玩技e族-https://www.playezu.com/345378.html 注意:本文法律责任由该作者承担,侵权请联系▷诈骗举报◁▷新闻不符◁▷我要投稿◁
免责声明:本文内容来自用户上传并发布或网络新闻客户端自媒体,玩技博客仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系删除。
免责声明:本文内容来自用户上传并发布或网络新闻客户端自媒体,玩技博客仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系删除。

1f
好东西