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 ...
随机推荐
- DLang 与 C 语言交互
DLang 与 C 语言交互 很难受的是,这部分的文档太少了,根本没有 教程向 的文章.所以我写了此文以做分享. 本文原址链接(防止机器搬运):https://www.cnblogs.com/jeef ...
- Unity中的RegisterPlugins:深入解析与实用案例
Unity中的RegisterPlugins:深入解析与实用案例 在Unity游戏开发中,我们经常需要使用第三方插件来实现一些特定的功能.为了让这些插件能够在Unity中正常工作,我们需要对它们进行注 ...
- docker部署zabbix6.0及企业微信发送告警
1 前言 1.1 实验背景 因zabbix 6.0新增许多新特性,为熟悉界面特意在本地部署一套简易版(未启用HA功能).原本想要在烧制了centos7.9系统树莓派上部署,一查之下armv7果然冷门, ...
- linux 脚本:iptables-nat.sh
#!/bin/bash # 2022.2.28 by dewan # DNAT configuration. iptables -t nat -F PUB_IFACE="enp125s0f0 ...
- 2021-7-11 Vue的自定义指令简单实例
获取焦点简单实例,用Vue.directive(ps:指令)定义,命名不要是关键字,用v-加自定义指令名称调用,而内部用钩子函数inserted来实现 <!DOCTYPE html> &l ...
- 【博客索引】Welcome!!
欢迎来到 Daniel_yzy 的博客园 个人简介 初二,男,就读于长沙市一中双语实验学校. 爱好 OI,一生讨厌文化课. 当然,也是唯物主义无神论者. 已有 npy,要问是谁的话可以私下问. 博客索 ...
- 王道oj/problem21
网址:oj.lgwenda.problem/21 思路:先序遍历,中序遍历,后序遍历用递归实现:层序遍历用一个链队实现,出队一个元素,顺序入队他的左孩子和右孩子 代码: #define _CRT_SE ...
- LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介
前言 今天想和大家分享的是:仪酷LabVIEW AI视觉工具包的VI简介,如介绍内容有误,欢迎各位朋友们帮忙纠正~ 一.AI视觉工具包VI简介 已经安装好的AI工具包位于程序框图-函数选板-Addon ...
- html5 2.0学习
列表定义:是一种特别的对象集合.集合:集中在一起合二为一(聚集). 聚集:多个列(信息资源)排在一起.信息资源:一堆数据,可能是字符,可能是图片. 列表分类:有序列表 无序列表 (自)定义列表 有 ...
- 聊聊JDK1.0到JDK20的那些事儿
1.前言 最近小组在开展读书角活动,我们小组选的是<深入理解JVM虚拟机>,相信这本书对于各位程序猿们都不陌生,我也是之前在学校准备面试期间大致读过一遍,emm时隔多日,对里面的知识也就模 ...