【Windows自动化】基于pywinauto模块实现win自动化
在很多情况下,需要我们重复操作Windows上的程序。如果采用人工的方法确实可以达到这个目的,但是如果是需要昼夜长此以往的操作,显然人工的方式有点力不从心,毕竟人不是机器。我们可以借助python来实现这个功能,python提供了大量功能强大的库供我们使用。pywinauto可以帮我们实现windows自动化,当然也有很多模块可以辅助进行windows自动化测试,比如time、datetime、l
前言
在很多情况下,需要我们重复操作Windows上的程序。如果采用人工的方法确实可以达到这个目的,但是如果是需要昼夜长此以往的操作,显然人工的方式有点力不从心,毕竟人不是机器。我们可以借助python来实现这个功能,python提供了大量功能强大的库供我们使用。pywinauto可以帮我们实现windows自动化,当然也有很多模块可以辅助进行windows自动化测试,比如time、datetime、loggging、configparser、pyautogui等。
本文主要介绍使用pywinauto来实现windows自动化。使用pip install pywinauto命令进行下载,下载完成有“successfully installed”即可。
一、使用步骤
1.引入库
代码如下(示例):
from pywinauto.application import Application
2.打开指定程序
这里以打开xshell应用为例,实现简单的自动化操作。首先使用inspect这个小软件来确定软件的类型,而且还可以作元素定位,一般来说常用的类型都是’uia’格式。如果使用inspect不能获取窗口的结构,那么该软件很有可能时win32的,这时就需要修改为‘win32’,代码示例如下:
app = Application(backend='uia').start('exe的路径')
正常情况下,使用该代码就可以启动应用了。需要注意的是,自动化测试过程中需要保持电脑屏幕处于不锁屏状态,同时不要打断自动化操作流程。这里举个简单的例子,自动打开XMind应用。代码示例如下:
app = Application(backend='uia').start(r"C:\Program Files\XMind\XMind.exe")
此时可以看到已经成功打开Xmind应用,然后使用Inspect这个应用,可以查看到XMind的窗口标题为“XMinf”,我们可以用类名定位到该窗口。
3.控件元素定位、窗口操作、控件操作
定位到该窗口后可以使用print_control_identifiers()这个方法将窗口所有控件信息打印出来,方法里面可以添加参数depth为打印的深度,不添加则默认打印所有。方法里还可以添加filename参数指定文件名,这主要是将窗口控件信息输出到文本文件中,不添加该参数则默认打印到控制台。
dlg = app["XMind"]
dlg.print_control_identifiers()
执行该段代码之后,控制台输出所有控件信息,如下:
| | Static - 'XMind' (L508, T199, R553, B219)
| | ['XMindStatic', 'Static', 'XMind2', 'Static0', 'Static1']
| | child_window(title="XMind", control_type="Text")
| |
| | ListBox - '' (L497, T241, R684, B331)
| | ['XMindListBox', 'ListBox', 'XMindListBox0', 'XMindListBox1', 'ListBox0', 'ListBox1']
| | |
| | | ListItem - '' (L497, T241, R684, B271)
| | | ['ListItem', 'XMindListItem', 'ListItem0', 'ListItem1', 'XMindListItem0', 'XMindListItem1']
| | | |
| | | | Hyperlink - '最近' (L497, T241, R684, B271)
| | | | ['Hyperlink', '最近Hyperlink', '最近', 'Hyperlink0', 'Hyperlink1']
| | | | child_window(title="最近", control_type="Hyperlink")
| | | | |
| | | | | Image - '' (L509, T246, R529, B266)
| | | | | ['Image2', 'XMindImage', 'XMindImage0', 'XMindImage1']
| | |
| | | ListItem - '' (L497, T271, R684, B301)
| | | ['ListItem2', 'XMindListItem2']
| | | |
| | | | Hyperlink - '模版' (L497, T271, R684, B301)
| | | | ['Hyperlink2', '模版Hyperlink', '模版']
| | | | child_window(title="模版", control_type="Hyperlink")
| | | | |
| | | | | Image - '' (L509, T276, R529, B296)
| | | | | ['Image3', 'XMindImage2']
| | |
| | | ListItem - '' (L497, T301, R684, B331)
| | | ['ListItem3', 'XMindListItem3']
| | | |
此时,我们就可以定位元素了。以定位到“模板”这个按钮为例,可以使用类名进行定位,也可以使用child_window()进行定位。在刚才打印出来的元素信息中找到“模板”,这里使用child_window()来进行定位。定位到该元素之后,使用click_input()方法点击该按钮。代码示例如下:
modelbutton = dlg.child_window(title="模版", control_type="Hyperlink")
modelbutton.click_input()
此时重新运行脚本,可以看到自动打开XMind应用,并且自动点击了【模板】按钮。
完整代码如下:
from pywinauto.application import Application
app = Application(backend='uia').start(r"C:\Program Files\XMind\XMind.exe")
dlg = app["XMind"]
#dlg.print_control_identifiers()
modelbutton = dlg.child_window(title="模版", control_type="Hyperlink")
modelbutton.click_input()
总结
本文主要简单介绍一下使用pywinauto来做Windows自动化的方法,目前仅是打开Xmind应用,并做元素定位,然后进行点击等操作。
更多推荐




所有评论(0)