资料来源:airpython
作者:明星安哥
1.前言
你好,我是眼科的!
有人评论说,作为WinAppDriver的替代方案,“pywinauto”也可以完美地完成PC端的自动化。
2.简介
Pywinauto是完全由Python创建的模块,可用于在Windows中自动执行GUI应用程序。
它还支持鼠标和键盘操作,并帮助您在元素控制树的复杂界面中完成自动化任务。
项目地址:
支持的应用程序有两个主要类别:
Win32 API由MFC、VB6、VCL、simple WinForms controls and most of the old legacy appsms ui automation组成,包括WinForms、WPF和Store apps
Win32 API的backend是“Win32”
Ms ui自动化的backend是“UIA”
3.元素控制
与WinAppDriver一样,在编写自动脚本之前,必须获取元素控件的各种属性值
有两种方法可以获取元素控件。
窗口内置方法检查工具
窗口对象中内置的两种方法都打印当前页面的元素控件树
# windows对象具有打印表单所有元素控件的内置方法
#方法1:
表单对象。print_control_identifiers()
#方法2
表单对象。dump_tree()
常用的检查工具有两种:In和Spy
4.实战
实战中,首先安装从属软件包pywinauto
#安装相依性
Pip3 install pywinauto
接下来,为了说明整个实施过程,让我们看一下上面的一句话。
打开4-1微信客户端
首先,检查通过PC端微信backend为“UIA”的检查工具应用的backend属性值
然后实例化Application类
最后,使用内置于对象中的函数创建应用程序对象
Import pywinauto
From import Application
#导入应用程序对象
#请从三种方法中选择一种
#方法1:应用进程PID(连接)
App=application (back end=' UIA ')。connect (process=PID)
#方法2:应用完整路径(连接)
App=application (back end=' UIA ')。connect(path=' d : program files(x 86) Tencent)
#方法3:打开应用程序(打开)
App=application (back end=' UIA ')。请参阅start(' d : program files(x86) Tencent wechat)
请注意,导入应用程序对象有三种方法,可以根据需要使用
导入4-2表单对象
通过检查工具获取表单的属性列表,然后使用应用对象表单属性获取微信主页上的表单对象
实施代码如下:
From import SetFocus
#导入窗口对象
通过# title和ClassName导入表单对象
=(标题=u '微信',class_name='WeChatMainWndForPC ')
.set_focus()
切换到4-3聊天列表
获取左侧聊天切换按钮,获取坐标位置,通过点击模拟转到聊天列表页面
From pywinauto import mouse
Def _ _ get _ element _ postion (self、element) :
获取“”元素的中心点位置“”
#元素坐标
element _ position=element . rectangle()
#计算中心点位置
Center_position=(in elemen)/2)、
In elemen)/2)
Return center_position
Def start(储存格f) :
# 1,获取左侧[聊天]切换元素
Chat _ list _ element=。child _ window (title='聊天',control_type='Button ')
# 2、点击进入聊天列表。
Mou(button='left ',
Coords=(chat_list_element)
进入4-4聊天页面,输入内容并发送
获取“文档聊天助手”元素,单击转至聊天页面,找到输入框元素,使用内置方法输入内容,最后使用键盘模拟按“Enter”键发送消息
From pywinauto import mouse
# 3、点击“文件传输助手”进入聊天页面
File _ helper _ element=。child _ window (title='文件传输助手',control_type='ListItem ')
Mou(button='left ',
Coords=(file_helper_element)
# 4,输入框元素导入,输入模拟
Edit _ element=。child _ window (title=r '输入',control_type='Edit ')
休眠(2)
#输入内容
Edi(《明星安提瓜》)
#使用键盘回车,即发送
Send_keys('{ENTER} ')
释放4-5资源
作业完成后,可以调用应用对象的“kill()”函数来关闭进程并释放资源。
Def teardown(self):
" "资源释放 " "
#终止进程,释放资源
()
5.最后,
在上面的示例中,使用pywinauto完成了自动发送简单消息的步骤。
Pywinauto和WinAppDriver都可以很好地实现PC端自动化,但由于WinAppDriver支持Appium,因此可能更有利于脚本语法的简单性。