pywinauto实现windows窗口自动化操作


本章主要是通过pywinauto模块实现对windows上的一些窗口应用进行自动化运行

pywinauto这几天用下来感觉很方便也很稳定,但是有些软件的title,class_name还是无法定位到,需要结合到别的模块或方法实现自动化。

主要步骤:

  • 启动应用程序
  • 连接应用程序
  • 得到应用主窗口
  • 通过pywinauto模块内的方法对程序主窗口的控件进行操作

安装

pip install pywinauto -i https://pypi.douban.com/simple  # 安装pywinauto模块 

检查工具,通过这些工具能够得到程序窗口和控件信息

  •  Inspect 是一种基于 Windows 的工具,通过该工具,您可以选择任意 UI 元素并查看元素的可访问性数据 。
https://accessibilityinsights.io/docs/en/windows/getstarted/inspect/  # inspct下载地址
  • 推荐使用spy++,有查找窗口的功能,把准星对准窗口,就能得到窗口的信息

       

一些基础的方法

from pywinauto.application import Application
import win32gui
import time

app = Application(backend='uia').start(r"d:\win_install\Nuke-12.2v2-win-x86-64-installer.exe")  # 打开程序
time.sleep(3)  # 等待程序启动
nuke_handle = win32gui.FindWindow(0,
                                  "Nuke 12.2v2 安装")  # 获取窗口句柄,单纯使用title连接程序,有时会报错,通过title和句柄连接可以避免pywinauto.findwindows.ElementNotFoundError错误
app.connect(title="QQ", handle=nuke_handle)
mainwindow = app.window(title_re="QQ", handle=nuke_handle)  # 获取程序主窗口
mainwindow.print_control_identifiers()  # 打印主窗口上的所有控件

得到的主窗口控件

窗口控件类型(包括但不限于下列)

针对这些窗口控件可以进行一些操作

# 获取控件的文本内容
print(mainwindow.child_window(title="关闭", control_type="Button").texts())

# 对窗口截图保存
pic = mainwindow.capture_as_image()
pic.save('01.png')

对菜单控件的一些操作

# 通过下标选择菜单项
menu = window['menu']
print(menu.items())#获取菜单的子菜单项
m = menu.item_by_index(1)
print(m)

# 通过路径选择菜单项
menu = window['menu']
print(menu.items())#获取菜单的子菜单项
m = menu.item_by_path("文件->新建连接...")
print(m)

# 点击菜单项
m.click_input()#点击

鼠标方法

键盘方法

写一个自动安装Nuke软件脚本

from pywinauto.application import Application
import time
import os
import win32gui
import pywinauto.keyboard as kb

# 启动安装程序程序
os.startfile(r"d:\win_install\Nuke-12.2v2-win-x86-64-installer.exe")
print("安装程序启动中,请稍等...")
for i in range(10):
    time.sleep(1)
    try:
        if win32gui.FindWindow(0, "Nuke 12.2v2 安装"):
            break
    except:
        pass
nuke_handle = win32gui.FindWindow(0, "Nuke 12.2v2 安装")
app = Application(backend="uia")
app.connect(title="Nuke 12.2v2 安装", handle=nuke_handle)
mainwindow = app.window(title="Nuke 12.2v2 安装", handle=nuke_handle)
mainwindow["下一步(&N) >"].click()
time.sleep(2)
mainwindow["我接受(&I)"].click()
time.sleep(2)
mainwindow["下一步(&N) >"].click()
time.sleep(2)
mainwindow["安装(&I)"].click()
kb.send_keys("{VK_RETURN}")  # 这里不知道怎么卡住了,改用键盘enter选择安装

print("等待安装完成")
for i in range(600):
    print(".")
    time.sleep(3)
    try:
        mainwindow["完成(&F)"].click()
        time.sleep(3)
        break
    except:
        pass
print("nuke 安装完成")
os.system("pause")

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM