
Python UI自动化实战教程四步搞定Windows记事本与计算器自动化【免费下载链接】Python-UIAutomation-for-WindowsPython 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以及最自由的Comparelambda自定义判断函数。两个参数值得记住searchDepth1表示只翻这一层树定位更快searchFromControl把搜索范围限定在某个控件内部。找到控件后操作靠模式Pattern完成——每种控件类型能做的事是固定的按钮支持 InvokePattern就是点一下触发编辑框支持 ValuePattern直接读写文本窗口支持 WindowPattern关闭、最小化。各控件类型与模式的对应关系可以参考这张表以找到记事本的编辑框并写入文本为例三行就够window auto.WindowControl(searchDepth1, ClassNameNotepad, RegexName.* - 记事本) edit auto.EditControl(searchFromControlwindow) edit.GetValuePattern().SetValue(hi 你好)第一行只在桌面顶层窗口里找记事本英文系统标题换成.* - Notepad示例脚本会按系统语言自动选择第二行把范围缩进窗口内部取编辑框第三行通过 ValuePattern 写文本。如果控件还没出现用auto.WaitForExist(window, 3)等它三秒内出现WaitForDisappear则用来等窗口关闭这对判断操作是否生效很实用。 实战·记事本自动化脚本从启动到智能关闭完整的记事本自动化脚本在 demos/automation_notepad.py 里主线就是按顺序做四件事启动应用、找到窗口、往编辑框写内容再做一些菜单、截图、关闭的进阶动作。subprocess.Popen(notepad.exe, shellTrue) window auto.WindowControl(searchDepth1, ClassNameNotepad, RegexName.* - 记事本) window.SetActive() edit auto.EditControl(searchFromControlwindow) edit.Click(waitTime0) 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(Comparelambda control, depth: 不保存 in control.Name)点击不保存按钮——用 lambda 匹配按钮文案中英文系统下都能点中。 计算器自动化按算式自动点按钮记事本的控件结构跨版本很稳定计算器却不行XP 上窗口 ClassName 是SciCalcWin 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()读出来。也就是说计算器自动化本质上是把算式翻译成按钮点击——映射表建好之后同一套代码可以跑任意表达式。️ 脚本出错速查表症状处理方式列不出控件、属性读不到以管理员身份运行 PythonWin 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 ProviderQt、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-WindowsPython 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),仅供参考