pywinauto
pywinauto是一组用于自动化Microsoft Windows GUI的python模块。 最简单的是,它允许您将鼠标和键盘操作发送到窗口对话框和控件,来完成我们自动化操作。
官方文档:http://pywinauto.github.io/
安装:
方法一:
通过pip进行安装:pip install pywinauto
方法二:
https://github.com/pywinauto/pywinauto/releases中下载最新的pywinauto,解压并允许 python setup.py install 进行安装
验证是否安装成功:
方法一:
直接打开python,进行导入对应的库
方法二:
通过pip进行查看 pip list
小试牛刀
在练习之前,需要先了解一个内容,目前pywinauto支持2种查看客户端控件内容
-
Win32 API (
backend="win32"
) - 现在的默认backend- MFC, VB6, VCL, 简单的WinForms控件和大多数旧的遗留应用程序
-
MS UI Automation (
backend="uia"
)- WinForms, WPF, Store apps, Qt5, 浏览器
注意: Chrome在启动之前需要
--force-renderer-accessibility
cmd标志。 由于comtypes Python库限制,不支持自定义属性和控件。
如果不确定自己的软件测试时哪一种,我们先用默认的,如果运行过程中会报提示, UserWarning: 32-bit application should be automated using 32-bit Python (you use 64-bit Python) UserWarning)
检测控件软件:
我们可以通过以下三种软件进行检测应用的控件或窗口,来进行操作
1、Spy++ 包含在MS Visual Studio发行版(甚至是Express或Community)中,可通过“开始”菜单访问。 它使用Win32 API。 这意味着如果Spy ++能够显示所有控件,那么“win32”`backend就是你需要的。 AutoIt Window Info工具是一种Spy ++克隆。
2、Inspect.exe 是Microsoft创建的另一个很棒的工具。 它包含在Windows SDK中,因此可以在x64 Windows上的以下位置找到它:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64
如果以上路径不存在,请自行下载安装:https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/
3、ViewWizard软件,可以非常方便的检测到我们需要用到的控件类型。
安装也安装完成了,查看也查看过了,那么先进行启动我们的客户端进行测试吧(这里通过的是记事本)
# coding:utf-8 # 导入pywinauto库 from pywinauto import application # 直接启动记事本 app = application.Application().start('notepad.exe')
运行指定程序
分别拿电脑自带程序和电脑非自带程序进行模拟打开。
1、windows自带程序:
这里需要start后面的参数,可以通过上一篇介绍的工具进行获取,也可以通过鼠标右键--属性查看
# coding:utf-8 from pywinauto import application # 打开记事本 app = application.Application().start('notepad.exe')
2、非windows自带程序:
这里我们如果按照上面的方法进行查看的话会报错误,这里我们拿电脑上安装的QQ来测试
发现提示找不到指定的文件
这里把QQ的文件地址全部都拷贝上试试看呢?
发现这里是直接打开的,因为程序运行后是从环境变量中查找的,我们可以通过把程序添加到环境变量中直接调用
这个时候再次运行发现就已经可以成功的打开了QQ
# coding:utf-8 from pywinauto import application # 打开QQ app = application.Application().start('QQScLauncher.exe')
启动已打开程序
前面的例子我们会发现都是程序没有运行起来的,那么想要启动已经运行起来的程序应该怎么做?
方法一:
通过进程号的形式进行打开
方法二:
通过窗口句柄的形式打开。问题来了?怎么查看窗口句柄?
这个时候需要通过前面说的viewWizard工具进行查看,通过下图可以看到窗口的句柄为134242
方法三:
通过标题的方式打开
# coding:utf-8 import pywinauto # 通过窗口打开 app = pywinauto.Desktop() win = app['QQ'] print(win)
可以发现通过句柄的形式也可以指定这个软件。然后进行对软件操作