什么是Ai-Bot?

Ai-Bot是Android+Windows平台上的rpa框架。

1、跟python的区别?跟uipaht uibot 其他框架的区别?

1) VS python

相同点:Ai-Bot基于node.js语言的一款自动化框架。和python一样,有同样强大的社区库调用。

不同点:

          1、Ai-Bot内置chromium内核浏览器,绕过webdriver驱动直接与浏览器内核通信。python selenium则通过webdriver驱动浏览器,浏览器会有webdriver特征码。

          2、Ai-Bot 支持windows ui元素操作,Id、Name、className、ControlType、XPath等定位方式。c++实现速度非常快。

          3、Android自动化,优化appium内核,动态画面处理较快,除了appium 提供元素定位之外,还支持文字定位、图色定位,有效提供h5 webview界面的自动化需求。

2) VS uipaht uibot

          1、uipaht uibot 图形编辑机器人,相对于Ai-Bot低代码形式,更适合普通人使用。

          2、Ai-Bot 采用c++实现,与目前其他rpa框架 c# vb python等语言实现不同。对于专业的rpa实施人士来说,Ai-Bot灵活性更高,机器人运行更稳定性强,速度更快。

          3、由于Ai-Bot拥有node.js强大社区库,它能够完成其他rpa框架无法完成的工作需求。

          4、Ai-Bot 不依赖系统的软件环境。直接对word excle 数据库和浏览器操作,电脑上不需安装相关软件。

          5、Ai-Bot 支持Android和windows 平台同时协作办公

          6、Ai-Bot 大部分功能是开源的。


2、Ai-Bot开发文档

1)Windows开发文档

1.创建/关闭WindowsBot

(1)主函数示例

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

async function mian()

{

let windowsBotPort = 9999;

let proxyServer = "127.0.0.1:888";

//初始化WindowsBot

await windowsBot.InitWindowsBot(windowsBotPort, proxyServer);

}

mian();

//主函数初始化WindowsBot服务

//windowsBotPort 整型,WindowsBot服务端口,多开进程,端口不可重复

//proxyServer 字符串,可选参数。设置WebBot内置浏览器代理ip

(2)关闭WindowsBot

await CloseWindowsBot();

//关闭WindowsBot服务

2.等待超时

await windowsBot.Sleep(3000);

//显示等待

//参数一 整型,等待时间,单位毫秒

await windowsBot.SetImplicitTimeout(waitMS, intervalMS = 10);

//隐式等待

//参数一 整型,等待时间,单位毫秒

//参数二 整型,心跳间隔,单位毫秒。可选参数,默认10毫秒

3.操作模式

await windowsBot.SetCurMode(true);

//参数一 布尔类型,true前台,false后台,WindowsBot默认前台操作

4.查找窗口句柄

await windowsBot.FindWindowHandle("className", "windowName");

//查找窗口句柄

//参数一 字符串型,窗口类名

//参数二 字符串型,窗口标题

//成功返回句柄,失败返回null

await windowsBot.FindWindowsHandle("className", "windowName");

//查找窗口句柄数组

//参数一 字符串型,窗口类名

//参数二 字符串型,窗口标题

//成功返回句柄数组,失败返回null

await windowsBot.FindSubWindowHandle("hwndParent", "className", "windowName");

//查找子窗口句柄

//参数一 整型,父窗口句柄

//参数二 字符串型,窗口类名

//参数三 字符串型,窗口标题

//成功返回句柄,失败返回null

await windowsBot.FindWebBotHandle();

//查找WebBot内置浏览器句柄

//成功返回句柄,失败返回null

5.鼠标操作

await windowsBot.MoveMouse(hwnd, x, y);

//移动鼠标

//参数一 整型,窗口句柄

//参数二 整型,x坐标

//参数三 整型,y坐标

await windowsBot.RollMouse(hwnd, x, y, dwData);

//滚动鼠标

//参数一 整型,窗口句柄

//参数二 整型,x坐标

//参数三 整型,y坐标

//参数四 整型,鼠标滚动次数,负数下滚鼠标,正数上滚鼠标

await windowsBot.ClickMouse(hwnd, x, y, msg);

//点击鼠标,后台模式下,控件独句柄与hwnd不一致时会失败

//参数一 整型,窗口句柄

//参数二 整型,x坐标

//参数三 整型,y坐标

//参数四,单击左键:1 单击右键:2 按下左键:3 弹起左键:4 按下右键:5 弹起右键:6 双击左键:7 双击右键:8

6.键盘操作

await windowsBot.InputText(hwnd, text);

//输入文本,杀毒软件可能会拦截

//参数一 整型,窗口句柄

//参数二 字符串型,输入内容

await windowsBot.InputKeyborad(bVk, msg);

//输入键盘VK值

//参数一 整型,VK键值

//参数二 整型,按下弹起:1 按下:2 弹起:3

7.截图保存

await windowsBot.SaveScreenshot(hwnd, imagePath, x = 0, y =0, width = 0, height = 0);

//后台截图保存

//参数一 整型,窗口句柄

//参数二 字符串型,图片保存的路径

//参数三 整型,可选参数,顶点x坐标

//参数四 整型,可选参数,顶点y坐标

//参数五 整型,可选参数,图片宽度

//参数六 整型,可选参数,图片高度

//成功返回true,失败返回false

await windowsBot.FrontSaveScreenshot(imagePath, x = 0, y =0, width = 0, height = 0);

//前台截图保存,当SaveScreenshot截图失效时,可用此函数

//参数一 字符串型,图片保存的路径

//参数二 整型,可选参数,顶点x坐标

//参数三 整型,可选参数,顶点y坐标

//参数四 整型,可选参数,图片宽度

//参数五 整型,可选参数,图片高度

//成功返回true,失败返回false

8.图色定位

await windowsBot.FindColorCount(imagePath, R, G, B);

//查找图片颜色点的数量和坐标

//参数一 字符串型,图片的路径

//参数二 整型,红

//参数三 整型,绿

//参数四 整型,蓝

//返回指定rgb点的数量和坐标

await windowsBot.FindColor(hwnd, imagePath, R, G, B, index = 0);

//查找指定色值在图片上的位置

//参数一 整型,窗口句柄

//参数二 字符串型,图片的路径

//参数三 整型,红

//参数四 整型,绿

//参数五 整型,蓝

//参数六 整型,可选参数,指定出现的次数,默认第一次查找到的坐标

//成功返回指定rgb点的坐标,失败返回 {x:-1, y:-1}

await windowsBot.FindImage(hwnd, sourceImagePath, destImagePath, sim);

//查找图片,大图找小图

//参数一 整型,窗口句柄

//参数二 字符串型,大图路径

//参数三 字符串型,小图路径

//参数四 浮点型,相似度0.0-1.0

//成功返回指定rgb点的坐标,失败返回 {x:-1, y:-1}

9.系统剪切板

await windowsBot.SetClipboardText(text);

//设置剪切板文本

//参数一 字符串型,设置的文本

await windowsBot.GetClipboardText();

//获取剪切板文本

//返回剪切板文本

10.启动程序

await windowsBot.StartProcess(commandLine, showWindow = true, isWait = false);

//启动指定程序

//参数一 字符串型,启动命令行

//参数二 布尔型,是否显示窗口。可选参数,默认显示窗口

//参数三 布尔型,是否等待程序结束。可选参数,默认不等待

//成功返回true,失败返回false

11.下载文件

await windowsBot.DownloadFile(url, filePath, isWait);

//启动指定程序

//参数一 字符串型,文件地址

//参数二 字符串型,文件保存的路径

//参数三 布尔型,是否等待.为true时,等待下载完成

12.ocr系统

await windowsBot.InitOcr(appId, apiKey, secretKey);

//初始化百度ocr

//参数一 字符串型,百度ocr提供

//参数二 字符串型,百度ocr提供

//参数三 字符串型,百度ocr提供

await windowsBot.GetImageWords(imagePath, ocrType);

//百度ocr获取图片上的文字

//参数一 字符串型,图片路径

//参数二 整型,识别类型,通用文字识别:1 高精度版:2 网络图片文字识别:3 数字识别:4 手写文字识

别:5 二维码识别:6

//成功返回获取的文字

await windowsBot.FindImageWords(hwnd, imagePath, words, index = 0);

//百度ocr获取图片文字坐标

//参数一 整型,图片所属窗口的句柄,手机图片识别一般为null

//参数二 字符串型,图片路径

//参数三 字符串型,识别的文字

//参数四 整型,可选参数。文字出现的次数,默认为0,查找第一次出现的坐标

//成功返回文字坐标,失败返回{x:-1, y:-1}

13.验证码识别系统

await windowsBot.InitCheckCode(userName, passWord);

//初始化验证码系统

//参数一 字符串型,用户名,第三方平台提供

//参数二 字符串型,用户密码,第三方平台提供

await windowsBot.GetCheckCode(imagePath, codeType);

//获取验证码

//参数一 字符串型,验证码图片路径

//参数二 字符串型,验证码类型,参考第三方平台

//成功返回验证码,失败返回错误信息

await windowsBot.SendErrorCode();

//发送验证码识出错

//成功返回"true",失败返回错误信息

14.窗口元素操作

注意:窗口元素操作未默认释放,必须手动释放,否则内存泄漏!

(1)查找元素

await windowsBot.FindRootElement(hwnd);

//查找窗口根元素

//参数一 整型,窗口句柄

//成功返回元素对象,失败返回null

await windowsBot.FindFocusElement();

//查找焦点元素

//成功返回元素对象,失败返回null

await windowsBot.FindElementByAutomationId(rootElement, automationId);

//通过automationId查找元素

//参数一 对象,根元素

//参数二 字符串,要查找元素的automationId值

//成功返回元素对象,失败返回null

await windowsBot.FindElementsByAutomationId(rootElement, automationId);

//通过automationId查找元素数组

//参数一 对象,根元素

//参数二 字符串,要查找元素的automationId值

//成功返回元素对象数组,失败返回null

await windowsBot.FindElementByName(rootElement, name);

//通过name查找元素

//参数一 对象,根元素

//参数二 字符串,要查找元素的name值

//成功返回元素对象,失败返回null

await windowsBot.FindElementsByName(rootElement, name);

//通过name查找元素数组

//参数一 对象,根元素

//参数二 字符串,要查找元素的name值

//成功返回元素对象数组,失败返回null

await windowsBot.FindElementByClassName(rootElement, className);

//通过className查找元素

//参数一 对象,根元素

//参数二 字符串,要查找元素的className值

//成功返回元素对象,失败返回null

await windowsBot.FindElementsByClassName(rootElement, className);

//通过className查找元素数组

//参数一 对象,根元素

//参数二 字符串,要查找元素的className值

//成功返回元素对象数组,失败返回null

await windowsBot.FindElementByControlType(rootElement, controlType);

//通过controlType查找元素

//参数一 对象,根元素

//参数二 字符串,要查找元素的controlType值

//成功返回元素对象,失败返回null

await windowsBot.FindElementsByControlType(rootElement, controlType);

//通过controlType查找元素数组

//参数一 对象,根元素

//参数二 字符串,要查找元素的controlType值

//成功返回元素对象数组,失败返回null

await windowsBot.FindElementByXpath(rootElement, xpath);

//通过xpath查找元素

//参数一 对象,根元素

//参数二 字符串,要查找元素的xpath值

//成功返回元素对象,失败返回null

await windowsBot.FindParentElement(currentElement, isRelease = true);

//查找父元素

//参数一 对象,当前元素

//参数二 布尔型,可选参数。是否释放当前元素

//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素

//成功返回元素对象,失败返回null

await windowsBot.FindNextSiblingElement(currentElement, isRelease = true);

//查找下一个兄弟元素

//参数一 对象,当前元素

//参数二 布尔型,可选参数。是否释放当前元素

//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素

//成功返回元素对象,失败返回null

await windowsBot.FindPreviousSiblingElement(currentElement, isRelease = true);

//查找上一个兄弟元素

//参数一 对象,当前元素

//参数二 布尔型,可选参数。是否释放当前元素

//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素

//成功返回元素对象,失败返回null

await windowsBot.FindFirstChildElement(currentElement, isRelease = true);

//查找第一个子元素

//参数一 对象,当前元素

//参数二 布尔型,可选参数。是否释放当前元素

//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素

//成功返回元素对象,失败返回null

await windowsBot.FindLastChildElement(currentElement, isRelease = true);

//查找最后一个子元素

//参数一 对象,当前元素

//参数二 布尔型,可选参数。是否释放当前元素

//currentElement不再使用时必须释放,否则内存泄漏.默认为true释放当前元素

//成功返回元素对象,失败返回null

(2)元素方法

await windowsBot.GetElementName(element, isRelease = true);

//获取指定元素name属性值

//参数一 对象,指定元素

//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回元素name属性值

await windowsBot.GetElementBoundingRectangle(element, isRelease = true);

//获取指定元素矩形大小

//参数一 对象,指定元素

//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回元素矩形大小,失败返回{left:-1, top:-1, right:-1, bottom:-1}

await windowsBot.GetElementValueValue(element, isRelease = true);

//获取指定元素ValueValue属性值

//参数一 对象,指定元素

//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回元素ValueValue属性值

await windowsBot.GetControlType(element, isRelease = true);

//获取指定元素ControlType属性值

//参数一 对象,指定元素

//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回元素ControlType属性值

await windowsBot.SetElementValue(element, value, isRelease = true);

//设置指定元素value

//参数一 对象,指定元素

//参数二 字符串型,设置的值

//参数三 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回true,失败返回false

await windowsBot.SetElementValueEx(element, value, isRelease = true);

//通过元素窗口句柄设置指定元素value

//参数一 对象,指定元素

//参数二 字符串型,设置的值

//参数三 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回true,失败返回false.后台模式下,如果元素没有句柄则失败

await windowsBot.InvokeElement(element, isRelease = true);

//执行元素默认操作,一般用作点击

//参数一 对象,指定元素

//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回true,失败返回false

await windowsBot.SetElementFocus(element, isRelease = true);

//设置指定元素作为焦点

//参数一 对象,指定元素

//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回true,失败返回false

await windowsBot.SetElementScroll(element, horizontalPercent, verticalPercent, isRelease = true);

//设置指定元素滚动条

//参数一 对象,指定元素

//参数二 浮点型,水平百分比0.0-1.0,为-1时不滚动

//参数三 浮点型,垂直百分比0.0-1.0,为-1时不滚动

//参数四 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回true,失败返回false

await windowsBot.ClickElement(element, msg, isRelease = true);

//通过元素窗口句柄点击控件

//参数一 对象,指定元素

//参数二 整型,单击左键:1 单击右键:2 按下左键:3 弹起左键:4 按下右键:5 弹起右键:6 双击左键:7

双击右键:8

//参数三 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回true,失败返回false.后台模式下,元素没有句柄则失败

await windowsBot.CloseWindow(element, isRelease = true);

//关闭指定元素窗口

//参数一 对象,指定元素

//参数二 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回true,失败返回false.

await windowsBot.SetWindowState(element, state, isRelease = true);

//设置指定元素窗口状态

//参数一 对象,指定元素

//参数二 整型,正常:0 最大化:1 最小化:2

//参数三 布尔型,可选参数。element不再使用时必须释放,否则内存泄漏.默认为true释放

//成功返回true,失败返回false.

await windowsBot.ReleaseElement(element);

//手动释放指定元素,windows元素操作必须要释放元素,否则内存泄漏

//参数一 对象,指定元素

//成功返回true,失败返回false.

await windowsBot.ReleaseElements(elements);

//手动释放指定元素数组,元素数组不再使用时,必须调用此函数手动释放,否则大量内存泄漏

//参数一 对象,指定元素数组

15.内置浏览器(WebBot)

(1)WebBot操作

await windowsBot.openWebBot(url);

//打开内置浏览器WebBot

//参数一 字符串型,指定网址

await windowsBot.switchPage(index);

//切换WebBot页面

//参数一 整型,索引号,0为起首页

await windowsBot.closePage(index);

//关闭WebBot页面

//参数一 整型,索引号,0为起首页

(2)获取元素

await windowsBot.getElementById(id, iframe = null);

//通过id获取元素

//参数一 字符串型,元素id值

//参数二 字符串型,可选参数,元素所属的iframe

//成功返回元素对象,失败返回null

await windowsBot.getElementsByClassName(classNames, iframe = null);

//通过class获取元素数组

//参数一 字符串型,元素class值

//参数二 字符串型,可选参数,元素所属的iframe

//成功返回元素对象数组,失败返回null

await windowsBot.getElementsByName(elementName, iframe = null);

//通过name获取元素数组

//参数一 字符串型,元素name值

//参数二 字符串型,可选参数,元素所属的iframe

//成功返回元素对象数组,失败返回null

await windowsBot.getElementsByTagName(localName, iframe = null);

//通过tagName获取元素数组

//参数一 字符串型,元素tagName值

//参数二 字符串型,可选参数,元素所属的iframe

//成功返回元素对象数组,失败返回null

await windowsBot.getElementByXpath(xpath, iframe = null);

//通过xpath获取元素数组

//参数一 字符串型,元素xpath路径

//参数二 字符串型,可选参数,元素所属的iframe

//成功返回元素对象,失败返回null

await windowsBot.querySelector(selector, iframe = null);

//通过ccs selector获取元素

//参数一 字符串型,元素selector路径

//参数二 字符串型,可选参数,元素所属的iframe

//成功返回元素对象,失败返回null

await windowsBot.querySelectorAll(selectors, iframe = null);

//通过ccs selector获取元素数组

//参数一 字符串型,元素selector路径

//参数二 字符串型,可选参数,元素所属的iframe

//成功返回元素对象数组,失败返回null

(3)元素方法

await windowsBot.clickElement(element);

//点击元素

//参数一 对象,要点击的元素

await windowsBot.clickElementEx(element);

//点击元素(windows api方式点击)

//参数一 对象,要点击的元素

await windowsBot.setValue(element, value);

//设置元素value

//参数一 对象,设置的元素

//参数二 字符串型,设置的值

await windowsBot.getValue(element);

//获取元素value

//参数一 对象,指定的元素

//成功返回value值

await windowsBot.setTextConten(element, value);

//设置元素textConten

//参数一 对象,设置的元素

//参数二 字符串型,设置的值

await windowsBot.getTextConten(element);

//获取元素textConten

//参数一 对象,指定的元素

//成功返回textConten值

await windowsBot.setOuterText(element, value);

//设置元素outerText

//参数一 对象,设置的元素

//参数二 字符串型,设置的值

await windowsBot.getOuterText(element);

//获取元素outerText

//参数一 对象,指定的元素

//成功返回outerText值

await windowsBot.setOuterHTML(element, value);

//设置元素setOuterHTML

//参数一 对象,设置的元素

//参数二 字符串型,设置的值

await windowsBot.getOuterHTML(element);

//获取元素outerText

//参数一 对象,指定的元素

//成功返回outerHTML值

await windowsBot.setInnerText(element, value);

//设置元素setInnerText

//参数一 对象,设置的元素

//参数二 字符串型,设置的值

await windowsBot.getInnerText(element);

//获取元素innerHTML

//参数一 对象,指定的元素

//成功返回innerHTML值

await windowsBot.setAttribute(element, value, name);

//设置元素属性

//参数一 对象,设置的元素

//参数二 字符串型,设置的值

//参数三 字符串型,属性名称

await windowsBot.getAttribute(element, name);

//获取元素属性值

//参数一 对象,指定的元素

//参数二 字符串型,属性名称

//成功返回name对应的属性值

await windowsBot.setSelect(element, checkValue);

//选择下拉框值

//参数一 对象,指定的元素

//参数二 字符串型,选中的值

//成功返回name对应的属性值

await windowsBot.getBoundingClientRect(element);

//获取元素矩形大小

//参数一 对象,指定的元素

//成功返矩形大小,失败返回null

(4)注入JavaScript

await windowsBot.executeScript(scriptCode);

//注入JavaScript代码在v8执行

//参数一 字符串型,JavaScript代码

(5)node与V8数据共享

await windowsBot.nodePipeScript(shareData = 'null');

//WebBot V8有同名称扩展函数,可在executeScript调用。shareData更新需要10-100毫秒

//参数一 字符串型,设置共享数据值,可选参数。

//返回node/v8 设置的shareData值。

16.Word文档

await windowsBot.wordCreate(options = {type: 'docx'});

/创建Wrod文档

//参数一 对象,Word文档格式,可选参数,options列表:

* type(字符串)'docx' 必要参数值

* author(字符串)-文档的作者

* creator(字符串)-别名。文档的作者

* description'(字符串)-文档的属性注释

* keywords(字符串)-文档的关键字

* orientation(字符串)-横向'landscape'或纵向'portrait'。默认值为'portrait'

* pageMargins(对象)-设置文档页边距。默认值为{top: 1800, right: 1440, bottom: 1800,

left: 1440}

* pageSize(字符串|对象)-设置文档页面大小。默认值为A4(支持值:'A4', 'A3', 'letter

paper')。或使用{width: 11906, height: 16838}设置自定义尺寸

* subject (字符串)-文档的主题

* title(字符串)-文档的标题

* columns(整型)-每页中的列数。默认值为1列。

//返回word对象

await windowsBot.wordAddPage(docxObject);

//添加word分页

//参数一 对象,word对象

await windowsBot.wordCreateTable(docxObject, table, tableStyle);

//创建word表格

//参数一 对象,word对象

//参数二 对象,表格

//参数三 对象,表格样式

await windowsBot.wordAddHeader(docxObject, text, options = '');

//添加页眉

//参数一 对象,word对象

//参数二 字符串,要添加的文本

//参数三 字符串,可选参数,要更改的页面 'even'更改偶数页。'first'仅更改首页

await windowsBot.wordAddFooter(docxObject, text, options = '');

//添加页脚

//参数一 对象,word对象

//参数二 字符串,要添加的文本

//参数三 字符串,可选参数,要更改的页面 'even'更改偶数页。'first'仅更改首页

await windowsBot.wordCreateParagraph(docxObject, options = {align: 'left'});

//创建段落

//参数一 对象,word对象

//参数二 对象, 可选参数,段落格式,options列表:

* align(字符串)-水平对齐,可以是'left'(默认),'right','center'或'justify'

* textAlignment(字符串)-垂直对齐方式,'center', 'top', 'bottom'或'baseline'

* indentLeft(数字)- 向左缩进

* indentFirstLine(数字)- 缩进第一行

* backline(字符串)-颜色代码,例如:'ffffff'(白色)或'000000'黑色)

//成功返回段落对象

await windowsBot.wordCreateListOfDots(docxObject, options = {align: 'left'});

//创建无作序号的段落

//参数一 对象,word对象

//参数二 对象, 可选参数,段落格式,options列表:参考wordCreateParagraph

//成功返回段落对象

await windowsBot.wordCreateListOfNumbers(docxObject, options = {align: 'left'});

//创建有序号数字的段落

//参数一 对象,word对象

//参数二 对象, 可选参数,段落格式,options列表:参考wordCreateParagraph

//成功返回段落对象

await windowsBot.wordCreateNestedUnOrderedList(docxObject, options = {"level":2});

//创建有等级的无序号段落

//参数一 对象,word对象

//参数二 对象, 可选参数,段落格式,options列表:参考wordCreateParagraph

//成功返回段落对象

await windowsBot.wordCreateNestedOrderedList(docxObject, options = {"level":2});

//创建有等级的序号段落

//参数一 对象,word对象

//参数二 对象, 可选参数,段落格式,options列表:参考wordCreateParagraph

//成功返回段落对象

await windowsBot.wordAddText(paragraphObject, text, sytle = {});

//将文本添加到段落

//参数一 对象,段落对象对象

//参数二 字符串, 要添加的文本

//参数三 对象,可选参数,文本样式,sytle列表:

* back(字符串)-背景颜色代码,例如:'ffffff'(白色)或'000000'黑色)

* shdType(字符串)-要使用的可选模式代码:'clear'(无模

式),'pct10','pct12','pct15','diagCross','diagStripe','horzCross','horzStripe','

nil' ,'thinDiagCross','solid'等

* shdColor(字符串)-模式的前部颜色(与shdType一起使用)

* bold(布尔)-为true时文本变为粗体

* border(字符串)-边框类

型:'single','dashDotStroked','dashed','dashSmallGap','dotDash','dotDotDash','dott

ed','double','thick'

* color(字符串)-字体颜色代码,例如:“ ffffff”(白色)或“ 000000”(黑色)

* italic(布尔值)-设置为斜体时为true

* underline(布尔值)-为true表示要添加下划线

* font_face(字符串)-要使用的字体,例如:'Arial'

* font_face_east(字符串)-高级设置:用于东亚的字体。您还必须设置font_face

* font_face_cs(字符串)-高级设置:要使用的字体(cs)。您还必须设置font_face

* font_face_h(字符串)-高级设置:要使用的字体(hAnsi)。您还必须设置font_face

* font_hint(字符串)-可选。'ascii'(默认),'eastAsia','cs'或'hAnsi'

* font_size(数字)-以磅为单位的字体大小

* rtl(布尔值)-将其添加到rtl语言的任何文本中

* highlight (字符串) - 高亮颜色。'black', 'blue', 'cyan', 'darkBlue', 'darkCyan',

'darkGray', 'darkGreen', 'darkMagenta', 'darkRed', 'darkYellow', 'green', 'lightGray',

'magenta', 'none', 'red', 'white','yellow'

* strikethrough(布尔值)-添加删除线时为true。

* superscript(布尔值)-如果可以使用较小的尺寸,则为true可以将此次运行中的文本降低到基

线以下,并将其更改为较小的尺寸。

* subscript(布尔值)-为true时,如果可以使用较小的尺寸,则将运行中的文本升高到基线以

上,并将其更改为较小的尺寸

* link(字符串)-超连接

* hyperlink(字符串)向书签的超链接

await windowsBot.wordAddImage(paragraphObject, imagePath, area = {});

//将图像添加到段落

//参数一 对象,段落对象

//参数二 字符串, 图片路径

//参数三 对象, 可选参数, 图片宽高 {cx: 300, cy: 200}

await windowsBot.wordBreak(paragraphObject);

//段落换行

//参数一 对象,段落对象

await windowsBot.wordAddHorizontalLine(paragraphObject);

//添加一条水平线,看上去与换行相似?

//参数一 对象,段落对象

await windowsBot.wordStartBookmark(paragraphObject, markName);

//添加书签

//参数一 对象,段落对象

//参数二 字符串,标签名

await windowsBot.wordEndBookmark(paragraphObject);

//书签结束位置

//参数一 对象,段落对象

await windowsBot.wordSave(docxObject, filePath);

//保存word文件

//参数一 对象,word对象

//参数二 字符串,保存的路径

await windowsBot.wordReadText(filePath);

//读取word内容

//参数一 字符串,保存的路径

//成功返回读取到的内容,失败返回null

17.Excel文档

await windowsBot.OpenExcel(excelPath);

//打开excel文档

//参数一 字符串,excle路径

//成功返回excel对象,失败返回null

await windowsBot.OpenExcelSheet(excelObject, sheetName);

//打开excel表格

//参数一 对象,excel对象

//参数二 字符串,表名

//成功返回sheet对象,失败返回null

await windowsBot.SaveExcel(excelObject);

//保存excel文档

//参数一 对象,excel对象

//成功返回true,失败返回false

await windowsBot.WriteExcelNum(sheetObject, row, col, value);

//写入数字到excel表格

//参数一 对象,sheet对象

//参数二 整型,行

//参数三 整型,列

//参数四 数字型,写入的值

//成功返回true,失败返回false

await windowsBot.WriteExcelStr(sheetObject, row, col, strValue);

//写入字串到excel表格

//参数一 对象,sheet对象

//参数二 整型,行

//参数三 整型,列

//参数四 字符串,写入的值

//成功返回true,失败返回false

await windowsBot.ReadExcelNum(sheetObject, row, col);

//读取excel表格数字

//参数一 对象,sheet对象

//参数二 整型,行

//参数三 整型,列

//返回读取到的数字

await windowsBot.ReadExcelStr(sheetObject, row, col);

//读取excel表格字串

//参数一 对象,sheet对象

//参数二 整型,行

//参数三 整型,列

//返回读取到的字符

18.邮件收发

await windowsBot.SendMail(smtpServer, smtpPort, authCode, sendMailer, sendName, recvMailer,

subject, text, html = null, attachments = null);

//发送邮件

//参数一 字符串,SMTP服务地址

//参数二 整型,SMTP服务端号

//参数三 字符串,第三方邮箱平台授权码

//参数四 字符串,发送人邮箱

//参数五 字符串,发送人名称

//参数六 字符串,接收人邮箱,多人逗号分开

//参数七 字符串,邮箱主题

//参数八 字符串,发送的正文 文本格式

//参数九 字符串,发送的正文 html格式,可选参数,默认为null

//参数十 字符串, 发送的附件,可选参数,默认为null 示例:

let attachments = [

{ // utf-8字符串作为附件

filename: 'text1.txt',

content: 'hello world!'

},

{ //磁盘上的文件作为附件

filename: 'text3.txt',

path: '/path/to/file.txt'

},

{ //文件名和内容类型是从路径生成

path: '/path/to/file.txt'

},

{ //使用URL作为附件

filename: 'WindowsDoc.pdf',

path: 'http://www.ai-bot.net/WindowsDoc.pdf'

}

]

//成功返回"邮件发送成功!",失败返回错误信息

await windowsBot.GetMail(imapServer, imapPort, authCode, mailAccount,criteria);

//获取邮件

//参数一 字符串,IMAP服务地址

//参数二 整型,IMAP服务端号

//参数三 字符串,第三方邮箱平台授权码

//参数四 字符串,邮箱账号

//参数五 字符串,获取哪类邮件,所有邮件'ALL' 未读邮件'UNSEEN' 已读邮件'SEEN' 第1-3封'1:3'

//成功返回邮件信息对象,失败返回错误信息

2)Android开发文档

1.创建/删除AndroidBot

(1)主函数示例

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

async function mian()

{

let devicesId = "da32u4";

let serverPort = 4723;

let package = "com.example";

let activity = "activityName";

let version = "10";

//初始化AndroidBot

var driver = await androidBot.InitAndroidBot(devicesId, serverPort, package, activity, version);

}

mian();

//AndroidBot主函数调用InitAndroidBot初始化。返回值driver调用其他函数,必须使用await关键字

//devicesId 字符串,设备ID,Ai-Bot工具 安卓——设备列表 选项获取

//serverPort 整型,服务端口,多进程端口必须间隔1,比如 4723、4725、4727

//package 字符串,应用程序包名,Ai-Bot工具 安卓——查看包名 选项获取

//activity 字符串,应用程序活动窗口名,Ai-Bot工具 安卓——查看包名 选项获取

//version 字符串,安卓系统版本号

//成功返回AndroidBot对象

(2)获取/设置参数

await driver.capabilities;

//获取启动参数

await driver.getSettings();

//获取设定值

await driver.updateSettings({ignoreUnimportantViews: true});

//更改设定值,例如ignoreUnimportantViews: true 忽略其他不相关元素

(3)删除会话

await driver.deleteSession();

//删除driver对象

2.超时设置

await driver.setTimeouts(5000);

//设置超时 5秒

await driver.setImplicitTimeout(5000);

//设置隐式等待超时,脚本在搜索元素时等待的时间,默认隐式等待为0ms

await driver.setAsyncTimeout(5000);

//设置允许由 executeAsync 执行的异步脚本的等待超时(以毫秒为单位)

3.屏幕操作

await driver.getOrientation();

//获取当前设备横竖屏状态。

//返回值 字符串 LANDSCAPE(横屏) PORTRAIT(竖屏)

await driver.setOrientation("LANDSCAPE");

//设置横竖屏,LANDSCAPE(横屏) PORTRAIT(竖屏)

await driver.startRecordingScreen();

//开始录制屏幕

await driver.stopRecordingScreen();

//停止录制屏幕;

//返回值:Base64 编码的字符串

await driver.lock();

//锁定设备

await driver.unlock();

//解锁设备

await driver.isLocked();

//判断设备是否被锁定,如果设备已锁定,返回True,否则为false

await driver.rotateDevice(100, 100);

//三维旋转设备

await driver.shake();

//摇动设备

4.获取系统状态

await driver.getPerformanceDataTypes();

//返回允许读取的系统状态的信息类型,例如cpu,内存,网络流量和电池

await driver.getPerformanceData('my.app.package', 'cpuinfo', 5);

//参数1,应用程序的软件包名称

//参数2,要读取的系统状态的类型。性能数据类型(cpuinfo|batteryinfo|networkinfo|memoryinfo)

//参数3,尝试读取的次数(可选)

//返回 字符串数组类型,读取的系统状态信息,例如cpu,内存,网络流量和电池

5.电源设置

await driver.powerAC('on');

//将电池充电器的状态设置为已连接('on')或未连接('off')(仅模拟器)延迟1秒-2秒

await driver.powerCapacity(50);

//设置电池百分比(仅模拟器)

6.网络操作

await driver.toggleAirplaneMode();

//切换飞行模式(部分设备不可用)

await driver.toggleData();

//切换数据服务状态(部分设备不可用)

await driver.toggleWiFi();

//切换WiFi服务的状态

await driver.toggleLocationServices();

//切换位置服务的状态

await driver.sendSms('123456789', 'rpa');

//发送短信(仅模拟器)

await driver.gsmCall('123456789', 'call');

//拨打GSM 电话(仅模拟器)

await driver.gsmSignal(3);

//设置GSM 信号强大,信号强度在[0,4]范围内

await driver.gsmVoice('home');

//设置GSM 语音状态(仅模拟器)

//参数1 GSM 语音状态'unregistered'(未注册), 'home'(家庭), 'roaming'(漫游),

'searching'(搜索), 'denied'(被拒绝), 'off'(关闭),'on'(打开).

await driver.toggleNetworkSpeed('lte');

//设置网络速度(仅模拟器)

//参数1 网络类型'full','gsm','edge','hscsd','gprs','umts','hsdpa','lte','evdo'

7.键盘操作

await driver.pressKeyCode(10);

//按Android 设备上的特定键

//参数一,特定按键码值,4 为返回键。其他键值,自行百度搜索

await driver.longPressKeyCode(10);

//长按Android 设备上的特定键

await driver.hideKeyboard();

//隐藏软键盘

await driver.isKeyboardShown();

//判断是否显示软键盘,如果显示键盘,返回True

8.栏目相关

await driver.openNotifications();

//打开通知栏

await driver.getSystemBars();

//返回状态栏和导航栏的可见性信息

await driver.getDeviceTime();

//获取系统时间,返回系统时间(字符串)

await driver.getDisplayDensity();

//返回整型,设备pid(像素密度)

await driver.fingerPrint(1);

//指纹识别(仅模拟器)

//存储在Android Keystore 系统中的指纹(从1 到10)

9.触屏/鼠标操作

(1)鼠标操作(部分设备不可用)

moveTo(10, 10);

//将鼠标移动指定元素的偏移位置

click();

//在当前鼠标坐标处单击任意鼠标

doubleClick();

//双击元素

buttonDown();

//当前鼠标坐标处单击并按住鼠标左键

buttonUp();

//释放先前按住的鼠标按钮

(2).触屏操作

await driver.touchAction({

action: 'tap',

x: 30,

y: 20

});

//触摸xy指定坐标点

await driver.touchDoubleClick(element.elementId);

//在指定元素上触摸双击

//参数,元素id

await driver.touchPerform([

{ action: 'press', options: { x: 100, y: 250 }},

{ action: 'wait',options: {ms: 100}},

{ action: 'moveTo', options: { x: 300, y: 100 }},

{ action: 'release' }

]);

//触摸动作。action行为,options 行为参数

//行为:tap 点击 press 短按 longPress 长按 wait 等待 moveTo滑动 release 释放

//此函数涵盖鼠标和触屏操作,建议使用。 到10)

10.地理位置

await driver.getGeoLocation();

//获取地理位置,返回值整型 纬度 经度 高度

await driver.setGeoLocation({latitude: "121.21", longitude: "11.56", altitude: "94.23"});

//设置地理位置,latitude纬度 longitude经度 altitude高度

11.系统剪切板

await driver.getClipboard();

//获取系统剪贴板的内容 返回值,base64编码的字符串,如果剪贴板为空,则为空 字符串

var data = new Buffer.from("Ai-Bot").toString('base64');

await driver.setClipboard(data, 'plaintext');

//设置系统剪贴板的内容,仅设置plaintext纯文本

//参数1 字符串 base64编码

12.App操作

await driver.startActivity("com.example", "ActivityName");

//通过app包名称和活动名称来启动app 一般用于多个app控制

await driver.getCurrentActivity();

//返回当前app活动窗口的名称

await driver.getCurrentPackage();

//返回当前app包的名称

await driver.installApp("D: \\test.apk");

//安装app

await driver.removeApp("com.example.AppName");

//通过包名 卸载应用

await driver.isAppInstalled('com.example.AppName');

//检查设备上是否安装了指定的应用程序,如果已安装,返回true;否则,返回 false

await driver.launchApp();

//如果被测应用关闭或在后台运行 ,它将启动被测应用

await driver.background(10);

//将此会话当前运行的应用程序发送到后台,参数时间单位为秒

await driver.closeApp();

//关闭应用

await driver.reset();

//重置此会话的正在运行的应用

await driver.activateApp("com.example.AppName");

//通过包名 激活应用

await driver.terminateApp('com.example.AppName');

//终止设备上指定的应用

await driver.queryAppState('com.example.AppName');

//获取设备上应用状态。

//返回值,0未安装。1没有运行。2在后台运行或已暂停。 3在后台运行。4正在前台运行。

await driver.getStrings("en");

//获取应用程序所有的字符串。

await driver.getContext();

//获取当前app是在NATIVE还是WEBVIEW环境

//返回当前环境的名称

await driver.getContexts();

//获取app环境集合

//返回所有环境的名称(Array<String>

await driver.switchContext(contexts[1]);

//切换NATIVE或者WEBVIEW环境

//参数为 要更改环境的名称

await driver.getPageSource();

//获取当前的App层次结构XML(应用程序)或页面源码(Web)

//此方法获取App层次结构,便于元素定位

13.元素操作

(1)元素定位

await driver.$("~content-desc");

//元素定位支持content-desc、className、UiSelector、XPath等方式

//content-desc,UI元素的唯一标识符,该方式需在属性前加 "~" 波浪号

//className,类名定位,className属性值重复较多

//UiSelector,使用UI Automator API定位,可设定多个条件定位,建议使用

//XPath定位,效率较低,但它是通用的定位方式

//查找元素失败元素属性elementId值为undefined,可用作是否查找成功

示例代码:

//content-desc

await driver.$("~content-desc");

//className

await driver.$("className");

//UiSelector1

var selector ='new UiSelector().resourceId("resourceId")';

await driver.$(`android=${selector}`);

//UiSelector2

var selector ='new UiSelector().text("text").className("className").resourceId("resourceId")';

await driver.$(`android=${selector}`);

//XPath

await driver.$("//android.widget.TextView[@text='Ai-Bot']");

(2)元素数组

await driver.$$("className");

//查找相同元素属性值数组,查找方式同上

(3)元素方法

click();

//点击元素中心点

addValue("Ai-Bot");

//发送字符串到元素

setValue("Ai-Bot");

//设置元素值

clearValue();

//清除元素值

await driver.elementSubmit(formElement.elementId);

//提交表单元素

//参数一,元素id

(4)元素属性

getText();

//返回元素的可见文本

getTagName();

//获取标签名称

getAttribute("content-desc");

//获取元素指定属性的值,如果未设置返回 null

isSelected();

//判断元素是否被选择,返回值,boolean类型

isEnabled();

//判断当前元素是否可用,返回值,boolean类型

isDisplayed();

//判断当前元素是否可见,返回值,boolean类型

getLocation();

//获取元素在页面或屏幕上的顶点坐标,返回x、y,整型

getSize();

//获取元素宽和高,返回width、heigh

await driver.getElementRect(element.elementId);

//获取元素位置,返回x、y、width、height,矩形位置和大小

//参数1,元素id

getCSSProperty("style");

//获取元素指定的CSS属性值

await driver.getElementLocationInView(element.elementId);

//获取元素在页面或屏幕上的顶点坐标,返回x、y坐标,整型

await driver.getActiveElement();

//获取当前会话的活动元素

isEqual(element);

//判断指定元素与参数一是否引用同一个元素,返回值,boolean类型

//参数一,元素object

14.文件操作

var data = new Buffer.from("Hello World").toString('base64');

await driver.pushFile('/data/local/tmp/file.txt', data);

//上文件到设备

//参数一,文件路径

//参数二,base64格式的字符串

await driver.pullFile('/data/local/tmp/file.txt');

//获取设备上文件内容,返回值base64格式的字符串

await driver.pullFolder('/data/local/tmp/');

//获取设备指定文件夹,返回 Base64编码的字符串,文件格式为zip

15.执行adb

await driver.executeAsync('mobile: shell', {'command':'screencap -p /sdcard/app.png'});

//异步执行命令

await driver.execute('mobile: shell', {'command':'screencap -p /sdcard/app.png'});

//执行adb命令示例

16.批量执行

const script = `

let destElement = await driver.$('//android.widget.TextView[@text='移动网络']');

await destElement.click();`;

await driver.driverScript(script);

//执行多条命令

//此指令能提高脚本效率

17.web/窗口操作

await driver.switchToWindow("handle");

//将焦点切换另一个窗口

await driver.closeWindow();

//关闭当前窗口

await driver.getWindowHandle();

//获取当前窗口句柄

await driver.getWindowHandles();

//获取所有窗口句柄列表

await driver.getTitle();

//获取当前页面标题

await driver.getWindowRect();

//获取窗口的位置

await driver.setWindowRect(0, 0, 800, 600);

//设置窗口位置

await driver.getWindowSize();

//获取窗口大小

await driver.setWindowSize(10, 10);

//设置窗口大小

await driver.maximizeWindow();

//最大化窗口

await driver.url("http://www.ai-bot.net");

//打开新的URL

await driver.getUrl();

//获取当前页面url

await driver.back();

//返回

await driver.forward();

//前一页

await driver.refresh();

//刷新

await driver.getCookies();

//获取cookie

await driver.setCookies([{

name: 'myCookie',

value: 'some content'

}]);

//设置Cookie

await driver.deleteCookies("cookie_name");

//删除指定名称的cookie

await driver.deleteCookies();

//删除当前页面所有的cookie

await driver.switchToFrame(3);

//切换指定iframe

await driver.switchToParentFrame();

//切换父iframe

ai-bot rpa官方网址:www.ai-bot.net

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容