Python自动化:pywinauto的简单使用

 

 引言

在当今这个自动化时代,Python以其简洁、易读、高效的特点,逐渐成为了编程界的主流语言。而在Python的自动化领域,pywinauto这个库提供了一种简便的方式去控制Windows应用程序的自动化操作。本文将为你揭开pywinauto的神秘面纱,让你轻松掌握Python自动化的一大利器。

pywinauto简介

pywinauto是一个基于Python的Windows应用程序自动化控制库。它支持模拟鼠标和键盘操作,实现对Windows应用程序的自动化控制。通过使用pywinauto,你可以轻松实现自动登录Windows系统、自动打开和关闭应用程序、自动填写表单等操作。

pywinauto安装与使用

安装pywinauto

可以使用pip命令在命令行中安装pywinauto库:

pip install pywinauto
pywinauto基本使用方法 
Application对象

在我们控制软件的初始步骤中,我们需要启动一个Windows软件,每个软件(进程)都是一个Application对象。当实例化Application对象时,可以传入backend参数,包括win32(默认)和uia选项。如果不清楚要测试的软件属于哪种框架,可以使用Inspect(对应uia)和Spy++(对应win32)来查看。选择显示信息更全面的那个工具。

Application对象的主要方法

 举例:微信自动登录
from pywinauto import Application

#打开微信
app = Application(backend="uia").start(r'D:\software\WeChat\WeChat.exe')
#获取微信窗口
dlg = app.window(title= "微信")
#微信窗口中,找到“进入微信”按钮
loginButton = dlg.child_window(title="进入微信", control_type="Button")
#点击按钮
loginButton.click_input()
WindowSpecification对象

我们可以通过使用Application对象的window()方法获取窗口,每个窗口都是一个WindowSpecification对象。我们可以通过传递title、classname或best_match等参数来获取这些WindowSpecification对象,这些参数可以在inspect.exe上进行查看。需要注意的是,在inspect上看到的Name实际上是window()标题参数的对应名称。

WindowSpecification对象的主要方法 

举例:微信最大化窗口显示 
from pywinauto import Application

#打开微信
app = Application(backend="uia").start(r'D:\software\WeChat\WeChat.exe')
#获取微信窗口
dlg = app.window(title= "微信")
#微信窗口最大化
dlg.maximize()
 元素控件

通常,一个窗口中含有各种各样的元素,例如按钮、编辑栏、树状视图、复选框、对话框、工具栏、状态栏、列表框、窗格、菜单、菜单项、静态内容、工具提示、列表控件、单选框、组合框、选项卡控件、组框、弹出菜单、头部等。

在访问这些控件之后,会返回一个继承自 ElementInfo 的对象(UIAElementInfo 或 HwndElementInfo)。

ElementInfo 一些重要的属性或方法

举例:获取微信左边导航栏按钮信息 
from pywinauto.application import Application

#连接微信
app = Application(backend="uia").connect(title = "微信")
#获取微信窗口
dlg = app.window(title= "微信")

list_data = dlg.child_window(title="导航").children(control_type = "Button")

for item in list_data:
    print(type(item))
    element_info = item.element_info
    print(type(element_info))
    print("window_text:", )
    print("rich_text:", element_info.rich_text)
    print("name:", element_info.name)

除了element_info可以获取元素的主要信息外,这些元素都被包装成一个Wrapper。

BaseWrapper一些重要的属性或方法
 举例:点击微信左边“设置及其他”按钮
from pywinauto.application import Application

#连接微信
app = Application(backend="uia").connect(title = "微信")
#获取微信窗口
dlg = app.window(title= "微信")
#获取"设置及其他"按钮
settingButton = dlg.child_window(title="设置及其他",control_type = "Button")
#点击按钮
settingButton.click_input()
鼠标操作

使用pywinauto进行鼠标点击操作时,必须指定点击的位置,而桌面可以作为坐标系的起点,其中左上角为原点,向右表示X轴正方向,向下表示Y轴正方向。通过pywinauto的mouse模块,可以进行鼠标操作。

鼠标操作一些重要的属性或方法

参数说明:

button 默认值“left”,即鼠标左键,可选值有left、right、middle、move、wheel。

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

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

举例:获取微信会话列表,向下滚动500
from pywinauto import Application, mouse

#连接微信
app = Application(backend="uia").connect(title = "微信")
#获取微信窗口
dlg = app.window(title= "微信")
#获取会话窗口
list_data = dlg.child_window(title="会话", control_type="List")
#返回元素的位置以及宽高
rectangle = list_data.element_info.rectangle
#获取元素对应的中间坐标(x,y)
x = int((rectangle.left + rectangle.right) / 2)
y = int((rectangle.top + rectangle.bottom) / 2)
#鼠标在中间位置向下滚动 500 正负代表上下
mouse.scroll(coords = (x,y),wheel_dist = -500)
 键盘操作

在键盘操作中,我们主要按下键盘上的按键,相关的 API 在 keyboard 模块中提供了几个方法。其中最重要的是 send_keys() 函数,它第一个参数是需按下的按键,其他参数包括 with_spaces、with_tabs、with_newlines、turn_off_numlock、set_for<unk>、vk_packet,它们可以用来定制操作某些功能。官方文档

 键盘操作主要数值

举例:微信搜索用户,输入文字后全选删除 
from pywinauto import Application, mouse
from pywinauto.keyboard import SendKeys
import time

#连接微信
app = Application(backend="uia").connect(title = "微信")
#获取微信窗口
dlg = app.window(title= "微信")
#定位搜索框
search = dlg.child_window(title="搜索", control_type="Edit")
#点击定位
search.click_input()
#搜索框输入“1微尘”
SendKeys("1微尘")
#暂停2秒
time.sleep(2)  
#按住ctrl键,再按下a键,松开ctrl键
SendKeys("{VK_CONTROL down} a {VK_CONTROL up}") 
#暂停2秒
time.sleep(2)
#backspace 删除内容
SendKeys("{BACKSPACE}") 

总结

pywinauto作为Python自动化控制库的一员,具有简单易用、功能强大的特点。通过本文的介绍,相信你已经对pywinauto有了一定的了解和认识。在未来的学习和工作中,充分发挥pywinauto的优势,提高工作效率,实现更高级别的自动化控制。

  • 51
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机网络1微尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值