python~windows自动化工具 uiautomation库
微软提供了关于自动化操作PC端桌面应用程序的工具,官方描述为:
Microsoft UI Automation is an accessibility framework that enables Windows applications to provide and consume programmatic information about user interfaces (UIs). It provides programmatic access to most UI elements on the desktop. It enables assistive technology products, such as screen readers, to provide information about the UI to end users and to manipulate the UI by means other than standard input. UI Automation also allows automated test scripts to interact with the UI.
Python库为我们封装了shoppingmode 微软UI Automation的API,即uiautomation库。
资料
微软官网关于UI Automation的介绍:
1、IUIAutomationElement interface:
https://docs.microsoft.com/en-us/windows/win32/api/uiautomationclient/nn-uiautomationclient-iuiautomationelement
2、Control Types and Their Supported Control Patterns,查看全部的Control-Pattern支持表格。
https://docs.microsoft.com/en-us/windows/win32/winauto/uiauto-controlpatternmapping
3、uiautomation库的具体用法,GitHub上开发者发布的教程:
https://github.com/yinkaisheng/Python-UIAutomation-for-Windows/blob/master/readme_cn.md
4、作者自己也有博客
https://www.cnblogs.com/Yinkaisheng/p/3444132.html
安装automation
1、安装uiautomation库
# pip install uiautomation
python中默认的安装目录为: C:\Users\XXX\AppData\Local\Programs\Python\Python310\Scripts

2、使用
进入windwos PowerShell,到automation.py的目录,通过命令: python automation.py +参数:
因为加入和环境变量,也可以直接的cmd中,输入: automation.py -t3
1)、查看帮助
PS C:\Users\gXXX\AppData\Local\Programs\Python\Python310\Scripts> python automation.py -h
UIAutomation 2.0.16 (Python 3.10.5, 64 bit)
usage
-h show command help
-t delay time, default 3 seconds, begin to enumerate after Value seconds, this must be an integer
you can delay a few seconds and make a window active so automation can enumerate the active window
-d enumerate tree depth, this must be an integer, if it is null, enumerate the whole tree
-r enumerate from root:Desktop window, if it is null, enumerate from foreground window
-f enumerate from focused control, if it is null, enumerate from foreground window
-c enumerate the control under cursor, if depth is < 0, enumerate from its ancestor up to depth
-a show ancestors of the control under cursor
-n show control full name, if it is null, show first 30 characters of control's name in console,
always show full name in log file @AutomationLog.txt
-p show process id of controls
运行automation.py遍历控件时,支持下列参数
-t int value, 延迟时间time秒,延迟指定秒数再遍历控件,
-r, 从树的根部(root: Desktop)遍历,如果不指定,从当前窗口遍历
-d, int Value, 遍历控件树的的深度depth,如果不指定,遍历整个树,和-c一起使用时,可以为负值
-f, 遍历焦点focus控件,如果不指定,从当前窗口遍历
-c, 遍历光标下的控件,如果不指定,从当前窗口遍历,如果同时指定-d, -d可以为负值,比如-d-2表示从光标下控件向上找到两层父控件,遍历这个父控件
-a, 获取光标下控件及其所有祖先(ancestor)控件
-n, 显示控件的完整name, 如果不指定,只显示前30个字符
举例:
automation.py –t3, 3秒后遍历当前窗口所有控件
automation.py –d2 –t3, 3秒后遍历当前窗口前三层控件
automation.py –r –d1 –t0 -n, 0秒后遍历root的第一层子控件,并显示控件完整名称
automation.py –c –t3, 3秒后遍历鼠标光标下面的控件信息
automation.py –c –t3 -d-2, 3秒后遍历鼠标光标下面的控件向上两层的父控件
2)、抓取微信控件
-t3,表示延迟3s抓取;
此处执行命令后,将鼠标移至微信,抓取信息如下:
C:\Users\gongl1>automation.py -d4 -t3
UIAutomation 2.0.16 (Python 3.10.5, 64 bit)
please wait for 3 seconds
2022-07-11 11:58:54.240 automation.py[79] main -> Starts, Current Cursor Position: (285, 379)
ControlType: PaneControl ClassName: #32769 AutomationId: Rect: (0,0,1920,1080)[1920x1080] Name: 'Desktop 1' Handle: 0x10010(65552) Depth: 0 SupportedPattern: LegacyIAccessiblePattern
ControlType: WindowControl ClassName: WeChatMainWndForPC AutomationId: Rect: (30,95,1168,895)[1138x800] Name: 'WeChat' Handle: 0x20742(132930) Depth: 1 SupportedPattern: LegacyIAccessiblePattern ScrollItemPattern TransformPattern WindowPattern
ControlType: ButtonControl ClassName: AutomationId: Rect: (41,140,86,185)[45x45] Name: '磊' Handle: 0x0(0) Depth: 5 SupportedPattern: InvokePattern LegacyIAccessiblePattern ScrollItemPattern
ControlType: ButtonControl ClassName: AutomationId: Rect: (32,204,95,259)[63x55] Name: 'Chats' Handle: 0x0(0) Depth: 5 SupportedPattern: InvokePattern LegacyIAccessiblePattern ScrollItemPattern
ControlType: ButtonControl ClassName: AutomationId: Rect: (32,255,95,310)[63x55] Name: 'Contacts' Handle: 0x0(0) Depth: 5 SupportedPattern: InvokePattern LegacyIAccessiblePattern ScrollItemPattern
ControlType: ButtonControl ClassName: AutomationId: Rect: (32,306,95,361)[63x55] Name: 'Favorites' Handle: 0x0(0) Depth: 5 SupportedPattern: InvokePattern LegacyIAccessiblePattern ScrollItemPattern
ControlType: ButtonControl ClassName: AutomationId: Rect: (32,357,95,412)[63x55] Name: 'WeChat Files' Handle: 0x0(0) Depth: 5 SupportedPattern: InvokePattern LegacyIAccessiblePattern ScrollItemPattern
ControlType: ButtonControl ClassName: AutomationId: Rect: (32,408,95,463)[63x55] Name: 'Moments' Handle: 0x0(0) Depth: 5 SupportedPattern: InvokePattern LegacyIAccessiblePattern ScrollItemPattern
ControlType: ButtonControl ClassName: AutomationId: Rect: (32,561,95,616)[63x55] Name: 'Search' Handle: 0x0(0) Depth: 5 SupportedPattern: InvokePattern LegacyIAccessiblePattern ScrollItemPattern
ControlType: ButtonControl ClassName: AutomationId: Rect: (48,741,79,772)[31x31] Name: 'Mini Programs Panel' Handle: 0x0(0) Depth: 5 SupportedPattern: InvokePattern LegacyIAccessiblePattern ScrollItemPattern
2022-07-11 11:58:55.270 automation.py[114] main -> Ends
C:\Users\gongl1>
这些参数就对应:

对于未读消息,可以查看到:
ScrollItemPattern
ControlType: ListControl ClassName: AutomationId: Rect: (82,212,394,934)[312x722] Name: '会话' Handle: 0x0(0) Depth: 9 ScrollPattern.HorizontalScrollPercent: 0.0 ScrollPattern.VerticalScrollPercent: 0.0060790273556231 SupportedPattern: LegacyIAccessiblePattern ScrollItemPattern ScrollPattern SelectionPattern
ControlType: ListItemControl ClassName: AutomationId: Rect: (82,212,394,292)[312x80] Name: '群test' Handle: 0x0(0) Depth: 10 SelectionItemPattern.IsSelected: False ValuePattern.Value: '张三:未读信息' SupportedPattern: LegacyIAccessiblePattern ScrollItemPattern
# 绑定微信的主程序窗口
wx=iautomation.WindowControl(Name='WeChat')
# 切到到程序窗口
wx.SwitchToThisWindow()
# 绑定会话窗口
python~windows自动化工具 uiautomation库的更多相关文章
- Python 任务自动化工具:nox 的配置与 API
英文 | Configuration & API 出处 | nox 官方文档 译者 | 豌豆花下猫@Python猫 Github地址:https://github.com/chinesehua ...
- Python 任务自动化工具 tox 教程
在我刚翻译完的 Python 打包系列文章中,作者提到了一个神奇的测试工具 tox,而且他本人就是 tox 的维护者之一.趁着话题的相关性,本文将对它做简单的介绍,说不定大家在开发项目时能够用得上. ...
- 强大的 Python 任务自动化工具!invoke 十分钟入门指南
接着前面的<tox 教程>,以及刚翻译好的<nox文档>,我们继续聊聊 Python 任务自动化的话题. nox 的作者在去年的 Pycon US 上,做了一场题为<Br ...
- Python第三方常用工具、库、框架等
Python ImagingLibrary(PIL):它提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换.打印和显示.还能进行一些图形效果的处理,如图形的放大.缩小和旋 ...
- python windows时间同步工具
由于某种原因(BIOS电池没电),电脑的系统时间会与我们的北京时间不同步,将会导致如下问题: 1. 抢火车票的时候已经过时间了 2.别的同事都走了,你还以为没下班 …… 规避问题的方法:同步系统时间 ...
- python接口自动化测试之requests库详解
前言 说到python发送HTTP请求进行接口自动化测试,脑子里第一个闪过的可能就是requests库了,当然python有很多模块可以发送HTTP请求,包括原生的模块http.client,urll ...
- 更好用的 Python 任务自动化工具:nox 官方教程
英文| nox tutorial 出处| nox 官方文档 译者| 豌豆花下猫@Python猫 Github地址:https://github.com/chinesehuazhou/nox_doc_c ...
- 开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt
首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 . 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Ac ...
- Python测试 ——开发工具库
Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...
- Python渗透测试工具库
漏洞及渗透练习平台 WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.com ...
随机推荐
- Python运维开发之路《高阶函数》
一.列表生成式,迭代器&生成器 列表生成式 需求:data列表里有如下三个值,需要给每个值加1 1 data = [1,2,3] 2 list = map(lambda x:x+1,data) ...
- 使用Kettle定时从数据库A刷新数据到数据库B
一.需求背景 由于项目场景原因,需要将A库(MySQL)中的表a.表b.表c中的数据定时T+1 增量的同步到B库(MySQL).这里说明一下,不是数据库的主从备份,就是普通的数据同步.经过技术调研,发 ...
- linux grep基本用法--九五小庞
通过此语句可以查询一个文件或者当前目录下所有文件中包含exception和error的文件 grep -E -i "((exception)|(error))" * 1.查找文件中 ...
- WPF入门教程系列三十 ——DataGrid验证
WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...
- 论文日记二:VGG
1. 导读 前面我们回顾了AlexNet,AlexNet的作者指出模型的深度很重要,而VGG最大的贡献就在于对网络模型深度的研究. VGG原论文:<Very Deep Convolutional ...
- iota简介
当声明枚举类型或定义一组相关常量时,Go语言中的iota关键字可以帮助我们简化代码并自动生成递增的值.本文档将详细介绍iota的用法和行为. iota关键字 iota是Go语言中的一个预定义标识符,它 ...
- MyBatis(RowBounds)分页了解内容
RowBounds 不在使用SQL实现分页 1.接口 List<User> getUserByRowBounds(); 2.mapper.xml <select id="g ...
- 使用JMeter连接达梦数据库的步骤和示例
引言: 本文将介绍如何使用JMeter连接达梦数据库,并提供连接达梦数据库的步骤和示例,帮助您快速开始进行数据库性能测试. 步骤: 1. 下载并安装JMeter:首先,从JMeter官方网站下载并安装 ...
- 2021-11-17 WPF初识
StackPanel容器:默认竖直排列,Orientation="Horizontal"横向排列,超过就不会显示 wrapPanel:超过会自动换行 设置样式: <Windo ...
- Robot Framework 自动化测试随笔(一)
一.安装Robot Framework步骤(安装目录避免中文和特殊字符,建议以管理员身份进行全部安装过程): 1.查看ride最新支持的python版本,据此下载对应python版本: https:/ ...