在日常工作中,我们经常需要处理一些桌面端的重复性操作:比如每天定时打开某个财务软件导出报表,自动登录打卡工具,或者批量处理一些没有提供 API 接口的旧款 ERP 系统。如果全靠人工手动点击,不仅效率低下,还容易出错。我们之前有介绍了一种方式,是采用模拟鼠标和键盘的方式,见文章PyAutoGUI 全面入门:用 Python 控制鼠标、键盘和屏幕,解放双手 。这次我们换一种库,也是能达到同样的效果,就是Python 里的 pywinauto 库,它可以轻松实现 Windows GUI 的自动化控制,极大地释放你的双手,提高效率。
pywinauto 是一个强大的 Python 库,专门用于自动化 Windows 操作系统的图形界面。它通过模拟鼠标点击和键盘输入,可以直接与 Windows 窗口、按钮、菜单、编辑框等控件进行交互,他仅适用于windows系统。
在使用这个库时,有两个核心概念需要掌握:
win32):适用于较老的程序(如记事本、MFC 软件)。uia):适用于较新的程序(如 WPF、Qt、浏览器、Windows 10/11 原生应用)。执行以下命令,进行安装:
pip install pywinauto这里我列举一个简单示例:自动打开 Windows 自带的“记事本”,输入一段文字,并自动保存到桌面。
import timefrom pywinauto.application import Application#启动记事本程序, 采用uia后端,因为Win10/11的记事本基于新框架app = Application(backend="uia").start("notepad.exe")#选中窗口 这里的 "无标题 - 记事本" 是窗口的标题名称dlg = app.window(title_re=".*记事本.*")#重点:打印当前窗口的所有中文字样和控件 IDdlg.print_control_identifiers()#输入内容 type_keys 会模拟键盘敲击dlg.child_window(auto_id="15", control_type="Edit").type_keys( "你好 各位\r\n这里是 小海代码人生。", with_spaces=True)#模拟快捷键 Ctrl+S 调出保存弹窗dlg.type_keys('^s')#在保存对话框中输入文件名并点击确认save_dlg = dlg.child_window(title="另存为", control_type="Window")# 等待窗口出现(解决 exists 为 False 的问题)save_dlg.wait('visible', timeout=5)#输入文件名save_dlg.child_window(auto_id="1001", control_type="Edit").set_edit_text("test_auto.txt")#点击保存按钮save_dlg.child_window(auto_id="1", control_type="Button").click()#使用close()模拟点击右上角的 Xdlg.close()print("自动化操作已完成!")启动程序后,你会发现电脑像被“远程操控”了一样,具体可以看视频:
这种方式比 pyautogui更高级的地方在于:它是基于控件 ID 或名称定位的。即使你移动了窗口位置,或者窗口大小发生了改变,pywinauto 依然能精准找到那个按钮。
pywinauto 是 Windows 桌面自动化非常好的一个库,不但精准度高,功能全面,而且适应性也非常的方,从古老的 Win32 应用到现代的 WPF/UWP 应用都能搞定。
如果你在工作中面临大量重复的桌面软件操作,不妨试试用 pywinauto 写一段脚本。配合 Python 的定时任务,完全可以实现全自动化的办公流程。