pywinauto 简介

pywinauto 是一个基于 Python 的跨平台 GUI 自动化库(主要支持 Windows),能够模拟用户对窗口、控件的操作(如点击、输入、拖拽等),并支持自动化测试脚本的编写。其核心优势包括:

  • 跨控件操作:支持按钮、文本框、列表框等多种控件类型的识别与操作。
  • 多后端兼容:提供 win32uia 两种后端技术,分别适用于传统 Win32 应用和现代 WPF、Qt 应用。
  • 开发友好:通过 print_control_identifiers() 可快速获取窗口内所有控件的标识符,便于调试。

环境准备与安装

安装 pywinauto

通过 pip 直接安装:

pip install pywinauto

依赖库 pywin32 会一同安装。若需处理图像识别或剪贴板操作,可额外安装 pillowpyperclip

工具准备

  • Inspect.exe:Windows SDK 内置工具,用于检查控件属性并确定适用的后端(win32uia)。
  • Spy++:用于查看窗口句柄和类名,辅助定位控件。

基础用法与代码示例

启动应用程序

from pywinauto.application import Application

# 启动记事本(默认使用 uia 后端)
app = Application(backend="uia").start("notepad.exe")

连接已运行的应用程序

# 通过进程 ID 或窗口标题连接
app = Application(backend="uia").connect(title="无标题 - 记事本")

查找窗口与控件

# 获取主窗口
notepad = app.window(title="无标题 - 记事本")

# 打印所有控件标识符
notepad.print_control_identifiers()

# 定位编辑框并输入文本
notepad.Edit.type_keys("Hello, pywinauto!")

模拟用户操作

# 点击菜单项
notepad.menu_select("文件->保存")

# 在保存对话框中输入文件名
save_dialog = app.window(title="另存为")
save_dialog.Edit.type_keys("example.txt")
save_dialog["保存"].click()

高级应用

动态控件处理

对于动态生成的控件(如浏览器标签页),可通过 child_window() 结合属性筛选:

# 定位 Chrome 地址栏并输入 URL
chrome = Application(backend="uia").connect(title_re=".*Chrome.*")
address_bar = chrome.child_window(auto_id="addressEdit", control_type="Edit")
address_bar.type_keys("https://github.com\n")

图像识别与坐标操作

当控件无法通过属性定位时,可借助坐标点击:

from pywinauto import mouse

# 点击屏幕坐标 (x=500, y=300)
mouse.click(coords=(500, 300))

多窗口协同操作

# 操作计算器并复制结果
calc = Application(backend="uia").start("calc.exe")
calc_window = calc.window(title="计算器")
calc_window.Button5.click()  # 点击数字5
calc_window.PlusButton.click()
calc_window.Button3.click()
calc_window.EqualButton.click()

官方示例库:GitHub - pywinauto/pywinauto
中文社区文档:看云 - pywinauto 中文指南

Logo

一站式 AI 云服务平台

更多推荐