专栏名称: Python极客专栏
后台回复:Python,获取4W字Python知识手册。
目录
相关文章推荐
51好读  ›  专栏  ›  Python极客专栏

pywinauto,一款Win自动化利器!

Python极客专栏  · 公众号  ·  · 2024-06-04 12:00

正文

请到「今天看啥」查看全文


无需魔法,国内可直接使用官方ChatGPT-4(Plus)、ChatGPT-4o!


作者:冰冷的希望

https://blog.csdn.net/qq_39147299/article/details/132409817





1.安装






pywinauto是一个 用于自动化Python模块 ,适合Windows系统的软件(GUI),可以 通过Pywinauto遍历窗口 (对话框)和窗口里的控件,也可以 控制鼠标和键盘输入 ,所以它能做的事情比之前介绍的pysimplegui更多



一般使用pip安装就行了

pip install pywinauto


官网文档:https://pywinauto.readthedocs.io/en/latest/







2.Application






我们要控制软件的第一件事就是启动一个Windows软件,每一个软件(进程)都是一个Application对象


实例化Application对象的时候可以传入一个backend参数,可选值为 win32(默认)和uia


  • win32对应的框架: MFC 、VB6、VCL、简单的 WinForms 控件和大多数旧的遗留应用程序

  • uia对应的框架: WinForms、WPF、商店应用程序、Qt5、浏览器


如果无法知道要测试的软件是属于哪种框架,可以使用 Inspect(对应uia) Spy++ (对应win32) 看看,你看哪个显示得更全就选哪个。Inspect和Spy++需要自己安装一下


下面是Application对象的主要方法

举例,启动一个微信应用,通过进程号连接, 进程号就是在任务管理器里详细信息看到的PID








3.WindowSpecification






我们要获取窗口,一个窗口都是一个 WindowSpecification 对象,可以通过Application对象的window()方法获取,参数可以是title、classname或者best_match等,这都可以在inspect.exe上看到,不过 需要注意的是inspect看到的Name其实对应的是window()的title参数


WindowSpecification对象常用的方法如下


举个栗子







4.元素控件






一个窗口里一般都会有各种各样的元素,比如说 按钮 (Button)、 编辑栏 (Edit)、 树状视图 (Tree View)、 复选框 (CheckBox)、 对话框 (Dialog)、 工具栏 (Toolbar)、 状态栏 (StatusBar)、 列表框 ListBox )、 窗格 (Pane)、 菜单 (Menu)、 菜单栏 MenuItem )、 静态内容 (Static)、 工具提示 (ToolTips)、 列表控件 (ListView)、 单选框 RadioButton )、 组合框 (ComboBox)、 选项卡控件 (TabControl)、 组框 (GroupBox)、 弹出菜单 (PopupMenu)、 (Header)等


因为控件类型太多了不能一个一个学习,但是它们都有一个 element_info 的属性,访问之后会返回一个继承于 ElementInfo 的对象(UIAElementInfo或HwndElementInfo),比较重要的属性或方法如下

这些元素除了有 element_info 可以获取一些元素的主要信息,它们还都被包装成一个Wrapper,所以也可以学一下 BaseWrapper 的常用方法和属性。其实 BaseWrapper 的方法基本上都是对 ElementInfo 进一步包装,我只列出部分方法,如下表

说明一下,每个控件元素都有对应的Wrapper,所以上面的方法也不一定都用,需要根据实际情况进行测试区分。另外,比较有用的 click_input() type_keys() 这两个方法分别用于操作鼠标和键盘(输入),下面我会单独拿出来说一下







鼠标操作






鼠标点击肯定离不开点击的位置,桌面就是一个坐标,左上角为坐标原点,往右是X轴正向,往下是Y轴正向。pywinauto提供了一个mouse模块用于鼠标操作,最核心的方法是 _perform_click_input() ,不过它是一个私有方法,我们调用的是基于它的封装方法,如下表

参数说明:

  • 参数button 的默认值都是“left”,即鼠标左键,可选值有left、right、middle、move、wheel、x

  • 参数coords 的默认值都是元组(0, 0),元组里的两个整数分别是X、Y轴的值

  • 参数wheel_dist 表示滚动的距离,大于0是向上滚动,小于0是向下滑动


举个栗子







键盘操作






键盘操作主要是按下键盘上的按键,相关方法在keyboard模块,最最主要的是 send_keys() 方法,第一个参数 keys 就是我们需要按下的按键,其他参数比如说with_spaces、with_tabs、with_newlines、turn_off_numlock、set_foreground、vk_packet,一看就知道作用,而且都是布尔值,此处不进行举例


pywinauto支持的完整的按键可以在官方文档查看,https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html


下面我列举出的是一些比较常用的按键

说明:

  • 使用按键时需要搭配大括号,比如说按下回车键是 '{ENTER}' (是字符串)

  • 在Windows平台默认是发送虚拟按键的,以 VK_ 开头的按键,都是指虚拟按钮,如果不想使用虚拟按钮可以把 VK_ 前缀去掉,把send_keys()的 vk_packet 参数改为 False 即可


单个按键按下抬起还不够,往往需要组合键,这时候就需要修饰符了,在大括号里可以使用 down up 控制按键什么时候按下和抬起,如果后面加上数字,表示按下多少次

当然,很多时候使用 down up 修饰感觉不够简洁,所以pywinauto还提供了简化写法,使用 + 代替 {VK_SHIFT} ,使用 ^ 代替 {VK_CONTROL} ,使用 % 代替 {VK_MENU}

如果不想按下按钮,纯属想要输入纯字符串,那就需要取消转义了,注意修饰符和按钮的写法是不一样的








请到「今天看啥」查看全文