当前位置:   article > 正文

Python自动化:pywinauto的简单使用_from pywinauto.application import application

from pywinauto.application import application

 

 引言

在当今这个自动化时代,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对象的主要方法

 举例:微信自动登录
  1. from pywinauto import Application
  2. #打开微信
  3. app = Application(backend="uia").start(r'D:\software\WeChat\WeChat.exe')
  4. #获取微信窗口
  5. dlg = app.window(title= "微信")
  6. #微信窗口中,找到“进入微信”按钮
  7. loginButton = dlg.child_window(title="进入微信", control_type="Button")
  8. #点击按钮
  9. loginButton.click_input()
WindowSpecification对象

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

WindowSpecification对象的主要方法 

举例:微信最大化窗口显示 
  1. from pywinauto import Application
  2. #打开微信
  3. app = Application(backend="uia").start(r'D:\software\WeChat\WeChat.exe')
  4. #获取微信窗口
  5. dlg = app.window(title= "微信")
  6. #微信窗口最大化
  7. dlg.maximize()
 元素控件

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

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

ElementInfo 一些重要的属性或方法

举例:获取微信左边导航栏按钮信息 
  1. from pywinauto.application import Application
  2. #连接微信
  3. app = Application(backend="uia").connect(title = "微信")
  4. #获取微信窗口
  5. dlg = app.window(title= "微信")
  6. list_data = dlg.child_window(title="导航").children(control_type = "Button")
  7. for item in list_data:
  8. print(type(item))
  9. element_info = item.element_info
  10. print(type(element_info))
  11. print("window_text:", )
  12. print("rich_text:", element_info.rich_text)
  13. print("name:", element_info.name)

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

BaseWrapper一些重要的属性或方法
 举例:点击微信左边“设置及其他”按钮
  1. from pywinauto.application import Application
  2. #连接微信
  3. app = Application(backend="uia").connect(title = "微信")
  4. #获取微信窗口
  5. dlg = app.window(title= "微信")
  6. #获取"设置及其他"按钮
  7. settingButton = dlg.child_window(title="设置及其他",control_type = "Button")
  8. #点击按钮
  9. 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
  1. from pywinauto import Application, mouse
  2. #连接微信
  3. app = Application(backend="uia").connect(title = "微信")
  4. #获取微信窗口
  5. dlg = app.window(title= "微信")
  6. #获取会话窗口
  7. list_data = dlg.child_window(title="会话", control_type="List")
  8. #返回元素的位置以及宽高
  9. rectangle = list_data.element_info.rectangle
  10. #获取元素对应的中间坐标(x,y)
  11. x = int((rectangle.left + rectangle.right) / 2)
  12. y = int((rectangle.top + rectangle.bottom) / 2)
  13. #鼠标在中间位置向下滚动 500 正负代表上下
  14. 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,它们可以用来定制操作某些功能。官方文档

 键盘操作主要数值

举例:微信搜索用户,输入文字后全选删除 
  1. from pywinauto import Application, mouse
  2. from pywinauto.keyboard import SendKeys
  3. import time
  4. #连接微信
  5. app = Application(backend="uia").connect(title = "微信")
  6. #获取微信窗口
  7. dlg = app.window(title= "微信")
  8. #定位搜索框
  9. search = dlg.child_window(title="搜索", control_type="Edit")
  10. #点击定位
  11. search.click_input()
  12. #搜索框输入“1微尘”
  13. SendKeys("1微尘")
  14. #暂停2秒
  15. time.sleep(2)
  16. #按住ctrl键,再按下a键,松开ctrl键
  17. SendKeys("{VK_CONTROL down} a {VK_CONTROL up}")
  18. #暂停2秒
  19. time.sleep(2)
  20. #backspace 删除内容
  21. SendKeys("{BACKSPACE}")

总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/706461
推荐阅读
相关标签
  

闽ICP备14008679号