专栏名称: AirPython
分享 Python 自动化及爬虫、数据分析实战干货,欢迎关注。
目录
相关文章推荐
保险一哥  ·  一大批保险机构接上DeepSeek,你们家行 ... ·  昨天  
木木说卡  ·  速度!抓紧提额,冲飞猪大招 ·  2 天前  
每日豆瓣  ·  偷偷养胡子被妈妈发现了 ·  3 天前  
51好读  ›  专栏  ›  AirPython

Pywinauto,一款 Win 自动化利器!

AirPython  · 公众号  ·  · 2024-06-06 22:57

正文

作者:冰冷的希望

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 控件和大多数旧的 Windows 应用程序

  • 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是向下滑动


举个栗子









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