在当今这个自动化时代,Python以其简洁、易读、高效的特点,逐渐成为了编程界的主流语言。而在Python的自动化领域,pywinauto这个库提供了一种简便的方式去控制Windows应用程序的自动化操作。本文将为你揭开pywinauto的神秘面纱,让你轻松掌握Python自动化的一大利器。
pywinauto是一个基于Python的Windows应用程序自动化控制库。它支持模拟鼠标和键盘操作,实现对Windows应用程序的自动化控制。通过使用pywinauto,你可以轻松实现自动登录Windows系统、自动打开和关闭应用程序、自动填写表单等操作。
可以使用pip命令在命令行中安装pywinauto库:
pip install pywinauto
在我们控制软件的初始步骤中,我们需要启动一个Windows软件,每个软件(进程)都是一个Application对象。当实例化Application对象时,可以传入backend参数,包括win32(默认)和uia选项。如果不清楚要测试的软件属于哪种框架,可以使用Inspect(对应uia)和Spy++(对应win32)来查看。选择显示信息更全面的那个工具。
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()
我们可以通过使用Application对象的window()方法获取窗口,每个窗口都是一个WindowSpecification对象。我们可以通过传递title、classname或best_match等参数来获取这些WindowSpecification对象,这些参数可以在inspect.exe上进行查看。需要注意的是,在inspect上看到的Name实际上是window()标题参数的对应名称。
from pywinauto import Application
#打开微信
app = Application(backend="uia").start(r'D:\software\WeChat\WeChat.exe')
#获取微信窗口
dlg = app.window(title= "微信")
#微信窗口最大化
dlg.maximize()
通常,一个窗口中含有各种各样的元素,例如按钮、编辑栏、树状视图、复选框、对话框、工具栏、状态栏、列表框、窗格、菜单、菜单项、静态内容、工具提示、列表控件、单选框、组合框、选项卡控件、组框、弹出菜单、头部等。
在访问这些控件之后,会返回一个继承自 ElementInfo 的对象(UIAElementInfo 或 HwndElementInfo)。
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。
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是向下滑动。
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
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的优势,提高工作效率,实现更高级别的自动化控制。