Python3使用pywinauto如何檢測需要獲取程序元素
以微信為例。其實我是想找個可以用pywinauto操作全流程的例子但是沒找到,所以就先操作定位窗口和查看控件兩部分了。
因為我一開始是想用pywinauto操作關注微信公眾號界面的,發(fā)現(xiàn)顯示不出來……也就是說面對這種情況比較合適的解決方案是找別的工具,呃編程就是這樣的,你要欣然接受新工具才對。
我下次遇到用pywinauto對程序內部進行操作的更具體的工具我再來寫那一部分。
1. 安裝包
pip install pywinauto
2. 檢測需要如何獲取程序元素的過程
1. 定位微信窗口
首先需要看微信這個進程打開了多少個窗口(這個title就是任務管理欄顯示的進程標題,可以用正則表達式。如果是不會在任務管理欄顯示,使用1.5節(jié)的代碼):
代碼:
from pywinauto import findwindows # 查找所有匹配的窗口 windows = findwindows.find_elements(title='微信', backend='win32', visible_only=False) # 打印所有匹配的窗口信息 for i, window in enumerate(windows): print(f"Window {i+1}:") print(f" Title: {window.name}") print(f" Class Name: {window.class_name}") print(f" Handle: {window.handle}") print(f" Process ID: {window.process_id}") print(f" Rectangle: {window.rectangle}") print("-" * 50)
輸出是:
Window 1:
Title: 微信
Class Name: TrayNotifyWnd
Handle: omit
Process ID: omit
Rectangle: (L1334, T848, R1667, B1021)
--------------------------------------------------
Window 2:
Title: 微信
Class Name: WeChatMainWndForPC
Handle: omit
Process ID: omit
Rectangle: (L0, T-2, R1920, B1020)
--------------------------------------------------
Window 3:
Title: 微信
Class Name: Chrome_WidgetWin_0
Handle: omit
Process ID: omit
Rectangle: (L0, T0, R1920, B1020)
--------------------------------------------------
TrayNotifyWnd是一個通常用于托盤通知的窗口,Chrome_WidgetWin_0看起來像是一個基于 Chromium 引擎的窗口(可能是通過 Webview 或者嵌入式瀏覽器來實現(xiàn)的)。所以應該選擇 Window 2,即 Class Name: WeChatMainWndForPC,這是微信的主界面窗口。
(↑這是我問ChatGPT得知的,所以如果你不確定的話,直接也問ChatGPT就vans。直接設置visible_only參數(shù)為True應該也沒問題)
如果進程不在任務管理欄顯示,通過psutil獲取所有進程的標題來找到所需進程
這個當然首先假設你這個進程是有標題的,而且你能猜到這標題是什么意思……
代碼是:
import psutil for proc in psutil.process_iter(): try: print(proc.name()) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): pass
2. 連接微信窗口并查看其中的可操作項
代碼中的omit就是Window 2的Handle值:
from pywinauto import Application app=Application(backend="uia").connect(handle=omit) dlg=app.window(title="微信") dlg.print_control_identifiers()
backend還可以換成win32
connect()函數(shù)還可以通過標題作為參數(shù),如果用正則表達式的話參數(shù)就是title_re
dlg也可以用top_window()函數(shù)來獲取。還有一個函數(shù)是windows(),這里面第一個也是這個指定窗口。
print_control_identifiers()參數(shù)默認應該是打印所有內容,可以設置depth參數(shù)來設置打印多少層。
需要注意的是如果直接運行這個代碼會導致運行慢而且打印過多,反正我是沒打印完,因為它會把所有聊天記錄什么的全都打印出來。
但是我在關注公眾號界面(也就是我本來想實現(xiàn)自動化操作的界面)打印控件又打印不出東西,打印出來是這樣的:
Control Identifiers:
Dialog - '微信' (L0, T-2, R1920, B1020)
['Dialog', '微信', '微信Dialog']
child_window(title="微信", control_type="Window")
到此這篇關于Python3使用pywinauto如何檢測需要獲取程序元素的文章就介紹到這了,更多相關Python3 pywinauto獲取程序元素內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python使用PyCrypto實現(xiàn)AES加密功能示例
這篇文章主要介紹了Python使用PyCrypto實現(xiàn)AES加密功能,結合具體實例形式分析了PyCrypto實現(xiàn)AES加密的操作步驟與相關實現(xiàn)技巧,需要的朋友可以參考下2017-05-05詳解Tensorflow不同版本要求與CUDA及CUDNN版本對應關系
這篇文章主要介紹了詳解Tensorflow不同版本要求與CUDA及CUDNN版本對應關系,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08一篇文章徹底搞懂Python魔法參數(shù)args和kwargs(通俗易懂)
這篇文章主要介紹了Python中的*args和**kwargs,它們分別是可變位置參數(shù)和可變關鍵字參數(shù),文章通過實際例子展示了如何在函數(shù)、裝飾器等場景中使用*args和**kwargs,幫助讀者理解并掌握這些靈活的參數(shù)處理方式,需要的朋友可以參考下2025-02-02