python clicknium 库自动化千牛桌面端

python clicknium 库自动化千牛桌面端

千牛是阿里巴巴集团卖家工作台,商家经营的必备工具,今天我们使用python来自动化千牛桌面端。
clicknium 是基于 python 实现的一套 免费的UI 自动化的库,功能强大、简单易用,可以用来操作桌面、 web 、 java 、 sap 等应用。clicknium 相比于其他的自动化库,使用更简单,相比于大家熟知的 selenium,clicknium 上手更简单,页面元素的定位不需要人工再去写 xpath ,内置的录制器录制一下页面元素控件就会自动生成选择器,同时 clicknium 还支持桌面应用,在实现复杂混合web和桌面应用自动化场景中,可以无缝衔接;相比于 pywinauto ,clicknium 内置的元素定位录制器,非常方便定位抓取控件元素,不需要像 pywinauto 还需要借助其他工具手动去筛选定位控件,使用 clicknium 录制器定位元素,效率将大大提升;此外 clicknium 还支持图像识别来定位控件,该功能有效的补充了基于元素控件特征定位的缺陷,在某些特殊的桌面软件中某些控件是没有控件树结构的,此时使用图像识别将发挥重要作用,官网也提供了详细的 文档,可以随时查阅。

下面我们使用 clicknium 来操作千牛桌面客户端。

第一步:安装 clicknium vscode 扩展
vscode 扩展页面搜索 **clicknium** , 安装即可(需要先安装vscode)

在这里插入图片描述

第二步:安装 clicknium sdk(需要先安装python)
如果python版本<=3.8
pip install clickniumpython版本>=3.9
pip install --pre pythonnet
pip install clicknium

这里需要注意的是如果安装了多个版本的python,先选择vscode当前项目使用的python环境(ctrl+shift+p,然后输入 python:select interpreter,选择项目使用的python版本),然后在该python环境中安装clicknium package,这里可以先忽略,后面如果sample.py文件中无法识别clicknium,再来处理

第三步:安装好后vscode左侧会多一个扩展(小犀牛头像)

点击小犀牛,然后点击sign in,会跳转官网需要注册登录下即可(支持github和google账号一键注册登录)
登录完成后跳转web页面点击Launch vscode,跳转回vscode,点击打开按钮

第四步:创建Sample Project
  • 在 vscode 中 Ctrl+shift+p,
  • 输入 clicknium 下拉列表中选择 Clicknium: Sample
  • 然后选择一个文件夹用来存放 sample 项目,等待创建示例完成

此时会看到文件夹中有一个sample.py文件和一个 .locator 文件夹;其中 sample.py 就是自动化的python业务代码,.locator 文件夹存放元素定位相关信息,它是自动管理的,可以不用管它

第五步:先让生成的sample能够运行起来

生成的 sample 是对 web 页面的自动化操作,需要安装浏览器扩展,sample中使用的是edge浏览器,选择对应扩展安装即可(扩展安装在小犀牛页面)。然后直接就能运行 sample.py 文件了(按F5运行),流程会打开浏览器并且做一些自动化操作。

按照以上步骤环境就搭建完成,并且一个简单的web页面自动化就完成了。

接下来我们使用clicknium来自动化千牛桌面客户端。首先我们删除掉生成的main里面代码。

对千牛操作流程如下:(这里只是展示出clicknium的强大功能,流程本生的场景大家可以按照自己的需求具体来设计实现)
注意:这里千牛第一次登录会有一个向导提示,需要用户登录过一次,并且将这些向导给点击过,在 接待中心 IM即时通讯页面也会有向导需要用户第一次登录后处理。

下载安装千牛windows客户端, 具体步骤如下:
千牛版本【9.07.03N(02985)】

  1. 启动千牛软件
  2. 用户名、密码登录千牛
  3. 打开"接待中心"
  4. “我的好友"中添加一个新的组"测试分组”
  5. 添加几个测试的好友,并且加入"测试分组"(好友需要验证的则跳过)
  6. 向"测试分组"组员发送消息

在这里插入图片描述

以上功能基本能展现出clicknium的自动化能力,其中千牛客户端页面中还是有很多部分的控件是没有控件树结构的,所以需要借助图像识别来实现。

这里讲解下clicknium最核心结构,比如

ui(locator.aliworkbench.login.btnLogin).click()

ui 函数中传递的参数即为选择器,该选择器是通过录制器录制生成的,用来定位软件的控件位置,用户可以手动修改生成的选择器名称为更有意义的名字,该函数通过传入的选择器搜索定位到页面控件,然后返回 UiElement 对象,然后调用该对象的 click 方法,它就会点击该控件。

下面为实现的python代码。

import subprocess
from time import sleep
from clicknium import clicknium as cc, locator, ui
from clicknium.common.enums import ClearHotKey,PreAction,InputTextBy,MouseButton,MouseActionBy,Location
from clicknium.common.models.mouselocation import MouseLocationconfigPath = r'C:\test\config.txt'  # 这里是txt文本配置文件的路径,修改为你自己的
f = open(configPath, "r")
username= f.readline().strip()  # txt文本第一行为用户名
password = f.readline().strip() # txt文本第二行为密码
exePath = f.readline().strip()  # txt文本第三行为千牛的exe文件路径
groupMessage = '你好!!!'# 主方法
def main():list_name = get_name_list()  # 获取要添加的好友名列表start_process()  # 启动千牛进程login()  # 用户名密码登录sleep(5) # 等待5秒进程启动完毕ui(locator.aliworkbench.btnIM).click()  # 点击 '接待中心 'cc.wait_appear(locator.aliworkbench.im.imWindow)  # 等待 '接待中心' 界面出现add_group()  # 添加 '测试分组'add_friends(list_name)  # 循环添加好友send_message()  # 发送消息sleep(5)def get_name_list():return ['sfsfsfs','abcdefg','ddddd','ggggg']  # 要添加的好友名称# 启动进程
def start_process():path = exePathsubprocess.Popen(path)  # 通过 subprocess 库来启动千牛进程sleep(3)print('start_process end.')# 用户名密码登录
def login():# 首先清除掉已经有的账号ui(locator.aliworkbench.login.username).clear_text('send-hotkey',ClearHotKey.Home_ShiftEnd_Delete,PreAction.Click)# 填写用户名,这里无法使用UiElement对象的set_text 方法,它不是一个标准的edit输入框,我们可以使用全局的输入文本cc.send_text(username)# 发送enter快捷键,跳转到输入密码框cc.send_hotkey('{enter}')# 点击密码框ui(locator.aliworkbench.login.password).click()# 清空密码框ui(locator.aliworkbench.login.password).clear_text('send-hotkey',ClearHotKey.Home_ShiftEnd_Delete,PreAction.Click)# 输入密码cc.send_text(password)# 点击登录ui(locator.aliworkbench.login.btnLogin).click()print('login end.')# 增加“测试分组”
def add_group():# 点击我的好友ui(locator.aliworkbench.im.btnMyFriend).click()# 判断测试分组是否已经存在,如果不存在则添加,存在则跳过exist = cc.is_existing(locator.aliworkbench.im.testGroup)if(exist):print('group already exist.')return# 在 我的好友 中第一个分组 右键弹出菜单ui(locator.aliworkbench.im.itemFriendGroup).click(MouseButton.Right)# 点击弹出菜单->添加组ui(locator.aliworkbench.im.menuAddGroup).click()# 输入测试分组,参数我们选择SendKeyAfterClick,意思是先点击输入框获取焦点,然后输入'测试分组'文本ui(locator.aliworkbench.im.txtNewGroupName).set_text('测试分组',InputTextBy.SendKeyAfterClick)# 通过再次点击'我的好友' 使得当前输入框丢失焦点,创建'测试分组'生效ui(locator.aliworkbench.im.btnMyFriend).click()print('add_group end.')# 循环添加几个好友
def add_friends(list_name):for name in list_name:# 点击'搜索框',并且清空文本,通过Home ShiftEnd Delete 组合快捷键来删除已有文本ui(locator.aliworkbench.im.txtSearch).clear_text('send-hotkey',ClearHotKey.Home_ShiftEnd_Delete,PreAction.Click)# '搜索框' 输入要添加的好友名称ui(locator.aliworkbench.im.txtSearch).set_text(name,InputTextBy.SendKeyAfterClick)# 点击'在网络中查找',这里该控件是没有控件树结构的,所以只能通过图像识别先识别位置,然后来点击它,# 由于各个电脑大小分辨率等不同,# 如果这个地方没有识别通过,你可以在你的电脑上重新使用录制器图像识别的方式抓取下该控件ui(locator.aliworkbench.im.btnSearchOnNetwork).click()# 睡眠1s,等待搜索结果出现sleep(1)# 这里需要点击第一条搜索结果,然后在聊天界面中点击添加好友按钮# 这里同样搜索结果是没有控件树结构的,并且每次内容都是不同的(也就不能使用图像识别方式来点击)# 所以我们通过定位'搜索框'+向下偏移40px坐标的方式 来点击第一条搜索结果ui(locator.aliworkbench.im.txtSearch).click(mouse_location=MouseLocation(Location.Center,yoffset=40))sleep(1)# 判断聊天界面中间顶部是否有'加为我的好友'按钮(如果没有,说明已经是好友则跳过)if not (cc.is_existing(locator.aliworkbench.im.btnAdd)):print(f'already a friend:{name}')continue# 还不是好友,则点击'加为我的好友'ui(locator.aliworkbench.im.btnAdd).click()# 添加好友有几种结果,一种是需要对方验证的,另一种是不需要验证,直接就能添加成功的# 判断是否弹出了添加好友验证的提示框if(cc.wait_appear(locator.aliworkbench.im.addWindow,wait_timeout=5)):print(f'need verify:{name}')# 需要验证信息,点击输入框,这里同样是通过图像识别方式ui(locator.aliworkbench.im.inputVerifyInfo).click()# 填写验证信息cc.send_text('你好,我是小千牛。')# 点击'确定'按钮ui(locator.aliworkbench.im.btnSendVerify).click()else:# 另一种不需要验证信息,直接添加好友成功,我们这里将添加的好友加入到我们创建的'测试分组'中。# 这里等待'添加好友成功'页面'完成'按钮出现cc.wait_appear(locator.aliworkbench.im.btnComplete)# 点击选择组,弹出下拉框ui(locator.aliworkbench.im.selectGroup).click()# 点击下拉框中的'测试分组'ui(locator.aliworkbench.im.friendGroup).click(MouseButton.Left,by=MouseActionBy.MouseEmulation)# 点击'完成'按钮ui(locator.aliworkbench.im.btnComplete).click()print(f'does not need verify:{name}')print('add_friend end.')# 给‘’测试分组‘’用户发送消息
def send_message():# 点击'我的好友'ui(locator.aliworkbench.im.btnMyFriend).click()# 图像识别到定位到'测试分组',右键点击它,弹出菜单ui(locator.aliworkbench.im.testGroup).click(MouseButton.Right)# 点击弹出菜单-> 向组员群发消息ui(locator.aliworkbench.im.menuSendGroupMessage).click()# 等待'群发即时消息'窗口出现cc.wait_appear(locator.aliworkbench.im.sendGroupMsgWindow)# 输入待发送消息内容ui(locator.aliworkbench.im.inputGroupMessage).set_text(groupMessage,InputTextBy.SendKeyAfterClick)# 点击'发送'按钮,没有控件树结构,只能图像识别ui(locator.aliworkbench.im.btnSendGroupMsg).click()# 等待消息发送完成弹窗出现cc.wait_appear(locator.aliworkbench.im.sendSuccessWindow)# 关闭弹窗ui(locator.aliworkbench.im.btnSendOK).click()# 关闭 '群发即时消息'窗口ui(locator.aliworkbench.im.closeSendGroupMsgWindow).click()print('send_message end.')

流程编写完成后F5运行即可

在这里插入图片描述
源码:https://github.com/automation9417/qianniu

最后总结下

如果你想使用 python 来自动化,那么无论是 web 还是桌面端应用, clicknium 都将是一个非常好的选择,使用简单,能够应对很多场景。
我们总结下流程中使用了哪些自动化技术:

  • 发送快捷键
  • 清空文本
  • 输入文本
  • 全局输入文本
  • 点击
  • 相对定位+偏移量点击
  • 图像点击
  • 等待元素出现
  • 判断元素是否存在

当然还有很多方便的自动化api,我们还没有使用上,后续遇到需求可以去参考官方文档。
其实千牛这款桌面端软件,对于自动化的支持不是特别友好的,在开发自动化过程中,我们使用了一些技巧以及对于录制的选择器做了修改,因为每次千牛重新启动他的控件树种的定位特征元素值都是改变的,所以我们去掉了一些自动生成的属性,比如AutomationId,
如果是对于notepad、一些常见的ERP系统等他们录制的元素都是很稳定的,不需要人工干预修改。
至于选择器更详细的使用和技巧,大家可以参照 官方文档 ,但是整体思路就是录制定位元素,获取到选择器,验证能够通过,但是在千牛软件重启后再次到对应页面验证不通过,那么此时可能就需要手动微调下选择器,但是大部分场景自动录制的选择器都是可以稳定运行的。

开发自动化的过程思路总结:
就类似与开发一款软件,我们先要整理清楚需求,然后将需求细分,然后对人工操作的步骤一步步拆解成一个个子函数或者子模块,最终构建成完整的流程,最后在适当地方加入异常处理和重试机制,构建健壮的能稳定运行的自动化流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26209.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云空间 千牛 net 对接

{"error":"incorrect region, please use up-z2.qiniup.com, bucket is: 76demo"} 接入七牛云对象存储 注册七牛云账号&#xff0c;点右上角的密钥管理&#xff0c;key和secret需要复制到application.properties中。 因为用到对象云存储&#xff0c;放一些…

千牛工作台linux版,深度商店应用千牛工作台、Discord、QQ(Linux)、新浪微博安卓版...

深度商店收录千牛工作台、Discord、QQ(Linux)、新浪微博安卓版应用&#xff0c;如果使用Deepin或是统信UOS操作系统&#xff0c;可在深度商店程序上安装它们。 1、千牛工作台 千牛工作台是阿里巴巴官方出品的卖家一站式店铺管理工具&#xff0c;卖家可以通过它发布经营资讯消息…

千牛中文件已存在于服务器上,千牛登陆在云服务器上

千牛登陆在云服务器上 内容精选 换一换 如果Windows操作系统云服务器未安装密码重置插件&#xff0c;可以参见本节内容重新设置密码。本节操作介绍的方法仅适用于修改Windows本地账户密码&#xff0c;不能修改域账户密码。Linux操作系统请参见重置Linux云服务器密码(未安装重置…

千牛如何撤销发往服务器的文件,千牛服务器没有返回数据

千牛服务器没有返回数据 内容精选 换一换 当服务器中的磁盘发生故障、或者由于人为误操作导致服务器数据丢失时&#xff0c;可以使用已经创建成功的备份恢复服务器。云服务器备份仅支持将服务器中的所有云硬盘作为整体进行备份和恢复&#xff0c;不支持对服务器中的部分云硬盘进…

千牛文件已上传服务器,千牛怎样挂在云服务器上

千牛怎样挂在云服务器上 内容精选 换一换 本节为您介绍如何通过控制台提供的远程登录功能(即VNC方式)登录到弹性云服务器上。如果您的弹性云服务器是采用密钥方式鉴权&#xff0c;请在登录前先使用密钥文件解析登录密码。密钥文件解析密码请参考获取Windows弹性云服务器的密码。…

千牛计算机使用方法,如何在电脑千牛中打开移动旺店

快捷入口&#xff1a; 移动旺店电脑版操作教程 移动旺店千牛手机版操作教程 现在移动旺店分网页版及电脑千牛版&#xff0c;手机千牛版&#xff0c; 如要在电脑千牛中打开移动旺店&#xff0c;请按如下步骤操作。 1&#xff0c;确保已登录(授权)过移动旺店 如果以前已经登录过移…

网站服务器 千牛,云服务器千牛

云服务器千牛 内容精选 换一换 Windows弹性云服务器虚拟化驱动异常(Tools没有正常运行)。为保证弹性云服务器的正常使用&#xff0c;请参见本节内容进行修复。弹性云服务器虚拟化驱动异常会影响弹性云服务器服务数据安全、可用性、系统性能。具体影响的表现&#xff1a;可能导致…

登陆千牛时显示服务器失败,千牛登陆云服务器

千牛登陆云服务器 内容精选 换一换 本节操作介绍Linux操作系统云服务器在单用户模式下重置密码的操作步骤。本文档适用于X86架构的弹性云服务器。进入单用户模式下重置root密码前请先做好数据备份。请根据操作系统类型选择操作步骤&#xff1a;CentOS 8系列CentOS 7/EulerOS 系…

千牛文件在服务器上,千牛挂在云服务器

千牛挂在云服务器 内容精选 换一换 云耀云服务器(Halo Elastic Cloud Server&#xff0c;HECS)是可以快速搭建简单应用的新一代云服务器&#xff0c;具备独立、完整的操作系统和网络功能。提供快速地应用部署和简易的管理能力&#xff0c;适用于网站搭建、开发环境等低负载应用…

虚拟服务器挂千牛,云服务器挂千牛

云服务器挂千牛 内容精选 换一换 只有运行中的云服务器才允许用户登录。Windows操作系统用户名“Administrator”。忘记密码&#xff0c;请先通过“重置密码”功能设置登录密码。重置密码&#xff1a;选中待重置密码的云耀云服务器&#xff0c;并选择“操作”列下的“ 重置密码…

千牛服务器网站,千牛平台远程服务器

千牛平台远程服务器 内容精选 换一换 云堡垒机与RADIUS服务器对接&#xff0c;认证登录系统的用户身份。本小节主要介绍如何配置RADIUS域认证模式&#xff0c;并可对配置的RADIUS认证进行用户有效性测试。用户已获取系统模块管理权限。已获取RADIUS服务器相关信息。若需修改认证…

千牛如何撤销发往服务器的文件夹,千牛怎么清理缓存?两种清理千牛缓存方法介绍...

千牛怎么清理缓存呢?如果缓存太多,千牛客户端会提示清理缓存,但是有很多朋友对于千牛怎么清理缓存还不太清楚,下文小编就为大家带来两种清理千牛缓存方法介绍,有需要的朋友一起去看下吧。 软件名称: 千牛电脑版(支持旺旺在线交流) 5.06.02N 官方PC安装版 软件大小: 69…

chatGPT能不能有危险活体模型

🍿*★,*:.☆欢迎您/$:*.★* 🍿

AIGC席卷,抖快、阅文、知乎大战网文圈

配图来自Canva可画 成熟的网文市场&#xff0c;时不时进来一条鲶鱼。 经历了二十几个夏秋秋冬&#xff0c;网文市场形成了阅文、晋江、七猫、番茄等平台割据一方稳定的市场格局。后来暗自布局网文市场的知乎、抖音、快手等新玩家开始浮出水面&#xff0c;未来的市场纷争下或许…

【ChatGpt】ChatGpt解答了 “我一下午都没解决的“ Linux触摸屏驱动的问题

目录 一、遇到问题二、在C站搜索文章去解决问题的收获三、用 ChatGpt 去解决的收获四、总结 一、遇到问题 现实问题&#xff1a; 有一个基于Linux4.19内核开发了&#xff0c;在海思SS528芯片运行的系统&#xff0c;用鼠标可以正常使用。 现在要求使用一块公司开发的 多点触控屏…

ONLYOFFICE中使用 chatGPT如何帮你提高Excel技能

作为一个Excel用户&#xff0c;我有时候很难回忆起公式的名称以及他们的工作原理&#xff0c;所以最终我浪费时间在百度或谷歌上搜索。 幸运的是ONLYOFFICE中的chatGPT现在不仅可以为我这样的普通Excel用户节省时间&#xff0c;也可以为很多专业使用Excel用户节省时间&#xff…

人工智能生成内容(AIGC):概念、发展历史及其机遇、挑战与未来方向

人工智能生成内容&#xff08;AIGC&#xff09; 人工智能生成内容&#xff08;Artificial Intelligence Generated Content, AIGC&#xff09;&#xff0c; AIGC 是指使用生成式 AI &#xff08;Generative Artificial Intelligence, GAI&#xff09; 技术生成的内容&#xff…

编程思维 | 为什么要学习编程,因为它会教你如何思考~~~

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 学习编程 可以干什么&#xff1f; 编程就只是程序员的“代名词”&#xff1f; 其他人是不是就没必要学编程了… 1 学编程能干…

AI 时代,提示词便是生产力

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

【AI实战】开源大语言模型LLMs汇总

【AI实战】开源大语言模型LLM汇总 大语言模型开源大语言模型1、LLaMA2、ChatGLM - 6B3、Alpaca4、PandaLLM5、GTP4ALL6、DoctorGLM &#xff08;MedicalGPT-zh v2&#xff09;7、MedicalGPT-zh v18、Cornucopia-LLaMA-Fin-Chinese9、minGPT10、InstructGLM11、FastChat12、Luot…