分享

pywinauto,一款Win自动化利器!

 禁忌石 2024-04-26 发布于浙江




1.安装





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

一般使用pip安装就行了

pip install pywinauto

官网文档:
https://pywinauto./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对象的主要方法

pywinauto,一款Win自动化利器!

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

pywinauto,一款Win自动化利器!

pywinauto,一款Win自动化利器!






3.WindowSpecification





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

pywinauto,一款Win自动化利器!

WindowSpecification对象常用的方法如下

pywinauto,一款Win自动化利器!

举个栗子

pywinauto,一款Win自动化利器!






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),比较重要的属性或方法如下

pywinauto,一款Win自动化利器!

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

pywinauto,一款Win自动化利器!

pywinauto,一款Win自动化利器!

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






鼠标操作





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

pywinauto,一款Win自动化利器!

参数说明:

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

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

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

举个栗子

pywinauto,一款Win自动化利器!






键盘操作





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

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

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

pywinauto,一款Win自动化利器!

说明:

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

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

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

pywinauto,一款Win自动化利器!

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

pywinauto,一款Win自动化利器!

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

pywinauto,一款Win自动化利器!

转载自:
https://blog.csdn.net/qq_39147299/article/details/132409817 ,侵删

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~


点击标题可跳转
回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

告诉你更多细节干货

欢迎围观我的朋友圈

👆每天更新所想所悟

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多