最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3使用pywinauto如何檢測(cè)需要獲取程序元素

 更新時(shí)間:2025年02月26日 09:16:33   作者:諸神緘默不語(yǔ)  
這篇文章主要為大家詳細(xì)介紹了Python3使用pywinauto如何檢測(cè)需要獲取程序元素,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下

以微信為例。其實(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)寫那一部分。

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è)通常用于托盤通知的窗口,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ù)為True應(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)文章

最新評(píng)論

庆阳市| 冷水江市| 西华县| 梅河口市| 荥经县| 丹巴县| 新竹县| 苍南县| 遂宁市| 从化市| 屏东县| 大埔区| 唐河县| 牙克石市| 牙克石市| 随州市| 彰化市| 成武县| 陇川县| 名山县| 城固县| 克山县| 五常市| 揭阳市| 三明市| 霍邱县| 铅山县| 包头市| 辽源市| 土默特左旗| 宜宾县| 黄平县| 松滋市| 平和县| 北京市| 略阳县| 兴文县| 新营市| 南靖县| 潼南县| 长治市|