您的位置:首页 > 编程语言 > Python开发

python自动化工具之pywinauto(一)

2017-10-07 16:14 549 查看

python自动化工具之pywinauto(一)

python自动化工具之pywinauto一
pywinauto使用
一 判断程序的backend

二确定自动化入口点

三连接到进程

四 选择菜单项

pywinauto使用

首先,导入这个模块

from pywinauto.application import Application


(一) 判断程序的backend

注意,首先需要判断你要进行的程序是用什么语言写的,在实例化的时候会有区别,主要是判断backend是什么。





那么如何判断程序的backend是’win32’还是’uia’呢?官方文档中推荐使用spy++和inspect来检查。有人专门整理了一下,放在github上了https://github.com/blackrosezy/gui-inspect-tool

spy++咱们之前讲过。接下来将将如何使用inspect来判断backend的类别。

Switch Inspect.exe into UIA mode (using MS UI Automation). If it can show more controls and their properties than Spy++, probably the "uia" backend is your choice.


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

下图为点击window文件夹的结果,inspect中显示了相关的信息,如下图所示。说明backend为uia。




再来看点击 屏幕录像专家程序的结果




inspect中显示拒绝访问,说明屏幕录像专家程序的backend应该是win32。

(二)确定自动化入口点

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

主要有两种对象可以建立这种入口点——Application() , Desktop().

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

Desktop的作用范围可以跨进程。主要用于像win10的计算器这样包含多个进程的程序。这种目前比较少见。使用方法见entry-points-for-automation

(三)连接到进程

建立好入口后,我们需要连接到进程中。这里有两种方法:

- 重新开启一个进程。使用Application对象的start()方法

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


这里的cmd_line参数就是你使用命令行启动程序的命令语句。所以可以很方便的实现带输入参数的程序启动。

启动屏幕录像专家,可以使用如下代码:

app = Application().start(r"D:\Program Files (x86)\tlxsoft\屏幕录像专家 共享版 V2017\屏录专家.exe")


连接到已有的进程。使用Application对象的connect()方法。这个方法对已有进程的绑定非常灵活。

1.使用进程ID (PID)进行绑定。

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


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




2.使用窗口句柄绑定

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


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




3.使用程序路径绑定

app = Application().connect(path=r"D:\Program Files (x86)\tlxsoft\屏幕录像专家 共享版 V2017\屏录专家.exe")


4.使用标题、类型等匹配

app = Application().connect(title_re="屏幕录像专家.*", class_name="TMainForm")


第1、2种方法通用性不强,每次运行ID和窗口句柄都可能不一样。第3种方法最直接简单,而第4种方法灵活性最强。

(四) 选择菜单项

个人感觉pywinauto最方便的地方之一就是能够很轻易的操作菜单,而且对于多级菜单毫无压力。




下面介绍两种方法来操作它:

- 使用menu_select()函数进行选择

要从屏幕录像专家程序的菜单选中转换工具->EXE/LXE转成MP4。只需要在python中加入如下语句:

dlg_spec = app.window(title='屏幕录像专家 V2017')
dlg_spec.menu_select(r"转换工具->EXE/LXE转成MP4")


使用快捷键进行选择

可以看到,菜单的每个选项都对应着快捷键,可以使用组合的快捷键直接访问我们需要的选项。

使用type_keys()函数,这里需要的快捷键是Alt+T+P:

dlg_spec = app.window(title='屏幕录像专家 V2017')
dlg_spec.type_keys('%TP')


对于一些特殊符号的快捷键,对应的码表如下:

SHIFT                            +
CTRL                             ^
ALT                               %
空格键                            {SPACE}

BACKSPACE                        {BACKSPACE}、{BS}   or   {BKSP}
BREAK                            {BREAK}
CAPS   LOCK                      {CAPSLOCK}
DEL   or   DELETE                {DELETE}   or   {DEL}
DOWN   ARROW                     {DOWN}
END                              {END}
ENTER                            {ENTER}   or   ~
ESC                              {ESC}
HELP                             {HELP}
HOME                             {HOME}
INS   or   INSERT                {INSERT}   or   {INS}
LEFT   ARROW                     {LEFT}
NUM   LOCK                       {NUMLOCK}
PAGE   DOWN                      {PGDN}
PAGE   UP                        {PGUP}
PRINT   SCREEN                   {PRTSC}
RIGHT   ARROW                    {RIGHT}
SCROLL   LOCK                    {SCROLLLOCK}
TAB                              {TAB}
UP   ARROW                       {UP}
+                                {ADD}
-                                {SUBTRACT}
*                                {MULTIPLY}
/                                {DIVIDE}


上述操作结束后,EXE转MP4的插件窗口就弹出来了。



接下来就是如何操作这个窗口中的控件了,且听下回分解,哈哈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息