Window脚本自动化uiautomation详解_番茄出品

Window脚本自动化uiautomation详解_番茄出品

start

  • 有时候pc端电脑,会有一些重复操作,希望能够通过代码实现这些操作。
  • 尝试了好几个库,但是识别准确率很低,在苦苦寻找之后,发现一个非常好用的 python 库 :uiautomation
  • 今天来记录一下相关知识点。

1. uiautomation 官方说明

官方地址:uiautomation-github

官方介绍在这里插入图片描述

2. 前置条件

定位软件或定位组件,需要分析我们的软件。

目前两种方案

2.1 inspect.exe

官网直接下载,即可分析我们的软件和软件中的组件。

# 下载地址
https://github.com/blackrosezy/gui-inspect-tool

在这里插入图片描述

2.2 automation.py

安装: uiautomation

pip install uiautomation

当安装了 uiautomation,在python安装目录下的Scripts目录下得到一个 automation.py 脚本,可以使用它来准确获取目标窗口的控件结构信息。

执行: automation.py

python automation.py -t1 -d1

automation.py 的逻辑可以看帮助指令,或者另行百度。算是用命令行的形式去分析窗口,建议是使用 inspect.exe。 特殊情况 inspect.exe 识别不精准的时候,以 automation.py 为准。

3. 快速上手(常用方法)

想对这个库,有全面了解,可以参考 参考博客。我这里说下如何快速上手。

3.0 重点

uiautomation 之所以识别精度高,是因为他有一个很独特的查询参数,那就是可以定义查询窗口/空间的深度

  • searchDepth = 0xFFFFFFFF: 搜索深度;
  • Depth:控件相对于searchFromControl的精确深度;

searchDepth在指定的深度范围内(包括1~searchDepth层中的所有子孙控件)搜索第一个满足搜索条件的控件。
Depth只在Depth所在的深度,搜索第一个满足搜索条件的控件。

比如我已知我控件在第四层,结合其他参数,很容易定位到具体的内容参数。当然配合它的一些 兄弟父子选择器,很容易选择到一些特征很相似的组件。

3.1 安装

pip install uiautomation

3.2 匹配属性值

  1. searchFromControl = None:从哪个控件开始查找,如果为None,从根控件Desktop开始查找

  2. searchDepth = 0xFFFFFFFF: 搜索深度

  3. searchInterval = SEARCH_INTERVAL:搜索间隔

  4. foundIndex = 1 :搜索到的满足搜索条件的控件索引,索引从1开始

  5. Name:控件名字

  6. SubName :控件部分名字

  7. RegexName:使用re.match匹配符合正则表达式的名字,Name,SubName,RegexName只能使用一个,不能同时使用

  8. ClassName :类名字

  9. AutomationId: 控件AutomationId

  10. ControlType :控件类型

  11. Depth:控件相对于searchFromControl的精确深度

  12. Compare:自定义比较函数function(control: Control, depth: int)->bool

3.2 获取软件窗口

notepadWindow = auto.WindowControl(searchDepth=1, ClassName="Notepad")
# 获取深度为1 ,ClassName是Notepad的窗口 
# 其实就是获取记事本

3.3 获取窗口中的组件

edit = notepadWindow.Control(searchDepth=2, Name="文本编辑器")
# 获取深度为2 ,Name是文本编辑器的窗口 

3.4 触发键盘或鼠标逻辑

auto.SetClipboardText("WIN98中的“98”是什么意思?")
edit.SendKeys(
    "{Ctrl}v"
)  # 获取文本print("编辑框内容:",edit.GetValuePattern().Value)# 通过标题栏查找名称为关闭的按钮
auto.SendKeys("{Ctrl}s")

auto.SendKeys("2.自己创造的文件")  # 输入文件名,并快捷键点击保存
auto.SendKeys("{ALT}s")  # 如果弹出文件名冲突提示,则确认覆盖

# auto是uiautomation别名
# edit是编辑组件

3.5 其他选择器

获取所有的子控件:

control.GetChildren()

获取首个子控件:

control.GetFirstChildControl()

获取最后一个子控件:

control.GetLastChildControl()

获取下一个兄弟控件:

control.GetNextSiblingControl()

获取前一个兄弟控件:

control.GetPreviousSiblingControl()

获取父控件:

control.GetParentControl()

获取顶层窗口控件:

control.GetTopLevelControl()

获取满足指定条件的祖先控件:

control.GetAncestorControl(func)

4. demo案例

2.编写并且修改记事本.py

import subprocess
import uiautomation as auto

auto.uiautomation.SetGlobalSearchTimeout(2)  # 设置全局搜索超时时间为2秒

subprocess.Popen(
    "notepad.exe"
)  # 首先从桌面的第一层子控件中找到记事本程序的窗口WindowControl,再从这个窗口查找子控件
notepadWindow = auto.WindowControl(searchDepth=1, ClassName="Notepad")
print(notepadWindow.Name)  # 设置窗口前置
notepadWindow.SetTopmost(True)  # 输入文本
edit = notepadWindow.Control(searchDepth=2, Name="文本编辑器")
# 文本编辑器

auto.SetClipboardText("WIN98中的“98”是什么意思?")
edit.SendKeys(
    "{Ctrl}v"
)  # 获取文本print("编辑框内容:",edit.GetValuePattern().Value)# 通过标题栏查找名称为关闭的按钮
auto.SendKeys("{Ctrl}s")

auto.SendKeys("2.自己创造的文件")  # 输入文件名,并快捷键点击保存
auto.SendKeys("{ALT}s")  # 如果弹出文件名冲突提示,则确认覆盖

5.参考博客

  • Windows桌面程序自动化控制之uiautomation模块全面讲解

end

  • 可以灵活的使用匹配字段,然后去获取

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java技术复习提升 11 常用类

第11章 常用类 1 包装类 不同包装类都继承自Object类 Serialiazble接口表示该类表示序列化 Comparable接口用于定义自然顺序 包装类和基本数据的转换 jdk5之前手动装箱拆箱 jdk5之后自动装箱拆箱 自动装箱底层调用的是valueof方法 拆箱仍然是intvalue方法 public class Inte…

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(三)

本篇紧跟第一篇, 和 第二篇无关 Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案 Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二) 先说需求: 某业务配置表,按配置的时间区间及组织层级取方…

DASCTF 2024 10月 Reverse 完成笔记 附题目

题目链接: https://github.com/Airrcat/long_long/tree/main/DASCTF_2024_10 ezre 查PE 32位无壳 开始分析 看起来很像加壳了 字符串未有暴露信息,但是段中有一个themida 发现是一个壳,直接去找脱壳机 一些脱壳工具(Magicmida)是…

kafka进阶_2.存储消息

文章目录 一、存储消息介绍二、副本同步2.1、数据一致性2.2、HW在副本之间的传递 如果想了解kafka基础架构和生产者架构可以参考 kafka基础和 Kafka进阶_1.生产消息。 一、存储消息介绍 数据已经由生产者Producer发送给Kafka集群,当Kafka接收到数据后&#xff0c…

志愿者小程序源码社区网格志愿者服务小程序php

志愿者服务小程序源码开发方案:开发语言后端php,tp框架,前端是uniapp。 一 志愿者端-小程序: 申请成为志愿者,志愿者组织端进行审核。成为志愿者后,可以报名参加志愿者活动。 志愿者地图:可以…

SpringMVC-01-回顾MVC

1. 回顾MVC 1.1. 什么是MVC MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。…

解决k8s拉取私有镜像401 Unauthorized 问题

拉取镜像时未指定账户和密码通常是因为需要访问的镜像仓库启用了认证,但 Kubernetes 默认配置中未提供访问凭据。要解决此问题,可以按照以下步骤配置镜像仓库的认证信息: 1. 创建 Kubernetes Secret 为镜像仓库配置访问凭据,使用…

AmazonS3集成minio实现https访问

最近系统全面升级到https,之前AmazonS3大文件分片上传直接使用http://ip:9000访问minio的方式已然行不通,https服务器访问http资源会报Mixed Content混合内容错误。 一般有两种解决方案,一是升级minio服务,配置ssl证书&#xff0c…

el-table-column自动生成序号在序号前插入图标

实现效果&#xff1a; 代码如下&#xff1a; 在el-table里加入这个就可以了&#xff0c;需要拿到值可以用scope.$index ​​​​​​​<el-table-column type"index" label"序号" show-overflow-tooltip"true" min-width"40">…

JavaEE 实现 登录+注册(采用注解方式链接数据库)

&#xff08;Spring MVC的Controller练习&#xff09; 工具&#xff1a;Tomcat 10.0.23&#xff0c;MySQL&#xff0c;JDK18 一、运行效果展示 点击运行Tomcat首先进入index.jsp页面 若已有账号点击登录即可进行登录&#xff0c;这里先点击“获取ROY6账号”去注册&#xff0…

V-rep机器人仿真软件学习笔记

常用的机器人仿真软件有哪些&#xff1f;为什么选择V-rep&#xff1f; 目前常用的机器人物理仿真软件有Gazebo、V-rep、Webots等&#xff0c;这三款都是开源软件&#xff0c;自己使用过前两种&#xff0c;Gazebo配合ROS使用功能十分强大&#xff0c;但是要在Linux系统下使用&am…

数据库中的增删改查操作、聚合函数、内置函数、分组查询

数据库中的增删改查操作、聚合函数、内置函数、分组查询 CRUD简介Create 新增语法示例单⾏数据全列插⼊单⾏数据指定列插⼊多⾏数据指定列插⼊ Retrieve 检索语法⽰例构造数据 Select全列查询指定列查询查询字段为表达式为查询结果指定别名语法⽰例 结果去重查询 Order by 排序…

Flink转换算子——flatMap/map/filter/keyby/reduce综合案例

需求: 对流数据中的单词进行统计&#xff0c;排除敏感词TMD【腾讯美团滴滴】 此处用到了一个windows版本的软件 netcat&#xff0c;具体用法&#xff0c;先解压&#xff0c;然后在路径中输入cmd,来到黑窗口。 官网地址&#xff1a;netcat 1.11 for Win32/Win64Netcat介绍及安装…

图算法 | 3、图分析与数据科学

图分析(Graph Analytics)在本质上是对图数据的处理与分析&#xff0c;其过程可以概括为图计算。 而图计算的范畴不仅包含数据的计算或分析&#xff0c;还包含元数据管理、模式管理、数据建模、数据清洗、转换、加载、治理、图分析与计算等一系列操作。 或许我们用大数据生命周…

鲸鱼机器人和乐高机器人的比较

鲸鱼机器人和乐高机器人各有其独特的优势和特点&#xff0c;家长在选择时可以根据孩子的年龄、兴趣、经济能力等因素进行综合考虑&#xff0c;选择最适合孩子的教育机器人产品。 优势 鲸鱼机器人 1&#xff09;价格亲民&#xff1a;鲸鱼机器人的产品价格相对乐高更为亲民&…

【Unity】 GamePlay开发:通用的检查点/成就/条件触发系统

特别适用于各种解谜关卡, 成就系统&#xff0c;任务系统&#xff0c;的 通用事件处理 CheckPointHandler.cs随便挂在场景中的某个物体上 (单例模式&#xff0c;场景中只要有一个&#xff09; 1) How To Use CheckPoint Events是一个列表&#xff0c;每个元素是一个组合事件&…

企业OA管理系统:Spring Boot技术实现与案例研究

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足&#xff0c;创建了一个计算机管理企业OA管理系统的方案。文章介绍了企业OA管理系统的系统分析部…

【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作

1.实验目的 熟悉了解掌握SQL Server软件的基本操作与使用方法&#xff0c;以及通过理论课学习与实验参考书的帮助&#xff0c;熟练掌握使用T-SQL语句和交互式方法对数据表进行插入数据、修改数据、删除数据等等的操作&#xff1b;作为后续实验的基础&#xff0c;根据实验要求重…

基于AXI PCIE IP的FPGA PCIE卡示意图

创作不易&#xff0c;转载请注明出处&#xff1a;https://blog.csdn.net/csdn_gddf102384398/article/details/143926217 上图中&#xff0c;在FPGA PCIE卡示意图内&#xff0c;有2个AXI Master设备&#xff0c;即&#xff1a;PCIE到AXI4-Full-Master桥、AXI CDMA IP&#xff1…

Docker1:认识docker、在Linux中安装docker

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…