Python UI自动化实战教程:四步搞定Windows记事本与计算器自动化
2026/8/24 9:10:52 网站建设 项目流程

Python UI自动化实战教程:四步搞定Windows记事本与计算器自动化

【免费下载链接】Python-UIAutomation-for-Windows🐍Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern UI(Metro UI), Qt, IE, Firefox, Chrome ...项目地址: https://gitcode.com/gh_mirrors/py/Python-UIAutomation-for-Windows

你有没有反复开过记事本、输入同样的内容、再保存一遍?这类重复劳动正是Windows桌面自动化的用武之地,而Python UI自动化库uiautomation就是干这个的:几行代码就能定位并操作任意Windows应用里的控件。整条上手路线会用记事本和计算器两个应用带你一步步跑通。

📦 一条命令装好uiautomation,顺手拿到控件调试器

安装只需要一条命令:

pip install uiautomation # 想直接运行 demos/ 下的示例脚本,先把仓库克隆下来 git clone https://gitcode.com/gh_mirrors/py/Python-UIAutomation-for-Windows

装完后C:\PythonXX\Scripts\里会多出一个 automation.py 脚本,它相当于一个控件调试器:automation.py -h查看全部参数,automation.py -t 0 -n则把当前活动窗口的控件连同属性、支持的模式一并打印出来。写脚本前用它确认一下目标控件长什么样,能省掉很多试错时间。有个版本坑要避开:Python 3.7.6 和 3.8.1 上 comtypes 存在兼容问题,建议直接用最新稳定版。

🎯 三行代码定位控件:先搞懂控件定位

uiautomation 的底层是微软的 UIAutomation:屏幕上每个窗口都是控件树里的一棵子树,你要做的第一件事,就是从这棵树里把想操作的控件找出来。缩小范围的常见手段有:按控件类型选(WindowControl、EditControl、ButtonControl 等)、按属性匹配(Name、ClassName、AutomationId)、正则匹配窗口标题(RegexName),以及最自由的Compare=lambda自定义判断函数。两个参数值得记住:searchDepth=1表示只翻这一层树,定位更快;searchFromControl把搜索范围限定在某个控件内部。

找到控件后,操作靠"模式(Pattern)"完成——每种控件类型能做的事是固定的:按钮支持 InvokePattern(就是点一下触发),编辑框支持 ValuePattern(直接读写文本),窗口支持 WindowPattern(关闭、最小化)。各控件类型与模式的对应关系可以参考这张表:

以找到记事本的编辑框并写入文本为例,三行就够:

window = auto.WindowControl(searchDepth=1, ClassName='Notepad', RegexName='.* - 记事本') edit = auto.EditControl(searchFromControl=window) edit.GetValuePattern().SetValue('hi 你好')

第一行只在桌面顶层窗口里找记事本(英文系统标题换成.* - Notepad,示例脚本会按系统语言自动选择),第二行把范围缩进窗口内部取编辑框,第三行通过 ValuePattern 写文本。如果控件还没出现,用auto.WaitForExist(window, 3)等它三秒内出现;WaitForDisappear则用来等窗口关闭,这对判断"操作是否生效"很实用。

📝 实战·记事本自动化脚本:从启动到智能关闭

完整的记事本自动化脚本在 demos/automation_notepad.py 里,主线就是按顺序做四件事:启动应用、找到窗口、往编辑框写内容,再做一些菜单、截图、关闭的进阶动作。

subprocess.Popen('notepad.exe', shell=True) window = auto.WindowControl(searchDepth=1, ClassName='Notepad', RegexName='.* - 记事本') window.SetActive() edit = auto.EditControl(searchFromControl=window) edit.Click(waitTime=0) edit.SendKeys('下面开始演示') window.CaptureToImage('Notepad.png')

SendKeys 模拟的是真实键盘输入,支持{Ctrl}a这类组合键和{Enter 3}这种按键次数写法,比 SetValue 更像人手在打字。打完字后window.CaptureToImage('Notepad.png')顺手给窗口截了张图留证。

进阶部分更值得抄进自己的脚本:想改字体,先window.MenuItemControl(Name='格式(O)').Click()打开格式菜单,再点"字体"项,在弹出的字体对话框里用ListItemControl(Name='微软雅黑')选中字体即可;想关闭窗口,window.GetWindowPattern().Close()会触发保存对话框,脚本用window.ButtonControl(Compare=lambda control, depth: '不保存' in control.Name)点击"不保存"按钮——用 lambda 匹配按钮文案,中英文系统下都能点中。

🧮 计算器自动化:按算式自动点按钮

记事本的控件结构跨版本很稳定,计算器却不行:XP 上窗口 ClassName 是SciCalc,Win 7/8 是CalcFrame且按钮靠数字编号识别,Win 10 换成了 Modern UI 窗口、按钮都是英文名。所以 demos/automation_calculator.py 这个示例在入口处先读系统版本,进入对应分支:

osVersion = sys.getwindowsversion().major if osVersion < 6: CalcOnXP() elif osVersion == 6: CalcOnWindows7And8() elif osVersion >= 10: CalcOnWindows10()

三个分支各自完成"找到计算器窗口、把按钮收进一张 字符→按钮 的映射表",之后计算逻辑就收敛到同一个 Calc 函数里:把算式去掉空格,逐字符取出对应按钮点击,最后用{Ctrl}c把结果显示框的内容复制到剪贴板,再用auto.GetClipboardText()读出来。也就是说,计算器自动化本质上是"把算式翻译成按钮点击"——映射表建好之后,同一套代码可以跑任意表达式。

🛠️ 脚本出错速查表

症状处理方式
列不出控件、属性读不到以管理员身份运行 Python(Win 7 及以上尤其注意)
控件找不到控件属性可能已变化,用automation.py -t 0 -n重新识别活动窗口的控件
卡住、响应超时调大TIME_OUT_SECOND全局超时,或调用SetGlobalSearchTimeout设置
定位偏移、截图错位显示器 DPI 设为 100%;Win10 x64 且 DPI 非 100% 时必须用 64 位 Python

⚙️ 让脚本更稳,并扩展到更多应用

稳定性上建议把握三点。定位和操作包在 try/except 里,捕获auto.ControlNotFoundError后回退到更大的搜索范围(比如把searchFromControl换成更大的searchDepth),避免一个控件没找到整个脚本崩掉。搜索范围能限就限:searchDepth定得越小,树走得越少;找过的控件存进变量复用,不要每次操作都重新遍历。waitTime控制两个动作之间的停顿,批量快速操作时压到 0.05 甚至 0,慢应用再放宽。

写法打通之后,同样的定位方式能套到别的 Windows 应用上。办公自动化场景里,可以用它读取和写入 Word 文档正文;GitHub Desktop 这类第三方应用只要实现了 UIAutomation Provider(Qt、Electron、WPF 等都算),定位方法原样可用:

批量文件处理则是把文件系统操作和 UI 操作拼在一起,能做出批量重命名、内容提取之类的任务;demos/pretty_print_dir.py 就是同一思路的练习:用树遍历把整个目录结构渲染成文本。

继续深入:示例库与API文档

想多玩几个场景,直接翻 demos/ 目录:记事本与计算器是两个主案例;demos/automation_devicemanager.py 演示遍历并展开设备管理器整棵设备树;demos/clipboard_test.py 和 demos/hotkey_test.py 覆盖剪贴板与热键;demos/get_qq_group_members.py 展示了从一个真实 IM 应用里收集群成员资料。API 细节看官方API文档,2.0 与旧版的接口差异记录在 API changes,更完整的中文介绍在 readme_cn.md。这些就是继续学习 uiautomation 教程的入口。

跑完记事本和计算器之后,骨架已经在了:定位控件、按模式操作、等待并确认结果。下一步只是把目标应用换掉——找到它的窗口,用 automation.py 确认控件属性,再把上面的代码逐行替换。先从简单应用起步,比一上来就追复杂场景更稳,脚本也会越写越顺。

【免费下载链接】Python-UIAutomation-for-Windows🐍Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern UI(Metro UI), Qt, IE, Firefox, Chrome ...项目地址: https://gitcode.com/gh_mirrors/py/Python-UIAutomation-for-Windows

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询