【Pywinauto庫】0. Pywinauto Windows GUI 自動化指南

概述

Pywinauto 是一個用于自動化 Windows GUI 應用程序的 Python 庫,適用于自動化測試、數據錄入和其他重復性桌面操作。

快速參考表

方面方法/屬性示例說明
安裝pip install pywinauto安裝庫
后端選擇Application(backend="uia")Application(backend="win32")根據應用程序技術選擇后端
啟動應用app.start("notepad.exe")啟動應用程序
連接應用app.connect(process=進程ID)連接到已運行的應用程序
定位窗口app.window(title='無標題 - 記事本')通過標題定位窗口
打印控件標識dlg.print_control_identifiers()打印窗口中所有控件的標識信息
定位控件dlg.child_window(title="確定", control_type="Button")使用多種方式定位控件
操作控件.click_input(), .type_keys("文本")點擊控件、輸入文本
鼠標操作pywinauto.mouse.click(button='left', coords=(x, y))模擬鼠標點擊
鍵盤操作pywinauto.keyboard.send_keys('{ENTER}')模擬鍵盤按鍵
菜單操作dlg.menu_select("文件->另存為")選擇菜單項

詳細使用指南

1. 安裝與導入
pip install pywinauto
from pywinauto import Application
from pywinauto import findwindows
from pywinauto import mouse, keyboard
2. 后端選擇策略
  • “uia”:適用于現代應用程序(WPF, WinForms, Qt5, 瀏覽器應用等)
  • “win32”:適用于傳統舊式應用程序(MFC, VB6, VCL 等)

選擇建議:使用 Inspect.exe(uia)或 Spy++(win32)查看控件屬性,選擇顯示信息更全面的對應后端。

3. 啟動或連接應用程序

啟動新應用:

app = Application(backend="uia").start("notepad.exe")

連接已運行應用:

# 通過進程ID連接
app = Application(backend="uia").connect(process=1234)# 通過窗口標題連接
app = Application(backend="uia").connect(title="無標題 - 記事本")# 通過窗口句柄連接
handle = findwindows.find_windows(title='無標題 - 記事本', class_name='Notepad')[0]
app = Application().connect(handle=handle)
4. 定位窗口和控件

窗口定位:

dlg = app.window(title='無標題 - 記事本')
dlg = app.window(title_re=".*記事本.*")  # 模糊匹配

控件識別:

dlg.print_control_identifiers()  # 關鍵步驟:查看所有控件結構

精確定位控件:

# 多條件組合定位
ok_button = dlg.child_window(title="確定", auto_id="Button1", control_type="Button")# 按控件類型定位
edit_box = dlg.child_window(control_type="Edit")
5. 控件操作

點擊操作:

ok_button.click_input()  # 推薦:模擬鼠標點擊
ok_button.click()        # 替代方式

文本輸入:

edit_box.type_keys("你好,pywinauto!{ENTER}")  # 支持特殊按鍵
edit_box.set_text("直接設置文本")              # 直接設置文本

菜單操作:

dlg.menu_select("文件->另存為")

列表/組合框操作:

combo_box = dlg.child_window(control_type="ComboBox")
combo_box.select("選項一")
6. 等待機制
# 等待窗口存在
dlg.wait("exists", timeout=10)# 等待控件可見
ok_button.wait("visible", timeout=5)# 判斷控件存在性
if ok_button.exists():print("控件存在")
7. 完整示例:操作記事本
from pywinauto import Application
from pywinauto.timings import wait_until# 啟動記事本
app = Application(backend="uia").start("notepad.exe")# 連接到記事本窗口
dlg = app.window(title='無標題 - 記事本')# 輸入文字
edit = dlg.child_window(control_type="Edit")
edit.type_keys("Hello, Pywinauto!{ENTER}This is a new line.")# 菜單操作
dlg.menu_select("文件->另存為")# 操作保存對話框
save_dlg = app.window(title="另存為")
save_dlg.wait("exists", timeout=5)
filename_edit = save_dlg.child_window(control_type="Edit")
filename_edit.type_keys("my_document.txt")
save_button = save_dlg.child_window(title="保存", control_type="Button")
save_button.click_input()# 等待和清理
wait_until(10, 0.5, lambda: dlg.exists())
# app.kill()  # 強制結束進程
8. 推薦工具
  • Inspect.exe(Windows SDK):uia 后端最佳調試工具,支持跟蹤焦點和光標
  • Spy++(Visual Studio):win32 后端控件屬性查看工具

?? 注意事項

  1. 控件定位:優先使用 auto_idcontrol_type 等穩定屬性組合,避免依賴易變的 title 或坐標
  2. 時機處理:使用 wait 方法替代固定的 time.sleep,確保應用程序響應
  3. 權限要求:以管理員身份運行腳本以確保進程訪問權限
  4. 兼容性:Windows 版本和應用程序更新可能影響腳本穩定性,需要定期維護

總結

Pywinauto 提供了強大的 Windows GUI 自動化能力,通過合理選擇后端、精確控件定位和適當的等待機制,可以構建穩定可靠的自動化腳本。多使用 Inspect 等工具進行控件分析,能夠顯著提高開發效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921967.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CStringArray 和 CStringList

CStringArray 和 CStringList 都是 MFC 中用于管理字符串集合的類,但它們的內部數據結構和適用場景有顯著差異,選擇時需根據具體操作需求決定。以下從核心區別、功能對比和適用場景三個方面詳細說明:一、核心區別:數據結構決定特性…

2025版基于springboot的企業考勤管理系統

博主介紹:java高級開發,從事互聯網行業六年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了多年的設計程序開發,開發過上千套設計程序,沒有什么華麗的語言,只有實…

設計模式(C++)詳解—單例模式(1)

<摘要> 單例模式是創建型設計模式中最經典且應用最廣泛的設計模式之一&#xff0c;它確保一個類只有一個實例并提供全局訪問點。本文從歷史背景和核心概念出發&#xff0c;詳細闡述了單例模式的產生背景和演進歷程&#xff0c;深入剖析了其在資源管理、狀態一致性和訪問控…

將GitHub遠程倉庫修改為ssh

8 將GitHub遠程倉庫修改為ssh 文章目錄8 將GitHub遠程倉庫修改為ssh1 創建本地的ssh密鑰2 設置GitHub密鑰3 將本地庫鏈接到遠程倉庫很多時候在使用GitHub的遠程鏈接使用的是http的格式&#xff0c;但是這個格式并不好&#xff0c;尤其是在代碼上傳的時候&#xff0c;因此需要采…

【OEC-Turbo】網心云 OEC-Turbo 刷機 Armbian 系統教程

前言 大量網心云 OEC 及 OEC-Turbo 設備流入二手市場&#xff08;如海鮮市場&#xff09;&#xff0c;價格低至 70-100 元。相比同配置的拾光塢 N3&#xff08;約 380 元&#xff09;&#xff0c;OEC-Turbo 僅需一個零頭&#xff0c;性價比極高。這些“礦渣”設備外觀與玩客云…

25.線程概念和控制(二)

一、線程周邊問題1.線程的優點創建一個新線程的代價要比創建一個新進程小得多。線程占用的資源要比進程少很多。能充分利用多處理器的可并行數量。在等待慢速I/O操作結束的同時&#xff0c;程序可執行其他的計算任務。計算密集型應用&#xff0c;為了能在多處理器系統上運行&am…

【CVPR2023】奔跑而非行走:追求更高FLOPS以實現更快神經網絡

文章目錄一、論文信息二、論文概要三、實驗動機四、創新之處五、實驗分析六、核心代碼注釋版本七、實驗總結一、論文信息 論文題目&#xff1a;Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks中文題目&#xff1a;奔跑而非行走&#xff1a;追求更高FLOPS…

JVM(二)--- 類加載子系統

目錄 前言 一、類加載過程 1. loading階段 2. Linking階段 2.1 驗證 2.2 準備 2.3 解析 3. Initialization階段 二、類加載器 1. 類加載器的分類 2. 用戶自定義類加載器 三、雙親委派機制 四、其他知識點 前言 JVM的內存結構如圖所示&#xff1a; 一、類加載過程…

Docker 容器的使用

1.容器的基本信息[roothost1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ac8245b5b08 img-layers-test "python /app/app.py" 45 hours ago Exited (0) 45 hour…

LLMs之Hallucinate:《Why Language Models Hallucinate》的翻譯與解讀

LLMs之Hallucinate&#xff1a;《Why Language Models Hallucinate》的翻譯與解讀 導讀&#xff1a;該論文深入分析了語言模型中幻覺現象的成因&#xff0c;認為幻覺源于預訓練階段的統計壓力和后訓練階段評估體系對猜測行為的獎勵。論文提出了通過修改評估方法&#xff0c;使其…

Spring Cloud @RefreshScope 作用是什么?

RefreshScope 是 Spring Cloud 中的一個重要注解&#xff0c;主要作用如下&#xff1a; 主要功能動態刷新配置 使 Bean 能夠在運行時動態刷新配置屬性當配置中心的配置發生變化時&#xff0c;無需重啟應用即可生效作用域管理 為 Bean 創建一個特殊的作用域 refresh標記的 Bean …

Flutter SDK 安裝與國內鏡像配置全流程(Windows / macOS / Linux)

這是一份面向國內網絡環境的 Flutter 從零到可運行指引&#xff1a;覆蓋 SDK 安裝、平臺依賴準備、國內鏡像配置&#xff08;PUB_HOSTED_URL、FLUTTER_STORAGE_BASE_URL&#xff09;、Android 側 Gradle 倉庫加速&#xff0c;以及 Java/Gradle 版本兼容的關鍵坑位與排查思路。文…

【Java】NIO 簡單介紹

簡介 從 Java 1.4 版本開始引入的一個新的 I/O API&#xff0c;可以替代標準的 Java I/O。提供了與標準 I/O 不同的工作方式&#xff0c;核心是 通道&#xff08;Channel&#xff09;、緩沖區&#xff08;Buffer&#xff09; 和 選擇器&#xff08;Selector&#xff09;。支持非…

Java爬蟲獲取京東item_get_app數據的實戰指南

一、引言京東開放平臺提供了豐富的API接口&#xff0c;其中item_get_app接口可用于獲取商品的詳細信息。這些數據對于市場分析、價格監控、商品推薦等場景具有重要價值。本文將詳細介紹如何使用Java編寫爬蟲&#xff0c;通過調用京東開放平臺的item_get_app接口獲取商品詳情數據…

Vue3源碼reactivity響應式篇之批量更新

概述 在vue3響應式系統設計中&#xff0c;批量更新是優化性能的核心機制之一。當短時間內頻繁多次修改響應式數據時&#xff0c;批量更新可以避免頻繁觸發訂閱者的更新操作&#xff0c;將這些更新操作合并為一次&#xff0c;從而減少不必要的計算和DOM操作。 批量更新也是利用鏈…

AI 模型訓練過程中參數用BF16轉向FP16的原因

大模型訓練從 FP16 轉向 BF16 是一個關鍵的技術演進&#xff0c;其核心原因在于 BF16 在動態范圍和精度之間取得了更優的平衡&#xff0c;從而極大地提升了訓練&#xff08;尤其是大模型訓練&#xff09;的穩定性和有效性。 1. 背景 為什么需要半精度浮點數 (FP16)&#xff1f;…

python網絡爬取個人學習指南-(五)

**************************************************************************************************************author&#xff1a;keyinfodate&#xff1a;2025-09-09 23:50title&#xff1a;網絡信息爬取之多聯級標題內容點擊****************************************…

RAG - 檢索增強生成

第一部分&#xff1a;RAG 詳解一、RAG 是什么&#xff1f;RAG&#xff08;Retrieval-Augmented Generation&#xff0c;檢索增強生成&#xff09;是一種將信息檢索&#xff08;或知識檢索&#xff09;與大語言模型&#xff08;LLM&#xff09;的生成能力相結合的技術框架。它的…

大數據畢業設計選題推薦-基于大數據的分化型甲狀腺癌復發數據可視化分析系統-Spark-Hadoop-Bigdata

?作者主頁&#xff1a;IT研究室? 個人簡介&#xff1a;曾從事計算機專業培訓教學&#xff0c;擅長Java、Python、微信小程序、Golang、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦??? Java項目 Python…

Spring Bean掃描

好的&#xff0c;沒有問題。基于我們之前討論的內容&#xff0c;這是一篇關于 Spring Bean 掃描問題的深度解析博客。Spring Bean掃描作者&#xff1a;Gz | 發布時間&#xff1a;2025年9月9日&#x1f3af; Spring如何找到你的Bean&#xff1f; 首先要理解原理。Spring的組件掃…