使用 Python pywinauto 实现 Windows 桌面自动化
pywinauto是一个基于 Python 的跨平台 GUI 自动化库(主要支持 Windows),能够模拟用户对窗口、控件的操作(如点击、输入、拖拽等),并支持自动化测试脚本的编写。跨控件操作:支持按钮、文本框、列表框等多种控件类型的识别与操作。多后端兼容:提供win32和uia两种后端技术,分别适用于传统 Win32 应用和现代 WPF、Qt 应用。开发友好:通过可快速获取窗口内所有控件的标识
·
pywinauto 简介
pywinauto 是一个基于 Python 的跨平台 GUI 自动化库(主要支持 Windows),能够模拟用户对窗口、控件的操作(如点击、输入、拖拽等),并支持自动化测试脚本的编写。其核心优势包括:
- 跨控件操作:支持按钮、文本框、列表框等多种控件类型的识别与操作。
- 多后端兼容:提供
win32和uia两种后端技术,分别适用于传统 Win32 应用和现代 WPF、Qt 应用。 - 开发友好:通过
print_control_identifiers()可快速获取窗口内所有控件的标识符,便于调试。
环境准备与安装
安装 pywinauto
通过 pip 直接安装:
pip install pywinauto
依赖库 pywin32 会一同安装。若需处理图像识别或剪贴板操作,可额外安装 pillow 和 pyperclip。
工具准备
- Inspect.exe:Windows SDK 内置工具,用于检查控件属性并确定适用的后端(
win32或uia)。 - 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 中文指南
更多推荐




所有评论(0)