Python3使用pywinauto如何檢測(cè)需要獲取程序元素
以微信為例。其實(shí)我是想找個(gè)可以用pywinauto操作全流程的例子但是沒(méi)找到,所以就先操作定位窗口和查看控件兩部分了。
因?yàn)槲乙婚_(kāi)始是想用pywinauto操作關(guān)注微信公眾號(hào)界面的,發(fā)現(xiàn)顯示不出來(lái)……也就是說(shuō)面對(duì)這種情況比較合適的解決方案是找別的工具,呃編程就是這樣的,你要欣然接受新工具才對(duì)。
我下次遇到用pywinauto對(duì)程序內(nèi)部進(jìn)行操作的更具體的工具我再來(lái)寫(xiě)那一部分。
1. 安裝包
pip install pywinauto
2. 檢測(cè)需要如何獲取程序元素的過(guò)程
1. 定位微信窗口
首先需要看微信這個(gè)進(jìn)程打開(kāi)了多少個(gè)窗口(這個(gè)title就是任務(wù)管理欄顯示的進(jìn)程標(biāo)題,可以用正則表達(dá)式。如果是不會(huì)在任務(wù)管理欄顯示,使用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是一個(gè)通常用于托盤(pán)通知的窗口,Chrome_WidgetWin_0看起來(lái)像是一個(gè)基于 Chromium 引擎的窗口(可能是通過(guò) Webview 或者嵌入式瀏覽器來(lái)實(shí)現(xiàn)的)。所以應(yīng)該選擇 Window 2,即 Class Name: WeChatMainWndForPC,這是微信的主界面窗口。
(↑這是我問(wèn)ChatGPT得知的,所以如果你不確定的話,直接也問(wèn)ChatGPT就vans。直接設(shè)置visible_only參數(shù)為T(mén)rue應(yīng)該也沒(méi)問(wèn)題)
如果進(jìn)程不在任務(wù)管理欄顯示,通過(guò)psutil獲取所有進(jìn)程的標(biāo)題來(lái)找到所需進(jìn)程
這個(gè)當(dāng)然首先假設(shè)你這個(gè)進(jìn)程是有標(biāo)題的,而且你能猜到這標(biāo)題是什么意思……
代碼是:
import psutil for proc in psutil.process_iter(): try: print(proc.name()) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): pass
2. 連接微信窗口并查看其中的可操作項(xiàng)
代碼中的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ù)還可以通過(guò)標(biāo)題作為參數(shù),如果用正則表達(dá)式的話參數(shù)就是title_re
dlg也可以用top_window()函數(shù)來(lái)獲取。還有一個(gè)函數(shù)是windows(),這里面第一個(gè)也是這個(gè)指定窗口。
print_control_identifiers()參數(shù)默認(rèn)應(yīng)該是打印所有內(nèi)容,可以設(shè)置depth參數(shù)來(lái)設(shè)置打印多少層。
需要注意的是如果直接運(yùn)行這個(gè)代碼會(huì)導(dǎo)致運(yùn)行慢而且打印過(guò)多,反正我是沒(méi)打印完,因?yàn)樗鼤?huì)把所有聊天記錄什么的全都打印出來(lái)。
但是我在關(guān)注公眾號(hào)界面(也就是我本來(lái)想實(shí)現(xiàn)自動(dòng)化操作的界面)打印控件又打印不出東西,打印出來(lái)是這樣的:
Control Identifiers:
Dialog - '微信' (L0, T-2, R1920, B1020)
['Dialog', '微信', '微信Dialog']
child_window(title="微信", control_type="Window")
到此這篇關(guān)于Python3使用pywinauto如何檢測(cè)需要獲取程序元素的文章就介紹到這了,更多相關(guān)Python3 pywinauto獲取程序元素內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用PyCrypto實(shí)現(xiàn)AES加密功能示例
這篇文章主要介紹了Python使用PyCrypto實(shí)現(xiàn)AES加密功能,結(jié)合具體實(shí)例形式分析了PyCrypto實(shí)現(xiàn)AES加密的操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-05-05詳解Tensorflow不同版本要求與CUDA及CUDNN版本對(duì)應(yīng)關(guān)系
這篇文章主要介紹了詳解Tensorflow不同版本要求與CUDA及CUDNN版本對(duì)應(yīng)關(guān)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08python中關(guān)于CIFAR10數(shù)據(jù)集的使用
這篇文章主要介紹了python中關(guān)于CIFAR10數(shù)據(jù)集的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02pygame學(xué)習(xí)筆記之設(shè)置字體及顯示中文
游戲界面中文字也是非常常見(jiàn)的元素之一,pygame專(zhuān)門(mén)提供了Font模塊來(lái)支持文字的顯示,下面這篇文章主要給大家介紹了關(guān)于pygame學(xué)習(xí)筆記之設(shè)置字體及顯示中文的相關(guān)資料,需要的朋友可以參考下2022-07-07使用Python實(shí)現(xiàn)廣告點(diǎn)擊率預(yù)測(cè)
廣告點(diǎn)擊率是指有多少用戶點(diǎn)擊了您的廣告與有多少用戶查看了您的廣告的比率,本文主要為大家介紹了如何使用Python實(shí)現(xiàn)廣告點(diǎn)擊率預(yù)測(cè),感興趣的小伙伴可以了解下2023-10-10在python中將list分段并保存為array類(lèi)型的方法
今天小編就為大家分享一篇在python中將list分段并保存為array類(lèi)型的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python實(shí)現(xiàn)程序的單一實(shí)例用法分析
這篇文章主要介紹了Python實(shí)現(xiàn)程序的單一實(shí)例用法,較為詳細(xì)的分析了Python窗口的相關(guān)操作技巧,需要的朋友可以參考下2015-06-06一篇文章徹底搞懂Python魔法參數(shù)args和kwargs(通俗易懂)
這篇文章主要介紹了Python中的*args和**kwargs,它們分別是可變位置參數(shù)和可變關(guān)鍵字參數(shù),文章通過(guò)實(shí)際例子展示了如何在函數(shù)、裝飾器等場(chǎng)景中使用*args和**kwargs,幫助讀者理解并掌握這些靈活的參數(shù)處理方式,需要的朋友可以參考下2025-02-02