Aibote(python)使用须知
Aibote是江西爱伯特科技自主研发的一款纯代码RPA办公自动化框架,支持Android、Browser和Windows 三大平台。框架免费、API和接口协议开源,个人、企业商用零费用 以socket tcp接口协议通信方式命令驱动,支持任何一门计算机语言调用。OEM或特殊接口定制等商业合作联系QQ:1600381943 Aibote python是由 AiBot.py模块作者:河畔(810975099)制作而成,提供给python开发者调用 python版本是基于aibote底层api开源协议制作而成,封装格式以node.js为向导,涵盖aibote自动化平台所有功能。
拾取元素工具使用方法
Android 工具位置,Aibote/Aibote.exe->菜单项->脚本工具 Windows 工具位置,Aibote/WindowsTool.exe Android 元素拾取工具,需要在手机端,勾选连接工具端选项 Windows 元素拾取工具,按下CTRL键,暂停拾取。支持鼠标左键/中键拾取 使用方法: 1、点击"+"按钮 单击手机投屏/windows 窗口,拾取元素和颜色信息。单击目标点会在右和下扩增20个像素点,用作放大目标位置。 再点击预览图片控件可拾取放大后 点的颜色值和坐标 2、点击"+"按钮 在手机投屏/windows 窗口滑动矩形大小,拾取元素和图片信息。截图前输入图片名称。Android端,图片保存在手机/storage/emulated/0/Android/data/com.aibot.client/files/ (根目录:/storage/emulated/0/)。Windows端,图片保存在指定路径目录,如果图片名称不包含路径,则默认保存在Aibote/Picture/windows 3、二值化阈值和最大值在0-255之间,阈值和最大值都为255时灰度化处理 4、BINARY算法,当前点值大于阈值thresh时,取最大值maxva,否则设置为0 5、BINARY_INV算法,当前点值大于阈值thresh时,设置为0,否则设置为最大值maxva 6、TOZERO算法,当前点值大于阈值thresh时,不改变,否则设置为0 7、TOZERO_INV算法,当前点值大于阈值thresh时,设置为0,否则不改变 8、TRUNC算法,当前点值大于阈值thresh时,设置为阈值thresh,否则不改变 9、ADAPTIVE_THRESH_MEAN_C算法,自适应阈值 10、ADAPTIVE_THRESH_GAUSSIAN_C算法,自适应阈值
Aibote.py 使用方法说明
下载安装 Aibote.py
pip install AiBot.py
使用 AndroidBot 编写脚本
# 1. 导入 AndroidBotMain 类 from AiBot import AndroidBotMain # 2. 自定义一个脚本类,继承 AndroidBotMain class CustomAndroidScript(AndroidBotMain): # 3. 设置等待参数 # 3.1 设置等待时间 wait_timeout = 3 # 3.2 设置重试间隔时长 interval_timeout = 0.5 # 4. 设置日志等级 log_level = "INFO" # "DEBUG" # 5. 设置方法超时是否抛出异常 raise_err = False # True # 6. 重写方法,编写脚本 # 注意:此方法是脚本执行入口 def script_main(self): # 6.1 API 演示 # 注意:Python 版本支持的 Api 与 Nodejs 基本相同 # 教程中仅演示部分 Api,更多 Api 请自行探索,所有 Api 均包含详细的参数要求和返回值,请自行查看。 # 截图 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) # 7. 执行脚本,Pycharm 中,直接右键执行 if __name__ == '__main__': # 注意:此处监听的端口号,必须和手机端的脚本端口号一致; # 监听 3333 号端口 CustomAndroidScript.execute(3333)
教程中仅演示部分 Api,更多 Api 请自行探索,所有 Api 均包含详细的参数要求和返回值,请自行查看。
使用 WinBot 编写脚本
# 1. 导入 WinBotMain 类 from AiBot import WinBotMain # 2. 自定义一个脚本类,继承 WinBotMain class CustomWinScript(WinBotMain): # 3. 设置等待参数 # 3.1 设置等待时间 wait_timeout = 3 # 3.2 设置重试间隔时长 interval_timeout = 0.5 # 4. 设置日志等级 log_level = "INFO" # "DEBUG" # 5. 设置方法超时是否抛出异常 raise_err = False # True # 6. 重写方法,编写脚本 # 注意:此方法是脚本执行入口 def script_main(self): # 6.1 API 演示 # 注意:Python 版本支持的 Api 与 Nodejs 基本相同 # 教程中仅演示部分 Api,更多 Api 请自行探索,所有 Api 均包含详细的参数要求和返回值,请自行查看。 # 查询所有窗口句柄 result = self.find_windows() print(result) # ["1050010", "1050011", "1050012"] # 查询指定窗口句柄 result = self.find_window(window_name="Ai-Bot 2群等9个会话") print(result) # "1050010" # 7. 执行脚本,Pycharm 中,直接右键执行 if __name__ == '__main__': # 启动脚本,监听 6666 号端口 # local=True 时,是本地运行脚本,会自动启动 WindowsDriver.exe 驱动; # 在远端部署脚本时,请设置 local=False,手动启动 WindowsDriver.exe,启动 WindowsDriver.exe 时需指定远端 IP 或端口号; CustomWinScript.execute(6666, local=True)
教程中仅演示部分 Api,更多 Api 请自行探索,所有 Api 均包含详细的参数要求和返回值,请自行查看。
使用 WebBot 编写脚本
import time # 1. 导入 WebBotMain 类 from AiBot import WebBotMain # 2. 自定义一个脚本类,继承 WebBotMain class CustomWebScript(WebBotMain): # 3. 设置等待参数 # 3.1 设置等待时间 wait_timeout = 3 # 3.2 设置重试间隔时长 interval_timeout = 0.5 # 4. 设置日志等级 log_level = "INFO" # "DEBUG" # 5. 设置方法超时是否抛出异常 raise_err = False # True # 6. 重写方法,编写脚本 # 注意:此方法是脚本执行入口 def script_main(self): # 6. API 演示 # 注意:Python 版本支持的 Api 与 Nodejs 基本相同 # 教程中仅演示部分 Api,更多 Api 请自行探索,所有 Api 均包含详细的参数要求和返回值,请自行查看。 self.goto("https://www.baidu.com") time.sleep(3) self.new_page("https://www.qq.com") time.sleep(3) result = self.execute_script('(()=>"aibote rpa")()') print(result) # aibote rpa # 7. 执行脚本,Pycharm 中,直接右键执行 if __name__ == '__main__': # 启动脚本,监听 9999 号端口 # 默认使用 Chrome 浏览器 # local=True 时,是本地运行脚本,会自动启动 WebDriver.exe 驱动; # 在远端部署脚本时,请设置 local=False,手动启动 WebDriver.exe,启动 WebDriver.exe 时需指定远端 IP 或端口号; # 如本地部署脚本,需要传递 WebDriver 启动参数时,参考下面方式,如不需传递启动参数,则忽略: driver_params = { "browserName": "chrome", "debugPort": 0, "userDataDir": "./UserData", "browserPath": None, "argument": None, } CustomWebScript.execute(9999, local=True, driver_params=driver_params)
教程中仅演示部分 Api,更多 Api 请自行探索,所有 Api 均包含详细的参数要求和返回值,请自行查看。
AndroidBot开发手册
图色
def save_screenshot(image_name: str, region: _Region = None, algorithm: _Algorithm = None) -> Optional[str]: """ 保存截图,返回图片地址(手机中)或者 None :param image_name: 图片名称,保存在手机 /storage/emulated/0/Android/data/com.aibot.client/files/ 路径下; :param region: 截图区域,默认全屏,``region = (起点x、起点y、终点x、终点y)``,得到一个矩形 :param algorithm: 处理截图所用算法和参数,默认保存原图, ``algorithm = (algorithm_type, threshold, max_val)`` 按元素顺序分别代表: 0. ``algorithm_type`` 算法类型 1. ``threshold`` 阈值 2. ``max_val`` 最大值 ``threshold`` 和 ``max_val`` 同为 255 时灰度处理. ``algorithm_type`` 算法类型说明: 0. ``THRESH_BINARY`` 算法,当前点值大于阈值 `threshold` 时,取最大值 ``max_val``,否则设置为 0; 1. ``THRESH_BINARY_INV`` 算法,当前点值大于阈值 `threshold` 时,设置为 0,否则设置为最大值 max_val; 2. ``THRESH_TOZERO`` 算法,当前点值大于阈值 `threshold` 时,不改变,否则设置为 0; 3. ``THRESH_TOZERO_INV`` 算法,当前点值大于阈值 ``threshold`` 时,设置为 0,否则不改变; 4. ``THRESH_TRUNC`` 算法,当前点值大于阈值 ``threshold`` 时,设置为阈值 ``threshold``,否则不改变; 5. ``ADAPTIVE_THRESH_MEAN_C`` 算法,自适应阈值; 6. ``ADAPTIVE_THRESH_GAUSSIAN_C`` 算法,自适应阈值; :return: 图片地址(手机中)或者 None """ def save_element_screenshot(image_name, xpath) -> Optional[str]: """ 保存元素截图 :param image_name: 图片名称,保存在手机 /storage/emulated/0/Android/data/com.aibot.client/files/ 路径下 :param xpath: xpath路径 :return: 图片地址(手机中)或者 None """ def take_screenshot(region: _Region = None, algorithm: _Algorithm = None) -> Optional[bytes]: """ 保存截图,返回图像字节格式或者"null"的字节格式 :param region: 截图区域,默认全屏,``region = (起点x、起点y、终点x、终点y)``,得到一个矩形 :param algorithm: 处理截图所用算法和参数,默认保存原图, ``algorithm = (algorithm_type, threshold, max_val)`` 按元素顺序分别代表: 0. ``algorithm_type`` 算法类型 1. ``threshold`` 阈值 2. ``max_val`` 最大值 ``threshold`` 和 ``max_val`` 同为 255 时灰度处理. ``algorithm_type`` 算法类型说明: 0. ``THRESH_BINARY`` 算法,当前点值大于阈值 `threshold` 时,取最大值 ``max_val``,否则设置为 0; 1. ``THRESH_BINARY_INV`` 算法,当前点值大于阈值 `threshold` 时,设置为 0,否则设置为最大值 max_val; 2. ``THRESH_TOZERO`` 算法,当前点值大于阈值 `threshold` 时,不改变,否则设置为 0; 3. ``THRESH_TOZERO_INV`` 算法,当前点值大于阈值 ``threshold`` 时,设置为 0,否则不改变; 4. ``THRESH_TRUNC`` 算法,当前点值大于阈值 ``threshold`` 时,设置为阈值 ``threshold``,否则不改变; 5. ``ADAPTIVE_THRESH_MEAN_C`` 算法,自适应阈值; 6. ``ADAPTIVE_THRESH_GAUSSIAN_C`` 算法,自适应阈值; :return: 图像字节格式或者"null"的字节格式 """ def get_color(point: _Point_Tuple) -> Optional[str]: """ 获取指定坐标点的色值 :param point: 坐标点 :return: 色值字符串(例如: #008577)或者 None """
找图
def find_color(color: str, sub_colors: _SubColors = None, region: _Region = None, similarity: float = 0.9, wait_time: float = None, interval_time: float = None, raise_err: bool = None) -> Optional[_Point]: """ 获取指定色值的坐标点,返回坐标或者 None :param color: 颜色字符串,必须以 # 开头,例如:#008577; :param sub_colors: 辅助定位的其他颜色; :param region: 在指定区域内找色,默认全屏; :param similarity: 相似度,0-1 的浮点数,默认 0.9; :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :param raise_err: 超时是否抛出异常; :return: # 区域相关参数 region = (0, 0, 0, 0) 按元素顺序分别代表:起点x、起点y、终点x、终点y,最终得到一个矩形。 # 算法相关参数 algorithm = (0, 0, 0) # 按元素顺序分别代表:algorithm_type 算法类型、threshold 阈值、max_val 最大值。 threshold 和 max_val 同为 255 时灰度处理. 0 THRESH_BINARY 算法,当前点值大于阈值 threshold 时,取最大值 max_val,否则设置为 0; 1 THRESH_BINARY_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则设置为最大值 max_val; 2 THRESH_TOZERO 算法,当前点值大于阈值 threshold 时,不改变,否则设置为 0; 3 THRESH_TOZERO_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则不改变; 4 THRESH_TRUNC 算法,当前点值大于阈值 threshold 时,设置为阈值 threshold,否则不改变; 5 ADAPTIVE_THRESH_MEAN_C 算法,自适应阈值; 6 ADAPTIVE_THRESH_GAUSSIAN_C 算法,自适应阈值; """ def find_image(image_name, region: _Region = None, algorithm: _Algorithm = None, similarity: float = 0.9, wait_time: float = None, interval_time: float = None, raise_err: bool = None) -> Optional[_Point]: """ 寻找图片坐标,在当前屏幕中寻找给定图片中心点的坐标,返回坐标或者 None :param image_name: 图片名称(手机中); :param region: 从指定区域中找图,默认全屏; :param algorithm: 处理屏幕截图所用的算法,默认原图,注意:给定图片处理时所用的算法,应该和此方法的算法一致; :param similarity: 相似度,0-1 的浮点数,默认 0.9; :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :param raise_err: 超时是否抛出异常; :return: # 区域相关参数 region = (0, 0, 0, 0) 按元素顺序分别代表:起点x、起点y、终点x、终点y,最终得到一个矩形。 # 算法相关参数 algorithm = (0, 0, 0) # 按元素顺序分别代表:algorithm_type 算法类型、threshold 阈值、max_val 最大值。 threshold 和 max_val 同为 255 时灰度处理. 0 THRESH_BINARY 算法,当前点值大于阈值 threshold 时,取最大值 max_val,否则设置为 0; 1 THRESH_BINARY_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则设置为最大值 max_val; 2 THRESH_TOZERO 算法,当前点值大于阈值 threshold 时,不改变,否则设置为 0; 3 THRESH_TOZERO_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则不改变; 4 THRESH_TRUNC 算法,当前点值大于阈值 threshold 时,设置为阈值 threshold,否则不改变; 5 ADAPTIVE_THRESH_MEAN_C 算法,自适应阈值; 6 ADAPTIVE_THRESH_GAUSSIAN_C 算法,自适应阈值; """ def find_images(image_name,region: _Region = None,algorithm: _Algorithm = None,similarity: float = 0.9,multi: int = 1,wait_time: float = None,interval_time: float = None,raise_err: bool = None) -> List[Point]: """ 寻找图片坐标,在当前屏幕中寻找给定图片中心点的坐标,返回坐标列表 :param image_name: 图片名称(手机中); :param region: 截图区域,默认全屏,``region = (起点x、起点y、终点x、终点y)``,得到一个矩形 :param algorithm: 处理屏幕截图所用的算法,默认原图,注意:给定图片处理时所用的算法,应该和此方法的算法一致; ``algorithm = (algorithm_type, threshold, max_val)`` 按元素顺序分别代表: 0. ``algorithm_type`` 算法类型 1. ``threshold`` 阈值 2. ``max_val`` 最大值 ``threshold`` 和 ``max_val`` 同为 255 时灰度处理. ``algorithm_type`` 算法类型说明: 0. ``THRESH_BINARY`` 算法,当前点值大于阈值 `threshold` 时,取最大值 ``max_val``,否则设置为 0; 1. ``THRESH_BINARY_INV`` 算法,当前点值大于阈值 `threshold` 时,设置为 0,否则设置为最大值 max_val; 2. ``THRESH_TOZERO`` 算法,当前点值大于阈值 `threshold` 时,不改变,否则设置为 0; 3. ``THRESH_TOZERO_INV`` 算法,当前点值大于阈值 ``threshold`` 时,设置为 0,否则不改变; 4. ``THRESH_TRUNC`` 算法,当前点值大于阈值 ``threshold`` 时,设置为阈值 ``threshold``,否则不改变; 5. ``ADAPTIVE_THRESH_MEAN_C`` 算法,自适应阈值; 6. ``ADAPTIVE_THRESH_GAUSSIAN_C`` 算法,自适应阈值; :param similarity: 相似度,0-1 的浮点数,默认 0.9; :param multi: 目标数量,默认为 1,找到 1 个目标后立即结束; :param wait_time: 等待时间,默认取 self.wait_timeout :param interval_time: 轮询间隔时间,默认取 self.interval_timeout :param raise_err: 超时是否抛出异常; :return: """ def find_dynamic_image(interval_ti: int, region: _Region = None, wait_time: float = None, interval_time: float = None, raise_err: bool = None) -> List[_Point]: """ 找动态图,对比同一张图在不同时刻是否发生变化,返回坐标列表 :param interval_ti: 前后时刻的间隔时间,单位毫秒; :param region: 截图区域,默认全屏,``region = (起点x、起点y、终点x、终点y)``,得到一个矩形 :param wait_time: 等待时间,默认取 self.wait_timeout :param interval_time: 轮询间隔时间,默认取 self.interval_timeout :param raise_err: 超时是否抛出异常; :return: 坐标列表
坐标操作
def click(point: _Point_Tuple, offset_x: float = 0, offset_y: float = 0) -> bool: """ 点击坐标 :param point: 坐标; :param offset_x: 坐标 x 轴偏移量; :param offset_y: 坐标 y 轴偏移量; :return: """ def double_click(point: _Point_Tuple, offset_x: float = 0, offset_y: float = 0) -> bool: """ 双击坐标 :param point: 坐标; :param offset_x: 坐标 x 轴偏移量; :param offset_y: 坐标 y 轴偏移量; :return: """ def long_click(point: _Point_Tuple, duration: float, offset_x: float = 0, offset_y: float = 0) -> bool: """ 长按坐标 :param point: 坐标; :param duration: 按住时长,单位秒; :param offset_x: 坐标 x 轴偏移量; :param offset_y: 坐标 y 轴偏移量; :return: """ def swipe(start_point: _Point_Tuple, end_point: _Point_Tuple, duration: float) -> bool: """ 滑动坐标 :param start_point: 起始坐标; :param end_point: 结束坐标; :param duration: 滑动时长,单位秒; :return: """ def gesture(gesture_path: List[_Point_Tuple], duration: float) -> bool: """ 执行手势 :param gesture_path: 手势路径,由一系列坐标点组成 :param duration: 手势执行时长, 单位秒 :return: """ def press(point: _Point_Tuple, duration: float) -> bool: """ 手指按下 :param point: 坐标 :param duration: 持续时间,单位秒 :return: """ def move(point: _Point_Tuple, duration: float) -> bool: """ 手指移动 :param point: 坐标 :param duration: 持续时间 :return: """ def release() -> bool: """手指抬起 """ def press_release(point: _Point_Tuple, duration: float) -> bool: """ 按下屏幕坐标点并释放 :param point: 按压坐标 :param duration: 按压时长,单位秒 :return: """ def press_release_by_ele(xpath, duration: float, wait_time: float = None, interval_time: float = None, ) -> bool: """ 按压元素并释放 :param xpath: 要按压的元素 :param duration: 按压时长,单位秒 :param wait_time: 查找元素的最长等待时间 :param interval_time: 查找元素的轮询间隔时间 :return: """
OCR
def init_ocr_server(ip: str, port: int = 9752) -> bool: """ 初始化 OCR 服务 :param ip: :param port: :return: """ def get_text(region: _Region = None, scale: float = 1.0) -> List[str]: """ 通过 OCR 识别屏幕中的文字,返回文字列表 :param region: 识别区域,默认全屏; :param algorithm: 处理图片/屏幕所用算法和参数,默认保存原图; :param scale: 图片缩放率,默认为 1.0,1.0 以下为缩小,1.0 以上为放大; :return: 文字列表 """ def find_text(text: str, region: _Region = None, scale: float = 1.0) -> List[_Point]: """ 查找文字所在的坐标,返回坐标列表(坐标是文本区域中心位置) :param text: 要查找的文字; :param region: 识别区域,默认全屏; :param algorithm: 处理图片/屏幕所用算法和参数,默认保存原图; :param scale: 图片缩放率,默认为 1.0,1.0 以下为缩小,1.0 以上为放大; :return: 坐标列表(坐标是文本区域中心位置) """
元素操作
def get_element_rect(xpath: str, wait_time: float = None, interval_time: float = None, raise_err: bool = None) -> Optional[Tuple[_Point, _Point]]: """ 获取元素位置,返回元素区域左上角和右下角坐标 :param xpath: xpath 路径 :param wait_time: 等待时间,默认取 self.wait_timeout :param interval_time: 轮询间隔时间,默认取 self.interval_timeout :param raise_err: 超时是否抛出异常; :return: 元素区域左上角和右下角坐标 """ def get_element_desc(xpath: str, wait_time: float = None, interval_time: float = None, raise_err: bool = None) -> Optional[str]: """ 获取元素描述 :param xpath: xpath 路径 :param wait_time: 等待时间,默认取 self.wait_timeout :param interval_time: 轮询间隔时间,默认取 self.interval_timeout :param raise_err: 超时是否抛出异常; :return: 元素描述字符串 """ def get_element_text(xpath: str, wait_time: float = None, interval_time: float = None, raise_err: bool = None) -> Optional[str]: """ 获取元素文本 :param xpath: xpath 路径 :param wait_time: 等待时间,默认取 self.wait_timeout :param interval_time: 轮询间隔时间,默认取 self.interval_timeout :param raise_err: 超时是否抛出异常; :return: 元素文本 """ def set_element_text(xpath: str, text: str, wait_time: float = None, interval_time: float = None, raise_err: bool = None) -> bool: """ 设置元素文本 :param xpath: :param text: :param wait_time: 等待时间,默认取 .wait_timeout :param interval_time: 轮询间隔时间,默认取 .interval_timeout :param raise_err: 超时是否抛出异常; :return: """ def click_element(xpath: str, wait_time: float = None, interval_time: float = None, raise_err: bool = None) -> bool: """ 点击元素 :param xpath: :param wait_time: 等待时间,默认取 .wait_timeout :param interval_time: 轮询间隔时间,默认取 .interval_timeout :param raise_err: 超时是否抛出异常; :return: """ def click_any_elements(xpath_list: List[str], wait_time: float = None, interval_time: float = None, raise_err: bool = None) -> bool: """ 遍历点击列表中的元素,直到任意一个元素返回 True :param xpath_list: xpath 列表 :param wait_time: 等待时间,默认取 .wait_timeout :param interval_time: 轮询间隔时间,默认取 .interval_timeout :param raise_err: 超时是否抛出异常; :return: """ def scroll_element(xpath: str, direction: int = 0) -> bool: """ 滚动元素,0 向上滑动,1 向下滑动 :param xpath: xpath 路径 :param direction: 滚动方向,0 向上滑动,1 向下滑动 :return: """ def element_not_exists(xpath: str, wait_time: float = None, interval_time: float = None) -> bool: """ 元素是否不存在 :param xpath: xpath 路径 :param wait_time: 等待时间,默认取 self.wait_timeout :param interval_time: 轮询间隔时间,默认取 self.interval_timeout :return: """ def element_exists(xpath: str, wait_time: float = None, interval_time: float = None) -> bool: """ 元素是否存在 :param xpath: xpath 路径 :param wait_time: 等待时间,默认取 self.wait_timeout :param interval_time: 轮询间隔时间,默认取 self.interval_timeout :return: """ def any_elements_exists(xpath_list: List[str], wait_time: float = None, interval_time: float = None) -> Optional[str]: """ 遍历列表中的元素,只要任意一个元素存在就返回 True :param xpath_list: xpath 列表 :param wait_time: 等待时间,默认取 self.wait_timeout :param interval_time: 轮询间隔时间,默认取 self.interval_timeout :return: 任意一个元素存在就返回 True """ def element_is_selected(xpath: str) -> bool: """ 元素是否存在 :param xpath: xpath 路径 :return: """ def click_element_by_slide(xpath, distance: int = 1000, duration: float = 0.5, direction: int = 1, count: int = 999, end_flag_xpath: str = None, wait_time: float = 600, interval_time: float = 0.5, raise_err: bool = None) -> bool: """ 滑动列表,查找并点击指定元素 :param xpath: :param distance: 滑动距离,默认 1000 :param duration: 滑动时间,默认 0.5 秒 :param direction: 滑动方向,默认为 1; 1=上滑,2=下滑 :param count: 滑动次数 :param end_flag_xpath: 结束标志 xpath :param wait_time: 等待时间,默认 10 分钟 :param interval_time: 轮询间隔时间,默认 0.5 秒 :param raise_err: 超时是否抛出异常; :return: """
文件传输
def push_file(origin_path: str, to_path: str) -> bool: """ 将电脑文件传输到手机端 :param origin_path: 源文件路径 :param to_path: 目标存储路径 :return: ex: origin_path: / to_path: /storage/emulated/0/Android/data/com.aibot.client/files/code479259.png """ def pull_file(remote_path: str, local_path: str) -> bool: """ 将手机文件传输到电脑端 :param remote_path: 手机端文件路径 :param local_path: 电脑本地文件存储路径 :return: ex: remote_path: /storage/emulated/0/Android/data/com.aibot.client/files/code479259.png local_path: / """
设备操作
def start_app(name: str, wait_time: float = None, interval_time: float = None) -> bool: """ 启动 APP :param name: APP名字或者包名 :param wait_time: 等待时间,默认取 .wait_timeout :param interval_time: 轮询间隔时间,默认取 .interval_timeout :return: """ def get_device_ip() -> str: """ 获取设备IP地址 :return: """ def get_android_id() -> str: """ 获取 Android 设备 ID :return: """ def get_window_size() -> Dict[str, float]: """ 获取屏幕大小 :return: """ def get_image_size(image_path) -> Dict[str, float]: """ 获取图片大小 :param image_path: 图片路径; :return: """ def show_toast(text: str) -> bool: """ Toast 弹窗 :param text: 弹窗内容; :return: """ def sleep(wait_time: float, interval_time: float = 1.5): """ 强制等待 :param wait_time: 等待时长 :param interval_time: 等待时轮询间隔时间 :return: """ def send_keys(text: str) -> bool: """ 发送文本,需要打开 AiBot 输入法 :param text: 文本内容 :return: """ def send_vk(vk: int) -> bool: """ 发送文本,需要打开 AiBot 输入法 :param vk: 虚拟键值 :return: 虚拟键值按键对照表 https://blog.csdn.net/yaoyaozaiye/article/details/122826340 """ def write_android_file(remote_path: str, text: str, append: bool) -> bool: """ 写入安卓文件 :param remote_path: 安卓文件路径 :param text: 要写入的文本内容 :param append: 是否追加模式 :return: """ def read_android_file(remote_path: str) -> Optional[str]: """ 读取安卓文件 :param remote_path: 安卓文件路径 :return: """ def delete_android_file(remote_path: str) -> bool: """ 删除安卓文件 :param remote_path: 安卓文件路径 :return: """ def exists_android_file(remote_path: str) -> bool: """ 安卓文件是否存在 :param remote_path: 安卓文件路径 :return: """ def back() -> bool: """ 返回 :return: """ def home() -> bool: """ 返回桌面 :return: """ def recent_tasks() -> bool: """ 显示最近任务 :return: """ def open_uri(uri: str) -> bool: """ 唤起 app :param uri: app 唤醒协议 :return: open_uri("alipayqr://platformapi/startapp?saId=10000007") """ def start_activity(action: str,uri: str = '',package_name: str = '',class_name: str = '',typ: str = '') -> bool: """ Intent 跳转 :param action: 动作,例如 "android.intent.action.VIEW" :param uri: 跳转链接,例如:打开支付宝扫一扫界面,"alipayqr://platformapi/startapp?saId=10000007" :param package_name: 包名,"com.xxx.xxxxx" :param class_name: 类名 :param typ: 类型 :return: True或者 False """ def call_phone(mobile: str) -> bool: """ 拨打电话 :param mobile: 手机号码 :return: """ def send_msg(mobile, text) -> bool: """ 发送短信 :param mobile: 手机号码 :param text: 短信内容 :return: """ def get_activity() -> str: """ 获取活动页 :return: """ def get_package() -> str: """ 获取包名 :return: """ def set_clipboard_text(text: str) -> bool: """ 设置剪切板文本 :param text: :return: """ def get_clipboard_text() -> str: """ 获取剪切板内容 :return: """
控件与参数
def create_text_view(_id: int, text: str, x: int, y: int, width: int = 400, height: int = 60): """ 创建文本框控件 :param _id: 控件ID,不可与其他控件重复 :param text: 控件文本 :param x: 控件在屏幕上x坐标 :param y: 控件在屏幕上y坐标 :param width: 控件宽度,默认 400 :param height: 控件高度,默认 60 :return: """ def create_edit_view(_id: int, text: str, x: int, y: int, width: int = 400, height: int = 150): """ 创建编辑框控件 :param _id: 控件ID,不可与其他控件重复 :param text: 控件文本 :param x: 控件在屏幕上x坐标 :param y: 控件在屏幕上y坐标 :param width: 控件宽度,默认 400 :param height: 控件高度,默认 150 :return: """ def create_check_box(_id: int, text: str, x: int, y: int, width: int = 400, height: int = 60): """ 创建复选框控件 :param _id: 控件ID,不可与其他控件重复 :param text: 控件文本 :param x: 控件在屏幕上x坐标 :param y: 控件在屏幕上y坐标 :param width: 控件宽度,默认 400 :param height: 控件高度,默认 60 :return: """ def create_web_view(_id: int, url: str, x: int = -1, y: int = -1, width: int = -1, height: int = -1) -> bool: """ 创建WebView控件 :param _id: 控件ID,不可与其他控件重复 :param url: 加载的链接 :param x: 控件在屏幕上 x 坐标,值为 -1 时自动填充宽高 :param y: 控件在屏幕上 y 坐标,值为 -1 时自动填充宽高 :param width: 控件宽度,值为 -1 时自动填充宽高 :param height: 控件高度,值为 -1 时自动填充宽高 :return: """ def clear_script_widget() -> bool: """ 清除脚本控件 :return: """ def get_script_params() -> Optional[dict]: """ 获取脚本参数 :return: """
验证码
def get_captcha(file_path: str, username: str, password: str, soft_id: str, code_type: str, len_min: str = '0') -> Optional[dict]: """ 识别验证码 :param file_path: 图片文件路径 :param username: 用户名 :param password: 密码 :param soft_id: 软件ID :param code_type: 图片类型 参考https://www.chaojiying.com/price.html :param len_min: 最小位数 默认0为不启用,图片类型为可变位长时可启用这个参数 :return: JSON err_no,(数值) 返回代码 为0 表示正常,错误代码 参考https://www.chaojiying.com/api-23.html err_str,(字符串) 中文描述的返回信息 pic_id,(字符串) 图片标识号,或图片id号 pic_str,(字符串) 识别出的结果 md5,(字符串) md5校验值,用来校验此条数据返回是否真实有效 """ def error_captcha(username: str, password: str, soft_id: str,pic_id: str) -> Optional[dict]: """ 识别报错返分 :param username: 用户名 :param password: 密码 :param soft_id: 软件ID :param pic_id: 图片ID 对应 getCaptcha返回值的pic_id 字段 :return: JSON err_no,(数值) 返回代码 err_str,(字符串) 中文描述的返回信息 """ def score_captcha(username: str, password: str) -> Optional[dict]: """ 查询验证码剩余题分 :param username: 用户名 :param password: 密码 :return: JSON err_no,(数值) 返回代码 err_str,(字符串) 中文描述的返回信息 tifen,(数值) 题分 tifen_lock,(数值) 锁定题分 """
WinBot开发手册
窗口操作
def find_window(class_name: str = None, window_name: str = None) -> Optional[str]: """ 查找窗口句柄,仅查找顶级窗口,不包含子窗口 :param class_name: 窗口类名 :param window_name: 窗口名 :return: """ def find_windows(class_name: str = None, window_name: str = None) -> List[str]: """ 查找窗口句柄数组,仅查找顶级窗口,不包含子窗口 class_name 和 window_name 都为 None,则返回所有窗口句柄 :param class_name: 窗口类名 :param window_name: 窗口名 :return: 窗口句柄的列表 """ def find_sub_window(hwnd: str, class_name: str = None, window_name: str = None) -> Optional[str]: """ 查找子窗口句柄 :param hwnd: 当前窗口句柄 :param class_name: 窗口类名 :param window_name: 窗口名 :return: 子窗口句柄或 None """ def find_parent_window(hwnd: str) -> Optional[str]: """ 查找父窗口句柄 :param hwnd: 当前窗口句柄 :return: 父窗口句柄或 None """ def find_desktop_window() -> Optional[str]: """ 查找桌面窗口句柄 :return: 桌面窗口句柄或 None """ def get_window_name(hwnd: str) -> Optional[str]: """ 获取窗口名称 :param hwnd: 当前窗口句柄 :return: 窗口名称或 None """ def show_window(hwnd: str, show: bool) -> bool: """ 显示/隐藏窗口 :param hwnd: 当前窗口句柄 :param show: 是否显示窗口 :return: """ def set_window_top(hwnd: str, top: bool) -> bool: """ 设置窗口到最顶层 :param hwnd: 当前窗口句柄 :param top: 是否置顶,True 置顶, False 取消置顶 :return: """ def get_window_pos(hwnd: str, wait_time: float = None, interval_time: float = None) -> Optional[Tuple[Point, Point]]: """ 获取窗口位置 :param hwnd: 窗口句柄 :return: """ def set_window_pos(hwnd: str, left: float, top: float, width: float, height: float) -> bool: """ 设置窗口位置 :param hwnd: 当前窗口句柄 :param left: 左上角横坐标 :param top: 左上角纵坐标 :param width: 窗口宽度 :param height: 窗口高度 :return: """
键鼠操作
def move_mouse(hwnd: str, x: float, y: float, mode: bool = False, ele_hwnd: str = "0") -> bool: """ 移动鼠标 :param hwnd: 当前窗口句柄 :param x: 横坐标 :param y: 纵坐标 :param mode: 操作模式,后台 true,前台 false, 默认前台操作 :param ele_hwnd: 元素句柄,如果 mode=True 且目标控件有单独的句柄,则需要通过 get_element_window 获得元素句柄,指定 ele_hwnd 的值(极少应用窗口由父窗口响应消息,则无需指定); :return: """ def move_mouse_relative(hwnd: str, x: float, y: float, mode: bool = False) -> bool: """ 移动鼠标(相对坐标) :param hwnd: 当前窗口句柄 :param x: 相对横坐标 :param y: 相对纵坐标 :param mode: 操作模式,后台 true,前台 false, 默认前台操作 :return: """ def scroll_mouse(hwnd: str, x: float, y: float, count: int, mode: bool = False) -> bool: """ 滚动鼠标 :param hwnd: 当前窗口句柄 :param x: 横坐标 :param y: 纵坐标 :param count: 鼠标滚动次数, 负数下滚鼠标, 正数上滚鼠标 :param mode: 操作模式,后台 true,前台 false, 默认前台操作 :return: """ def click_mouse(hwnd: str, x: float, y: float, typ: int, mode: bool = False, ele_hwnd: str = "0") -> bool: """ 鼠标点击 :param hwnd: 当前窗口句柄 :param x: 横坐标 :param y: 纵坐标 :param typ: 点击类型,单击左键:1 单击右键:2 按下左键:3 弹起左键:4 按下右键:5 弹起右键:6 双击左键:7 双击右键:8 :param mode: 操作模式,后台 true,前台 false, 默认前台操作 :param ele_hwnd: 元素句柄,如果 mode=True 且目标控件有单独的句柄,则需要通过 get_element_window 获得元素句柄,指定 ele_hwnd 的值(极少应用窗口由父窗口响应消息,则无需指定); :return: """ def send_keys(text: str) -> bool: """ 输入文本 :param text: 输入的文本 :return: """ def send_keys_by_hwnd(hwnd: str, text: str) -> bool: """ 后台输入文本(杀毒软件可能会拦截) :param hwnd: 窗口句柄 :param text: 输入的文本 :return: """ def send_vk(vk: int, typ: int) -> bool: """ 输入虚拟键值(VK) :param vk: VK键值 :param typ: 输入类型,按下弹起:1 按下:2 弹起:3 :return: """ def send_vk_by_hwnd(hwnd: str, vk: int, typ: int) -> bool: """ 后台输入虚拟键值(VK) :param hwnd: 窗口句柄 :param vk: VK键值 :param typ: 输入类型,按下弹起:1 按下:2 弹起:3 :return: """
图色操作
def save_screenshot(hwnd: str, save_path: str, region: _Region = None, algorithm: _Algorithm = None, mode: bool = False) -> bool: """ 截图 :param hwnd: 窗口句柄; :param save_path: 图片存储路径; :param region: 截图区域,默认全屏; :param algorithm: 处理截图所用算法和参数,默认保存原图; :param mode: 操作模式,后台 true,前台 false, 默认前台操作; :return: # 区域相关参数 region = (0, 0, 0, 0) 按元素顺序分别代表:起点x、起点y、终点x、终点y,最终得到一个矩形。 # 算法相关参数 algorithm = (0, 0, 0) # 按元素顺序分别代表:algorithm_type 算法类型、threshold 阈值、max_val 最大值。 threshold 和 max_val 同为 255 时灰度处理. 0 THRESH_BINARY 算法,当前点值大于阈值 threshold 时,取最大值 max_val,否则设置为 0; 1 THRESH_BINARY_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则设置为最大值 max_val; 2 THRESH_TOZERO 算法,当前点值大于阈值 threshold 时,不改变,否则设置为 0; 3 THRESH_TOZERO_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则不改变; 4 THRESH_TRUNC 算法,当前点值大于阈值 threshold 时,设置为阈值 threshold,否则不改变; 5 ADAPTIVE_THRESH_MEAN_C 算法,自适应阈值; 6 ADAPTIVE_THRESH_GAUSSIAN_C 算法,自适应阈值; """ def get_color(hwnd: str, x: float, y: float, mode: bool = False) -> Optional[str]: """ 获取指定坐标点的色值,返回色值字符串(#008577)或者 None :param hwnd: 窗口句柄; :param x: x 坐标; :param y: y 坐标; :param mode: 操作模式,后台 true,前台 false, 默认前台操作; :return: """ def find_color(hwnd: str, color: str, sub_colors: _SubColors = None, region: _Region = None, similarity: float = 0.9, mode: bool = False, wait_time: float = None, interval_time: float = None): """ 获取指定色值的坐标点,返回坐标或者 None :param hwnd: 窗口句柄; :param color: 颜色字符串,必须以 # 开头,例如:#008577; :param sub_colors: 辅助定位的其他颜色; :param region: 在指定区域内找色,默认全屏; :param similarity: 相似度,0-1 的浮点数,默认 0.9; :param mode: 操作模式,后台 true,前台 false, 默认前台操作; :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: # 区域相关参数 region = (0, 0, 0, 0) 按元素顺序分别代表:起点x、起点y、终点x、终点y,最终得到一个矩形。 # 算法相关参数 algorithm = (0, 0, 0) # 按元素顺序分别代表:algorithm_type 算法类型、threshold 阈值、max_val 最大值。 threshold 和 max_val 同为 255 时灰度处理. 0 THRESH_BINARY 算法,当前点值大于阈值 threshold 时,取最大值 max_val,否则设置为 0; 1 THRESH_BINARY_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则设置为最大值 max_val; 2 THRESH_TOZERO 算法,当前点值大于阈值 threshold 时,不改变,否则设置为 0; 3 THRESH_TOZERO_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则不改变; 4 THRESH_TRUNC 算法,当前点值大于阈值 threshold 时,设置为阈值 threshold,否则不改变; 5 ADAPTIVE_THRESH_MEAN_C 算法,自适应阈值; 6 ADAPTIVE_THRESH_GAUSSIAN_C 算法,自适应阈值; """ def compare_color(hwnd: str,main_x: float,main_y: float,color: str,sub_colors: _SubColors = None,region: _Region = None,similarity: float = 0.9,mode: bool = False,wait_time: float = None,interval_time: float = None,raise_err: bool = None) -> Optional[Point]: """ 比较指定坐标点的颜色值 :param hwnd: 窗口句柄; :param main_x: 主颜色所在的X坐标; :param main_y: 主颜色所在的Y坐标; :param color: 颜色字符串,必须以 # 开头,例如:#008577; :param sub_colors: 辅助定位的其他颜色; :param region: 截图区域,默认全屏,``region = (起点x、起点y、终点x、终点y)``,得到一个矩形 :param similarity: 相似度,0-1 的浮点数,默认 0.9; :param mode: 操作模式,后台 true,前台 false, 默认前台操作; :param wait_time: 等待时间,默认取 self.wait_timeout; :param interval_time: 轮询间隔时间,默认取 self.interval_timeout; :param raise_err: 超时是否抛出异常; :return: True或者 False """ def extract_image_by_video(video_path: str, save_folder: str, jump_frame: int = 1) -> bool: """ 提取视频帧 :param video_path: 视频路径 :param save_folder: 提取的图片保存的文件夹目录 :param jump_frame: 跳帧,默认为1 不跳帧 :return: True或者False """ def crop_image(image_path, save_path, left, top, rigth, bottom) -> bool: """ 裁剪图片 :param image_path: 图片路径 :param save_path: 裁剪后保存的图片路径 :param left: 裁剪的左上角横坐标 :param top: 裁剪的左上角纵坐标 :param rigth: 裁剪的右下角横坐标 :param bottom: 裁剪的右下角纵坐标 :return: True或者False """ def find_images(hwnd: str, image_path: str, region: _Region = None, algorithm: _Algorithm = None, similarity: float = 0.9, mode: bool = False, multi: int = 1, wait_time: float = None, interval_time: float = None) -> List[_Point]: """ 寻找图片坐标,在当前屏幕中寻找给定图片中心点的坐标,返回坐标列表 :param hwnd: 窗口句柄; :param image_path: 图片的绝对路径; :param region: 从指定区域中找图,默认全屏; :param algorithm: 处理屏幕截图所用的算法,默认原图,注意:给定图片处理时所用的算法,应该和此方法的算法一致; :param similarity: 相似度,0-1 的浮点数,默认 0.9; :param mode: 操作模式,后台 true,前台 false, 默认前台操作; :param multi: 返回图片数量,默认1张; :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: # 区域相关参数 region = (0, 0, 0, 0) 按元素顺序分别代表:起点x、起点y、终点x、终点y,最终得到一个矩形。 # 算法相关参数 algorithm = (0, 0, 0) # 按元素顺序分别代表:algorithm_type 算法类型、threshold 阈值、max_val 最大值。 threshold 和 max_val 同为 255 时灰度处理. 0 THRESH_BINARY 算法,当前点值大于阈值 threshold 时,取最大值 max_val,否则设置为 0; 1 THRESH_BINARY_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则设置为最大值 max_val; 2 THRESH_TOZERO 算法,当前点值大于阈值 threshold 时,不改变,否则设置为 0; 3 THRESH_TOZERO_INV 算法,当前点值大于阈值 threshold 时,设置为 0,否则不改变; 4 THRESH_TRUNC 算法,当前点值大于阈值 threshold 时,设置为阈值 threshold,否则不改变; 5 ADAPTIVE_THRESH_MEAN_C 算法,自适应阈值; 6 ADAPTIVE_THRESH_GAUSSIAN_C 算法,自适应阈值; """ def find_dynamic_image(hwnd: str, interval_ti: int, region: _Region = None, mode: bool = False, wait_time: float = None, interval_time: float = None) -> List[_Point]: """ 找动态图,对比同一张图在不同时刻是否发生变化,返回坐标列表 :param hwnd: 窗口句柄; :param interval_ti: 前后时刻的间隔时间,单位毫秒; :param region: 在指定区域找图,默认全屏; :param mode: 操作模式,后台 true,前台 false, 默认前台操作; :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: """
OCR
def init_ocr_server(ip: str, port: int = 9752) -> bool: """ 初始化 OCR 服务 :param ip: :param port: :return: """ def get_text(hwnd_or_image_path: str, region: _Region = None, algorithm: _Algorithm = None,mode: bool = False) -> List[str]: """ 通过 OCR 识别窗口/图片中的文字,返回文字列表 :param hwnd_or_image_path: 窗口句柄或者图片路径; :param region: 识别区域,默认全屏; :param algorithm: 处理图片/屏幕所用算法和参数,默认保存原图; :param mode: 操作模式,后台 true,前台 false, 默认前台操作; :return: """ def find_text(hwnd_or_image_path: str, text: str, region: _Region = None, algorithm: _Algorithm = None,mode: bool = False) -> List[Point]: """ 通过 OCR 识别窗口/图片中的文字,返回文字列表 :param hwnd_or_image_path: 句柄或者图片路径 :param text: 要查找的文字 :param region: 识别区域,默认全屏 :param algorithm: 处理图片/屏幕所用算法和参数,默认保存原图 :param mode: 操作模式,后台 true,前台 false, 默认前台操作 :return: 文字列表 """
元素操作
def get_element_name(hwnd: str, xpath: str, wait_time: float = None, interval_time: float = None) -> Optional[str]: """ 获取元素名称 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: 元素名称字符串或 None """ def get_element_value(hwnd: str, xpath: str, wait_time: float = None, interval_time: float = None) -> Optional[str]: """ 获取元素文本 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: 元素文本字符串或 None """ def get_element_rect(hwnd: str, xpath: str, wait_time: float = None, interval_time: float = None) -> Optional[Tuple[_Point, _Point]]: """ 获取元素矩形,返回左上和右下坐标 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: 左上和右下坐标 """ def get_element_window(hwnd: str, xpath: str, wait_time: float = None, interval_time: float = None) -> Optional[str]: """ 获取元素窗口句柄 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: 元素窗口句柄字符串或 None """ def click_element(hwnd: str, xpath: str, typ: int, wait_time: float = None, interval_time: float = None) -> bool: """ 获取元素窗口句柄 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param typ: 操作类型,单击左键:1 单击右键:2 按下左键:3 弹起左键:4 按下右键:5 弹起右键:6 双击左键:7 双击右键:8 :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: """ def invoke_element(hwnd: str, xpath: str, wait_time: float = None, interval_time: float = None) -> bool: """ 执行元素默认操作(一般是点击操作) :param hwnd: 窗口句柄 :param xpath: 元素路径 :param wait_time: 等待时间,默认取 self.wait_timeout; :param interval_time: 轮询间隔时间,默认取 self.interval_timeout; :return: """ def set_element_focus(hwnd: str, xpath: str, wait_time: float = None, interval_time: float = None) -> bool: """ 设置元素作为焦点 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: """ def set_element_value(hwnd: str, xpath: str, value: str, wait_time: float = None, interval_time: float = None) -> bool: """ 设置元素文本 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param value: 要设置的内容 :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: """ def scroll_element(hwnd: str, xpath: str, horizontal: int, vertical: int, wait_time: float = None, interval_time: float = None) -> bool: """ 滚动元素 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param horizontal: 水平百分比 -1不滚动 :param vertical: 垂直百分比 -1不滚动 :param wait_time: 等待时间,默认取 .wait_timeout; :param interval_time: 轮询间隔时间,默认取 .interval_timeout; :return: """ def is_selected(hwnd: str, xpath: str, wait_time: float = None, interval_time: float = None) -> bool: """ 单/复选框是否选中 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param wait_time: 等待时间,默认取 self.wait_timeout; :param interval_time: 轮询间隔时间,默认取 self.interval_timeout; :return: """ def close_window(hwnd: str, xpath: str) -> bool: """ 关闭窗口 :param hwnd: 窗口句柄 :param xpath: 元素路径 :return: """ def set_element_state(hwnd: str, xpath: str, state: str) -> bool: """ 设置窗口状态 :param hwnd: 窗口句柄 :param xpath: 元素路径 :param state: 0正常 1最大化 2 最小化 :return: """
系统剪切板
def set_clipboard_text(text: str) -> bool: """ 设置剪切板内容 :param text: 要设置的内容 :return: """ def get_clipboard_text() -> str: """ 设置剪切板内容 :return: """
启动进程
def start_process(cmd: str, show_window=True, is_wait=False) -> bool: """ 执行cmd命令 :param cmd: 命令 :param show_window: 是否显示窗口,默认显示 :param is_wait: 是否等待程序结束, 默认不等待 :return: """ def execute_command(command: str, waitTimeout: int = 300) -> str: """ 执行cmd命令 :param command: cmd命令,不能含 "cmd"字串 :param waitTimeout: 可选参数,等待结果返回超时,单位毫秒,默认300毫秒 :return: cmd执行结果 """ def download_file(url: str, file_path: str, is_wait: bool) -> bool: """ :param url: 文件地址 :param file_path: 文件保存的路径 :param is_wait: 是否等待下载完成 :return: """
EXCEL操作
def open_excel(excel_path: str) -> Optional[dict]: """ 打开excel文档 :param excel_path: excle路径 :return: excel对象或者None """ def open_excel_sheet(excel_object: dict, sheet_name: str) -> Optional[dict]: """ 打开excel表格 :param excel_object: excel对象 :param sheet_name: 表名 :return: sheet对象或者None """ def save_excel(excel_object: dict) -> bool: """ 保存excel文档 :param excel_object: excel对象 :return: True或者False """ def write_excel_num(excel_object: dict, row: int, col: int, value: int) -> bool: """ 写入数字到excel表格 :param excel_object: excel对象 :param row: 行 :param col: 列 :param value: 写入的值 :return: True或者False """ def write_excel_str(excel_object: dict, row: int, col: int, str_value: str) -> bool: """ 写入字符串到excel表格 :param excel_object: excel对象 :param row: 行 :param col: 列 :param str_value: 写入的值 :return: True或者False """ def read_excel_num(excel_object: dict, row: int, col: int) -> int: """ 读取excel表格数字 :param excel_object: excel对象 :param row: 行 :param col: 列 :return: 读取到的数字 """ def read_excel_str(excel_object: dict, row: int, col: int) -> str: """ 读取excel表格字符串 :param excel_object: excel对象 :param row: 行 :param col: 列 :return: 读取到的字符 """ def remove_excel_row(excel_object: dict, row_first: int, row_last: int) -> bool: """ 删除excel表格行 :param excel_object: excel对象 :param row_first: 起始行 :param row_last: 结束行 :return: True或者False """ def remove_excel_col(excel_object: dict, col_first: int, col_last: int) -> bool: """ 删除excel表格列 :param excel_object: excel对象 :param col_first: 起始列 :param col_last: 结束列 :return: True或者False """
验证码
def get_captcha(file_path: str, username: str, password: str, soft_id: str, code_type: str, len_min: str = '0') -> Optional[dict]: """ 识别验证码 :param file_path: 图片文件路径 :param username: 用户名 :param password: 密码 :param soft_id: 软件ID :param code_type: 图片类型 参考https://www.chaojiying.com/price.html :param len_min: 最小位数 默认0为不启用,图片类型为可变位长时可启用这个参数 :return: JSON err_no,(数值) 返回代码 为0 表示正常,错误代码 参考https://www.chaojiying.com/api-23.html err_str,(字符串) 中文描述的返回信息 pic_id,(字符串) 图片标识号,或图片id号 pic_str,(字符串) 识别出的结果 md5,(字符串) md5校验值,用来校验此条数据返回是否真实有效 """ def error_captcha(username: str, password: str, soft_id: str,pic_id: str) -> Optional[dict]: """ 识别报错返分 :param username: 用户名 :param password: 密码 :param soft_id: 软件ID :param pic_id: 图片ID 对应 getCaptcha返回值的pic_id 字段 :return: JSON err_no,(数值) 返回代码 err_str,(字符串) 中文描述的返回信息 """ def score_captcha(username: str, password: str) -> Optional[dict]: """ 查询验证码剩余题分 :param username: 用户名 :param password: 密码 :return: JSON err_no,(数值) 返回代码 err_str,(字符串) 中文描述的返回信息 tifen,(数值) 题分 tifen_lock,(数值) 锁定题分 """
语音服务
def activate_speech_service(activate_key: str) -> bool: """ 激活 initSpeechService (不支持win7) :param activate_key: 激活密钥,联系管理员 :return: True或者False """ def init_speech_service(speech_key: str, speech_region: str) -> bool: """ 初始化语音服务(不支持win7),需要调用 activateSpeechService 激活 :param speech_key: 密钥 :param speech_region: 区域 :return: True或者False """ def audio_file_to_text(file_path, language: str) -> Optional[str]: """ 音频文件转文本 :param file_path: 音频文件路径 :param language: 语言,参考开发文档 语言和发音人 :return: 转换后的音频文本或者None """ def microphone_to_text(language: str) -> Optional[str]: """ 麦克风输入流转换文本 :param language: 语言,参考开发文档 语言和发音人 :return: 转换后的音频文本或者None """ def text_to_bullhorn(ssmlPath_or_text: str, language: str, voice_name: str) -> bool: """ 文本合成音频到扬声器 :param ssmlPath_or_text: 要转换语音的文本或者".xml"格式文件路径 :param language: 语言,参考开发文档 语言和发音人 :param voice_name: 发音人,参考开发文档 语言和发音人 :return: True或者False """ def text_to_audio_file(ssmlPath_or_text: str, language: str, voice_name: str, audio_path: str) -> bool: """ 文本合成音频并保存到文件 :param ssmlPath_or_text: 要转换语音的文本或者".xml"格式文件路径 :param language: 语言,参考开发文档 语言和发音人 :param voice_name: 发音人,参考开发文档 语言和发音人 :param audio_path: 保存音频文件路径 :return: True或者False """ def microphone_translation_text(source_language: str, target_language: str) -> Optional[str]: """ 麦克风输入流转换文本 :param source_language: 要翻译的语言,参考开发文档 语言和发音人 :param target_language: 翻译后的语言,参考开发文档 语言和发音人 :return: 转换后的音频文本或者None """ def audio_file_translation_text(audio_path: str, source_language: str, target_language: str) -> Optional[str]: """ 麦克风输入流转换文本 :param audio_path: 要翻译的音频文件路径 :param source_language: 要翻译的语言,参考开发文档 语言和发音人 :param target_language: 翻译后的语言,参考开发文档 语言和发音人 :return: 转换后的音频文本或者None """
数字人
def init_metahuman(metahuman_mde_path: str, metahuman_scale_value: str, is_update_metahuman: bool = False) -> bool: """ 初始化数字人,第一次初始化需要一些时间 :param metahuman_mde_path: 数字人模型路径 :param metahuman_scale_value: 数字人缩放倍数,1为原始大小。为0.5时放大一倍,2则缩小一半 :param is_update_metahuman: 是否强制更新,默认fasle。为true时强制更新会拖慢初始化速度 :return: True或者False """ def metahuman_speech(save_voice_folder: str, text: str, language: str, voice_name: str, quality: int = 0, wait_play_sound: bool = True, speech_rate: int = 0, voice_style: str = "General") -> bool: """ 数字人说话,此函数需要调用 initSpeechService 初始化语音服务 :param save_voice_folder: 保存的发音文件目录,文件名以0开始依次增加,扩展为.wav格式 :param text: 要转换语音的文本 :param language: 语言,参考开发文档 语言和发音人 :param voice_name: 发音人,参考开发文档 语言和发音人 :param quality: 音质,0低品质 1中品质 2高品质, 默认为0低品质 :param wait_play_sound: 等待音频播报完毕,默认为 true等待 :param speech_rate: 语速,默认为0,取值范围 -100 至 200 :param voice_style: 语音风格,默认General常规风格,其他风格参考开发文档 语言和发音人 :return: True或者False """ def metahuman_speech_cache(save_voice_folder: str, text: str, language: str, voice_name: str, quality: int = 0, wait_play_sound: bool = True, speech_rate: int = 0, voice_style: str = "General") -> bool: """ *数字人说话缓存模式,需要调用 initSpeechService 初始化语音服务。函数一般用于常用的话术播报,非常用话术切勿使用,否则内存泄漏 :param save_voice_folder: 保存的发音文件目录,文件名以0开始依次增加,扩展为.wav格式 :param text: 要转换语音的文本 :param language: 语言,参考开发文档 语言和发音人 :param voice_name: 发音人,参考开发文档 语言和发音人 :param quality: 音质,0低品质 1中品质 2高品质, 默认为0低品质 :param wait_play_sound: 等待音频播报完毕,默认为 true等待 :param speech_rate: 语速,默认为0,取值范围 -100 至 200 :param voice_style: 语音风格,默认General常规风格,其他风格参考开发文档 语言和发音人 :return: True或者False """ def metahuman_insert_video(video_file_path: str, audio_file_path: str, wait_play_video:bool = True) -> bool: """ 数字人插入视频 :param video_file_path: 插入的视频文件路径 :param audio_file_path: 插入的音频文件路径 :param wait_play_video: 等待视频播放完毕,默认为 true等待 :return: True或者False """ def replace_background(bg_file_path: str, replace_red: int = -1, replace_green: int = -1, replace_blue: int = -1, sim_value: int = 0) -> bool: """ 替换数字人背景 :param bg_file_path: 数字人背景 图片/视频 路径,默认不替换背景。仅替换绿幕背景的数字人模型 :param replace_red: 数字人背景的三通道之一的 R通道色值。默认-1 自动提取 :param replace_green: 数字人背景的三通道之一的 G通道色值。默认-1 自动提取 :param replace_blue: 数字人背景的三通道之一的 B通道色值。默认-1 自动提取 :param sim_value: 相似度。 默认为0,取值应当大于等于0 :return: True或者False """ def show_speech_text(origin_y: int = 0, font_type: str = "Arial", font_size: int = 30, font_red: int = 128, font_green: int = 255, font_blue: int = 0, italic:bool = False, underline:bool = False) -> bool: """ 显示数字人说话的文本 :param origin_y, 第一个字显示的起始Y坐标点。 默认0 自适应高度 :param font_type, 字体样式,支持操作系统已安装的字体。例如"Arial"、"微软雅黑"、"楷体" :param font_size, 字体的大小。默认30 :param font_red, 字体颜色三通道之一的 R通道色值。默认128 :param font_green, 字体颜色三通道之一的 G通道色值。默认255 :param font_blue, 字体颜色三通道之一的 B通道色值。默认0 :param italic, 是否斜体,默认false :param underline, 是否有下划线,默认false :return: True或者False """
驱动程序相关
def get_extend_param() -> Optional[str]: """ 获取WindowsDriver.exe 命令扩展参数 :return: WindowsDriver 驱动程序的命令行["extendParam"] 字段的参数 """ def close_driver() -> bool: """ 关闭WindowsDriver.exe驱动程序 :return: """
WebBot开发手册
页面和导航
def goto(url: str) -> bool: """ 跳转页面 :param url: url 地址 :return: """ def new_page(url: str) -> bool: """ 新建 Tab 并跳转页面 :param url: url 地址 :return: """ def back() -> bool: """ 后退 :return: """ def forward() -> bool: """ 前进 :return: """ def refresh() -> bool: """ 刷新 :return: """ def save_screenshot(xpath: str = None) -> Optional[str]: """ 截图,返回 PNG 格式的 base64 :param xpath: 元素路径,如果指定该参数则截取元素图片; :return: PNG 格式的 base64 的字符串或 None """ def get_current_page_id() -> Optional[str]: """ 获取当前页面 ID :return: """ def get_all_page_id() -> list: """ 获取所有页面 ID :return: """ def switch_to_page(page_id: str) -> bool: """ 切换到指定页面 :param page_id: :return: """ def close_current_page() -> bool: """ 关闭当前页面 :return: """ def ger_current_url() -> Optional[str]: """ 获取当前页面 URL :return: 当前页面 URL 字符串或 None """ def get_current_title() -> Optional[str]: """ 获取当前页面标题 :return: """
iframe 操作
def switch_to_frame(xpath) -> bool: """ 切换到指定 frame :param xpath: xpath 路径 :return: """ def switch_to_main_frame() -> bool: """ 切回主 frame :return: """
元素操作
def click_element(xpath: str) -> bool: """ 点击元素 :param xpath: :return: """ def get_element_text(xpath: str) -> Optional[str]: """ 获取元素文本 :param xpath: xpath 路径 :return: 元素文本字符串或 None """ def get_element_rect(xpath: str) -> Optional[Tuple[_Point, _Point]]: """ 获取元素矩形坐标 :param xpath: xpath 路径 :return: 元素矩形坐标或None """ def get_element_attr(xpath: str, attr_name: str) -> Optional[str]: """ 获取元素的属性 :param xpath: xpath 路径 :param attr_name: 属性名称字符串 :return: """ def get_element_outer_html(xpath: str) -> Optional[str]: """ 获取元素的 outerHtml :param xpath: xpath 路径 :return: """ def get_element_inner_html(xpath: str) -> Optional[str]: """ 获取元素的 innerHtml :param xpath: xpath 路径 :return: """ def is_selected(xpath: str) -> bool: """ 元素是否已选中 :param xpath: xpath 路径 :return: """ def is_displayed(xpath: str) -> bool: """ 元素是否可见 :param xpath: xpath 路径 :return: """ def is_available(xpath: str) -> bool: """ 元素是否可用 :param xpath: xpath 路径 :return: """ def clear_element(xpath: str) -> bool: """ 清除元素值 :param xpath: xpath 路径 :return: """ def set_element_focus(xpath: str) -> bool: """ 设置元素焦点 :param xpath: xpath 路径 :return: """ def upload_file_by_element(xpath: str, file_path: str) -> bool: """ 通过元素上传文件 :param xpath: 元素 xpath 路径 :param file_path: 文件路径 :return: """ def send_keys(xpath: str, value: str) -> bool: """ 输入值;如果元素不能设置焦点,应先 click_mouse 点击元素获得焦点后再输入 :param xpath: 元素 xpath 路径 :param value: 输入的内容 :return: """ def set_element_value(xpath: str, value: str) -> bool: """ 设置元素值 :param xpath: 元素 xpath 路径 :param value: 设置的内容 :return: """ def set_element_attr(xpath: str, attr_name: str, attr_value: str) -> bool: """ 设置元素属性 :param xpath: 元素 xpath 路径 :param attr_name: 属性名称 :param attr_value: 属性值 :return: """ def send_vk(vk: str) -> bool: """ 输入值 :param vk: 输入内容 :return: """
键鼠操作
def click_mouse(point: _Point_Tuple, typ: int) -> bool: """ 点击鼠标 :param point: 坐标点 :param typ: 点击类型,单击左键:1 单击右键:2 按下左键:3 弹起左键:4 按下右键:5 弹起右键:6 双击左键:7 :return: """ def move_mouse(point: _Point_Tuple) -> bool: """ 移动鼠标 :param point: 坐标点 :return: """ def scroll_mouse(offset_x: float, offset_y: float, x: float = 0, y: float = 0) -> bool: """ 滚动鼠标 :param offset_x: 水平滚动条移动的距离 :param offset_y: 垂直滚动条移动的距离 :param x: 鼠标横坐标位置, 默认为0 :param y: 鼠标纵坐标位置, 默认为0 :return: """ def click_mouse_by_element(xpath: str, typ: int) -> bool: """ 根据元素位置点击鼠标(元素中心点) :param xpath: 元素 xpath 路径 :param typ: 点击类型,单击左键:1 单击右键:2 按下左键:3 弹起左键:4 按下右键:5 弹起右键:6 双击左键:7 :return: """ def move_to_element(xpath: str) -> bool: """ 移动鼠标到元素位置(元素中心点) :param xpath: 元素 xpath 路径 :return: """ def scroll_mouse_by_element(xpath: str, offset_x: float, offset_y: float) -> bool: """ 根据元素位置滚动鼠标 :param xpath: 元素路径 :param offset_x: 水平滚动条移动的距离 :param offset_y: 垂直滚动条移动的距离 :return: """
Alert
def click_alert(accept: bool, prompt_text: str) -> bool: """ 点击警告框 :param accept: 确认或取消 :param prompt_text: 警告框文本 :return: """ def get_alert_text() -> Optional[str]: """ 获取警告框文本 :return: 警告框文本字符串 """
窗口操作
def get_window_pos(): """ 获取窗口位置和状态 :return: 返回窗口左上角坐标点,宽度和高度,状态 """ def set_window_pos(left: float, top: float, width: float, height: float, status) -> bool: """ 设置窗口位置和状态 :param left: 窗口 x 坐标 :param top: 窗口 y 坐标 :param width: 宽度 :param height: 高度 :param status: 状态 :return: """ def mobile_emulation(width: int, height: int, ua: str, _sys: Literal["Android", "iOS"], sys_version: str, lang: str = "", tz: str = "", latitude: float = 0, longitude: float = 0, accuracy: float = 0) -> bool: """ 模拟移动端浏览器 :param width: 宽度 :param height: 高度 :param ua: 用户代理 :param _sys: 系统 :param sys_version: 系统版本 :param lang: 语言 :param tz: 时区 :param latitude: 纬度 :param longitude: 经度 :param accuracy: 准确度 :return: """
Cookies
def get_cookies(url: str) -> Optional[list]: """ 获取指定 url 的 Cookies :param url: url 字符串 :return: """ def get_all_cookies() -> Optional[list]: """ 获取所有的 Cookies :return: 列表格式的 cookies """ def set_cookies(url: str, name: str, value: str, options: dict = None) -> bool: """ 设置指定 url 的 Cookies :param url: 要设置 Cookie 的域 :param name: Cookie 名 :param value: Cookie 值 :param options: 其他属性 :return: """ def delete_cookies(name: str, url: str = "", domain: str = "", path: str = "") -> bool: """ 删除指定 Cookie :param name: 要删除的 Cookie 的名称 :param url: 删除所有匹配 url 和 name 的 Cookie :param domain: 删除所有匹配 domain 和 name 的 Cookie :param path: 删除所有匹配 path 和 name 的 Cookie :return: """ def delete_all_cookies() -> bool: """ 删除所有 Cookie :return: """ def clear_cache() -> bool: """ 清除缓存 :return: """
JS 注入
def execute_script(script: str) -> Optional[Any]: """ 注入执行 JS :param script: 要执行的 JS 代码 :return: 假如注入代码有返回值,则返回此值,否则返回 None; result = execute_script('(()=>"aibote rpa")()') print(result) # "aibote rpa" """
浏览器操作
def quit() -> bool: """ 退出浏览器 :return: """
驱动程序相关
def get_extend_param() -> Optional[str]: """ 获取WebDriver.exe 命令扩展参数 :return: WebDriver 驱动程序的命令行["extendParam"] 字段的参数 """ def close_driver(self) -> bool: """ 关闭WebDriver.exe驱动程序 :return: """