python自动化工具之pywinauto(三)_自动化工具之三:pywinauto

本文介绍了Python自动化工具pywinauto的安装、使用,特别是如何判断和连接程序的backend,如Win32 API和MS UI Automation。详细讲解了如何通过Application对象的start()和connect()方法连接进程,并展示了如何操作窗口,包括菜单选择、控件交互、文本输入等。还提供了一些实用技巧,如使用inspect工具判断backend,处理中文字符,以及模拟快捷键操作。
摘要由CSDN通过智能技术生成

Python自动化工具:pywinauto

一、pywinauto的安装

(1)安装命令

pip install -U pywinauto/pip3 install -U pywinauto

(2)验证是否安装成功

from pywinauto.application import Application

二、pywinauto的使用

1.1介绍程序的backend

首先要判断程序是用什么语言写的?在实例化会有区别,主要是判断程序的backend?

程序的backend大致有两种:

(1)Win32 API(backend=“win32”)

(2)MS UI Automation(backend=“uia”)

1.2如何判断程序的backend?

1.3如何使用inspect来判断backend的类别

将inspect左上角的下拉列表中切换到“UI Automation”,然后鼠标点一下你需要测试的程序窗体,inspect就会显示相关信息。

inspect中显示了相关的信息,如下图所示。说明backend为uia。

如果inspect中显示拒绝访问,说明该程序的backend应该是win32;

这里主要是限制自动化控制进程的范围。如一个程序有多个实例,自动化控制一个实例,而保证其他实例(进程)不受影响。

主要有两种对象可以建立这种入口点——

-->Application()

-->Desktop()

Application的作用范围是一个进程,如一般的桌面应用程序都为此类。

建立好入口后,需要连接进程;

3.1连接进程的方法

(1)使用Application对象的start()方法

start(self, cmd_line, timeout=app_start_timeout) #instance method:

cmd_line参数就是你使用命令行启动程序的命令语句(程序路径)

例如:

app = Application().start(r"F:\python\auto_tools\Terminal_部标_2014-01-12-11.exe")

(2)使用Application对象的connect()方法

-->使用进程ID (PID)进行绑定;

app = Application().connect(process=15860)

进程的PID可以在任务管理器中查看;

-->使用窗口句柄绑定

app = Application().connect(handle=0x00030F9A)

窗口句柄可以在Spy++中查看 :

-->使用程序路径绑定

app=Application().connect(path=r"F:\python\auto_tools\Terminal_部标_2014-01-12-11.exe")

-->使用标题、类型等匹配

app = Application().connect(title_re="Terminal_部标_2014-01-12.*", class_name="#32770 (对话框)")

三、使用pywinauto操作窗口

1.启动程序

(1)application.Application().start('路径+程序名/程序名')

app = application.Application().start('notepad.exe')

例子:

myapp = Application().start("notepad")

myapp.__setattr__("name","notepad")

错误用法:

from pywinauto importapplication

app= application.Application.start('notepad.exe')

原因:因为start方法必须是针对应用实例的方法, 忘记了实例化操作, ()符号;

(2)MenuSelect方法自动检索Notepad上的菜单选项

(3)decode(‘gb2312’)方法,python3使用encode('gb2312')方法是把中文强制转换为unicode编码,对于非英文的操作系统都是要转换的;

例如:点击“帮助->关于记事本”操作;

app.Notepad.MenuSelect('帮助->关于记事本'.decode('gb2312'))

附注:抛出异常

① AttributeError: 'str' object has no attribute 'decode'

主要原因:Python2和Python3在字符串编码上的区别(必须将字节字符串解码后才能),python在bytes和str两种类型转换,所需要的函数依次是encode(),decode()

解决方案:str通过encode()方法可以编码为指定的bytes

反过来,当从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法。反之,则使用encode()方法即可!正确用法如下:

app.Notepad.MenuSelect('帮助->关于记事本'.encode('gb2312').decode('gb2312'))

例如,对一个写字板app应用中的窗口,在英文操作系统中,其标题是“untitled - Notepad”

可以使用以下两种方式调用该窗体

app.Untitled

app

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值