Ai-Bot RPA自动化框架

2023-11-05

Ai-Bot是Android+Windows平台上的node.js自动化框架。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ai-Bot RPA自动化框架 的相关文章

  • 在 Django 中使用 prefetch_lated 连接 ManyToMany 字段

    我可能遗漏了一些明显的东西 但我在连接 ManyToMany 字段以在 Django 应用程序中工作时遇到问题 我有两个模型 class Area models Model name CharField class Role models
  • 使用 glGetFloatv 检索 pyglet 中的模型视图矩阵

    我正在使用 pyglet 在 python 中进行 3D 可视化 并且需要检索模型视图和投影矩阵来进行一些选择 我使用以下方式定义我的窗口 from pyglet gl import from pyglet window import wi
  • 在 Python 中同时插入行

    我正在尝试对我的代码进行矢量化 但遇到了障碍 我有 nxd x 值数组 x1 xn 其中每一行 x1 有很多点 x11 x1d nxd y 值数组 y1 y2 y3 其中每一行 y1 有很多点 y11 y1d x 值的 nx1 数组 x 1
  • 如何在 Python 2.4 CSV 阅读器中禁用引用?

    我正在编写一个 Python 实用程序 需要解析一个我无法控制的大型且定期更新的 CSV 文件 该实用程序必须在仅提供 Python 2 4 的服务器上运行 CSV 文件根本不引用字段值 但Python 2 4版本的csv库 http ww
  • Python实时读取串口数据

    我正在使用 Python 中的脚本通过串行端口以 2Mbps 的速度从 PIC 微控制器收集数据 PIC 在 2Mbps 下完美定时工作 FTDI USB 串行端口在 2Mbps 下工作也很好 均通过示波器验证 我每秒发送消息 大小约为 1
  • Python,将字典存储在数据库中

    在数据库中存储和检索 python 字典的最佳方法是什么 如果您对使用传统 SQL 数据库 例如 MySQL 不是特别感兴趣 您可以研究非结构化文档数据库 其中文档自然映射到 python 字典 例如MongoDB http www mon
  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉
  • 按字符串子字符串的列过滤 Pandas 数据框

    我正在尝试使用列中的字符串值是数据框外部字符串的子字符串的条件来过滤数据框 下面的例子 df a b c hello bye hello reference str hello there output a c 一种方法可能是使用正则表达式
  • 如何使用appium自动化Android手机后退按钮

    我正在使用 Appium python 客户端库 对 Android 上的混合移动应用程序进行测试自动化 我无法找到任何方法来自动化或创建手势以使用 电话后退 按钮返回到应用程序的上一页 有没有可以使用的驱动函数 我尝试了 self dri
  • Pygooglevoice登录错误

    另一个人问了这个问题 但没有回复 所以我再问一遍 我正在尝试使用 pygooglevoice API 但是当我运行 SMS py 示例脚本时 它给了我一个登录错误 我已经安装了 Enthought python 我想也许我还需要安装其他东西
  • 有没有办法使用 SauceLabs 的 RemoteWebDriver 禁用 CORS 检查

    问题说明了一切 我正在尝试在 SauceLabs 上执行一些硒测试 该测试加载一个发出跨域请求的网页 我在想是否有一种方法可以通过代码以独立于平台的方式禁用 CORS 使用时Chrome驱动程序 Chrome组合禁用cors questio
  • 自适应支付 API 错误 580001

    我正在 python 中向 paypal 自适应支付 API 发出 PAY 请求 并收到通用错误 id 580001 没有其他信息 headers API credentials for the API caller business ac
  • 模拟类:Mock() 还是 patch()?

    我在用mock http www voidspace org uk python mock index html使用Python 想知道这两种方法中哪一种更好 阅读 更Pythonic 方法一 只需创建一个模拟对象并使用它 代码如下 def
  • 如何打印和显示子进程 stdout 和 stderr 输出而不失真?

    也许有人可以帮助我解决这个问题 我在 SO 上看到了许多与此类似的问题 但没有一个问题同时处理标准输出和标准错误 也没有处理像我这样的情况 因此出现了这个新问题 我有一个 python 函数 它打开一个子进程 等待它完成 然后输出返回代码以
  • 如何向 RetrievalQA.from_chain_type 添加内存?或者,如何向 ConversationalRetrievalChain 添加自定义提示?

    如何向 RetrievalQA from chain type 添加内存 或者 如何向 ConversationalRetrievalChain 添加自定义提示 在过去的两周里 我一直在尝试制作一个可以通过文档聊天的聊天机器人 因此不仅仅是
  • 保存游戏最高分?

    我使用 pygame 在 python 中制作了一个非常简单的游戏 分数取决于玩家达到的级别 我将级别作为变量称为score 我想在游戏开始或结束时显示顶级 我会更乐意显示多个分数 但我见过的所有其他线程都太复杂 我无法理解 所以请保持简单
  • xpath+ 正则表达式:匹配文本

    我正在尝试编写一个 xpath 以便仅返回包含文本和数字的节点 我想使用正则表达式并希望这能起作用 td matches text d 谁能帮我理解我在这里做错了什么 tr td 1 td td 10 td td a td tr 你缺少量化
  • 对 Python 列表元素进行分组

    我有一个 python 列表 如下所示 my list 25 1 0 65 25 3 0 63 25 2 0 62 50 3 0 65 50 2 0 63 50 1 0 62 我想根据以下规则对它们进行排序 1 gt 0 65 0 62 l
  • 在 Python 中伪造一个对象是否是类的实例

    假设我有一堂课FakePerson它模仿基类的所有属性和功能RealPerson 不扩展它 在Python 3中 是否可以伪造isinstance 为了认识到FakePerson as a RealPerson只通过修改对象FakePers
  • Python Pandas:向类 pandas.core.series.Series 添加方法

    我想在 Python 中处理时间序列 因此 Pandas 的 Series 类非常完美 并且有很多有用的方法 现在我想添加一些我需要但未实现的方法 例如 假设我有兴趣添加一个方法 该方法将两次一值附加到时间序列中 让我们调用该方法appen

随机推荐

  • 蓝云EasyTrack——专业的企业级项目管理工具

    项目管理工作越来越离不开项目管理工具 如果是个人或单个小型团队使用 用来管理任务 可以选择在线的协同工具或轻量项目管理工具 如果是多团队 跨部门项目管理 或者用于企业级的项目管理 那就需要专业的企业级项目管理工具 术业有专攻 在IT 产品研
  • 异常java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Sheet.getDrawingPat原因与解决

    在做excel导出时遇到的异常 java lang NoSuchMethodError org apache poi ss usermodel Sheet getDrawingPat 原因是 jar包不兼容 这是依赖
  • 2023华为od机试C++ 目录与考试说明(B卷+A卷)

    本专栏使用C 语言解题 常见问题 1 进入机考网页之后如果链接上写着 B卷 就表示是B卷题库 对应着目录中的时间这一列 2023Q2 在2023年5月10日之后 大多数同学收到的应该是B卷题库 2 2022年的题库已经废弃 如果时间紧迫 建
  • 程序员自曝接私活:10个月时间接了30多个单子,纯收入40万

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 随着互联网的发展 对于程序员的需求也日益增多 一些程序员在按部就班的同时 也会在外接一些私活增加收入 无独有偶 有一名程序员无意间发现了商机 开始了全职接私活 在10个月时
  • oVirt:数据中心的开源虚拟化

    oVirt 数据中心的开源虚拟化 通过标记 发布 2019年1月30日 更新 2019年2月27日 oVirt是基于Linux Libvirt和KVM的完整的开源虚拟化解决方案 它旨在成为VMware vSphere的替代产品 让我们看看它
  • PyTorch深度学习实践概论笔记8练习-kaggle的Titanic数据集预测(一)数据分析

    刘老师在第8讲PyTorch深度学习实践概论笔记8 加载数据集中留下一个练习 对kaggle上的Titanic数据集 使用DataLoader类进行分类 训练目标是预测某位乘客是否活下来 Survived 本篇文章先读取数据和做一些简单的数
  • QT编译安装QtMqtt子模块,WIN平台

    QT安装QtMqtt子模块 下载源代码编译 添加库文件到QT安装目录 测试工程 最终效果 2021 10 15 补充 将配置文件添加到安装目录 完整文件下载 系统 Windows10 环境 QT5 12 9 下载源代码编译 GitHub上下
  • 【Qt Quick】Android环境配置及第一个Hello World

    Android环境配置及第一个Hello World 安装Java jdk 安装Android studio 安装手机模拟器 配置Qt 第一个Hello World 常见错误 安装Java jdk 1 下载 链接 link Java1 8
  • Java数据库开发之Hibernate框架(4)Hibernate的查询

    占位 下周补充
  • kettle定时调度

    简单版 https blog csdn net hzp666 article details 107841754 详细版 1 场景介绍 根据不同的操作系统定时调度kettle资源库中的job 1 1Windows系统的定时调度 我的是 ve
  • 网络IO模型

    网络IO的本质是对socket的读取 在网络IO的过程中 有两个重要角色 分别是系统内核和用户进程 首先要等系统内核准备好数据 然后将数据从系统内核拷贝至用户进程空间 这样才算完成了一次IO 如果在系统内核没有准备好数据时 用户IO线程在此
  • Gimpel Software推出C和C ++的首选静态分析工具 PC-lint Plus,不再维护PC-lint/FlexeLint。

    Gimpel Software已不再维护PC lint FlexeLint版本9 最终更新是2014年发布的版本9 00L Gimpel Software在2018年底之前为PC lint FlexeLint提供技术支持 Gimpel So
  • Qt头文件中的QT_BEGIN_NAMESPACE

    在源代码中是这样定义的 1 define QT BEGIN NAMESPACE namespace QT NAMESPACE 2 define QT END NAMESPACE 也就是说 如果你定义以下内容 1 QT BEGIN NAMES
  • 数据结构-链式队列

    link queue node h ifndef LINK QUEUE NODE H define LINK QUEUE NODE H include
  • 串口通信协议概述——针对面试

    串口通信 串口通信 Serial Communications 的概念非常简单 串口按位 bit 发送和接收字节的通信方式 重要参数 1 数据位 2 停止位 3 奇偶校验位 4 波特率 其中 数据位 停止位 奇偶校验位又是数据格式 数据格式
  • PyWebIo

    Part1什么是 PyWebIo PyWebIO 提供了一系列命令式的交互函数来在浏览器上获取用户输入和进行输出 将浏览器变成了一个 富文本终端 可以用于构建简单的 Web 应用或基于浏览器的 GUI 应用 使用 PyWebIO 开发者能像
  • 数据库项目代码生成工具V1.18.08.18.0(RIO)

    下载 1 第一步 2 第二步 3 第三步 结果
  • ios10.3之CoreData的详细教程

    首先如果要使用CoreData可以选择在初创项目时选择添加coredata 也可以选择自己添加coredata文件 系统添加coredata后会在Appdelegate类中自动添加一个persistentContainer属性 和一个sav
  • 苹果系统与win10连接到服务器,苹果手机怎么连接win10电脑详细步骤

    使用苹果手机的朋友们你们知道苹果手机如何连接win10电脑吗 不知道的就往下看看怎么操作吧 说不定以后你可能就会用到这个方法 1 用苹果手机正品数据线连接到电脑上的 USB 端口 电脑系统会自动识别出苹果手机的内部存储器 内部存储器包括包括
  • Ai-Bot RPA自动化框架

    Ai Bot是Android Windows平台上的node js自动化框架 1 跟python的区别 跟uipaht uibot 其他框架的区别 1 VS python 相同点 Ai Bot基于node js语言的一款自动化框架 和pyt