導航:首頁 > 編程語言 > python桌面句柄名稱

python桌面句柄名稱

發布時間:2022-09-12 17:10:49

1. python自動化工具:pywinauto

Pywinauto是完全由Python構建的一個模塊,可以用於自動化 Windows 上的 GUI 應用程序。同時,它支持滑鼠、鍵盤操作,在元素控制項樹較復雜的界面,可以輔助我們完成自動化操作。

我在工作中,主要是使用pywinauto來輔助做一些操作,來完成自動化測試。

先要確認本地有python環境,然後可以通過命令行安裝pywinauto:

如果你是使用ide,可以通過ide安裝,比如我習慣使用pycharm,就可以在Project Interpreter中添加pywinauto:

還有一些手動安裝的方法,但是有點繁瑣,不是很推薦,這里就不介紹了。

Pywinauto要操作應用,首先需要訪問應用,主要有兩種訪問技術。WIN32訪問技術支持MFC、VB6、VCL、簡單WinForms控制項開發的應用,MS UI Automation訪問技術支持WinForms、WPS、QT5、WPF、Store apps、browsers等開發的應用。

win32 API的backend為「 win32 」,MS UI Automation的backend為「 uia 」。

Pywinauto中使用的backend默認為win32。可使用spy++或者Inspect工具判斷backend適合選哪種。例如:如果使用py_inspect的uia模式,可見的控制項和屬性更多的話,backend可選uia,反之,backend可選win32。

這里提一下常用的分析工具:

我個人常用的是py_inspect和spy++。

多數情況下都是需要打開應用的,實現方式也很簡單:

backend參數根據實際情況選擇傳uia還是win32。

start方法其實可以傳兩個參數,除了目標應用的啟動程序地址,還可以傳一個timeout,如果不傳,默認是5s。如果你的目標程序啟動、運行都很慢,可以將timeout設置久一點。

如果要操控的應用已經處於啟動狀態,可以直接進行連接,而連接方式有多種可以選擇:

其中Windows的pid可以通過任務管理器進行查看:

但是我在實際操作的時候使用窗口句柄沒有成功過,可能是我使用姿勢不對,不過還是不推薦使用窗口句柄。

title_re參數傳遞的是應用的部分名稱,class_name可以通過py_inspect查詢到。

前面獲取的對象都是應用,但是我們實際操作的是應用窗口,這里就來介紹怎麼獲取窗口和對話框。

最常用的是通過 title定位:

如果不清楚定位工具中的title在哪個位置,顯示的是什麼,可以通過print_control_identifiers()方法將所有的title都列印出來:

通過title定位的時候需要注意一下中英文的影響,如果是中文,可能會有編碼問題,需要轉碼。

title其實只是window()方法中的一種關鍵字參數,window()方法可以接收很多中的關鍵字參數,且這些參數可以組合使用,例如這樣:

主要參數有這些:

通過top_window()也能比較容易地獲取到窗口,但是這個方法獲取的是 程序的頂級窗口,但可能不是Z-Order中的頂級窗口。所以這個方法使用的時候多調試幾次。

窗口的操作主要有最小化、最大化、恢復、關閉窗口:

控制項的定位其實和窗口的定位基本一致,不太清楚為什麼pywinauto在設計的時候會將窗口和控制項作為一類東西。

相對於前面定位窗口的window()方法,定位控制項的時候推薦使用child_window(),因為直接使用windows()的話,如果控制項不是在當前窗口的子控制項,是子子控制項,就會定位不到,而child_window()方法就不會有這個問題,當然相對的缺點就是當控制項深度太深的時候,執行這個方法會比較耗時。

child_window()方法傳遞的參數和window()是一樣的。

控制項自帶了一些操作方法:

當這些不好用的時候,比如你的控制項不支持點擊,但是你又想點擊一下,可以使用滑鼠操作的一些方法:

測試過程中可能會需要截圖作為證據,截圖的方法也比較簡單:

pywinauto也提供了鍵盤操作的方法:

pywinauto有幾個設置等待時間的方式,這里介紹一個:

這里簡單的演示一下用Wireshark自動抓包並保存:

PC端自動化測試使用到的python模塊主要有pywinauto、win32gui、pyautogui。這里介紹的p ywinauto主要使用到Application類,用於應用程序管理(打開與關閉應用等)、窗口管理(最小化、最大化、關閉窗口)、控制項操作。

pywinauto的功能其實挺豐富的,但是真正用到的其實只是其中很小的一塊,感興趣的同學可以多去官網翻一翻。

2. Python怎麼獲取不到子窗口的句柄呢,如圖,求指導,剛學習Python的小白吃,求指導

 CSDN問答為您找到Python怎麼獲取不到子窗口的句柄呢,如圖,求指導相關問題答案,如果想了解更多關於Python怎麼獲取不到子窗口的句柄呢,如圖,求指導 python 技術問題等相關問答,請訪問CSDN問答。

3. 怎麼用Python獲取Chrome的地址欄句柄

首先,假設通過Firefox()瀏覽器定向爬取CSDN首頁導航欄信息,審查元素代碼如下圖所示,在div class="menu"路徑的ul、li、a下,同時可以定位ul class="clearfix"。

代碼如下所示:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# coding=utf-8
import os
from selenium import webdriver

#PhantomJS無界面瀏覽器
##driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")

#打開火狐瀏覽器
driver = webdriver.Firefox()
url = "http://www.csdn.net/"
driver.get(url)

#xpath路徑定位導航欄
elem_dh = driver.find_elements_by_xpath("//div[@class='menu']/ul/li/a")
for elem in elem_dh:
print elem.text #獲取正文
print elem.get_attribute('href') #獲取屬性值

然後轉換成chrome瀏覽器,只需要在"C:\Program Files (x86)\Google\Chrome\Application\"路徑下放置個chromedriver.exe驅動,再進行調用即可,代碼如下所示:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# coding=utf-8
import os
from selenium import webdriver

#PhantomJS無界面瀏覽器
##driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")

#打開火狐瀏覽器
#driver = webdriver.Firefox()

#谷歌瀏覽器
chromedriver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)

#WebDriverException: Message: unknown error: session deleted because of page crash

url = "http://www.csdn.net/"
driver.get(url)

4. python pywin32 裡面操作窗體,獲取窗體裡面的數據,在函數GetDlgItem函數中,怎麼獲取第二個參數的值

不知道你解決了沒,最近正好研究python。
hwnd=win32gui.FindWindow()這個獲取窗體句柄,大概都會用;
ctrl=win32gui.FindWindowEx(hwnd,None,'窗口類名',『標題文本』)已知控制項類名或控制項名時獲取控制項句柄,這個標題文本不一定存在,所以使用None默認值獲取的是該窗口類名中第一個順位的控制項句柄。
你使用b=win32gui.GetDlgItem(edit,資源ID)最終結果是獲取的是句柄,這里的資源ID其實是spy++中的窗口ID,句柄是可變的,窗口ID是不可變的。這里似乎錯了,你這樣子大概獲取的是控制項中的子項(控制項有子項的話,比如Combox中的edit框),我猜的,沒試過。b=win32gui.GetDlgItem(hwnd,窗口ID)是已知ID下獲取某控制項句柄
如果你想獲取某個控制項的ID則ctrlid=win32gui.GetDlgCtrlID(ctrl)這是一隻某控制項句柄的情況下獲取該控制項在應用程序中的窗口ID。
如果不知控制項句柄的情況下大概可以試試spy++獲取窗口ID,把窗口ID(這個是16進制的)轉化成10進制帶進b=win32gui.GetDlgItem(hwnd,窗口ID)大概也可以得到控制項句柄。
其實就是三個函數之間的轉化
ctrl=win32gui.FindWindowEx(hwnd,None,'edit',None)控制項句柄
ctrlid=win32gui.GetDlgCtrlID(ctrl)控制項的窗口id
ctrl2=win32gui.GetDlgItem(hwnd,ctrlid)控制項句柄
print "%x" %ctrllist
print "%x" %ctrlid
print "%x" %ctrl
輸出,看一下數據與spy++是否一致。然後ctrl=ctrl2

5. Python怎麼控制窗口

控制窗口是一個很復雜的過程,必須要請專業的人員來幫助個人,沒有辦法解決

6. python中獲取子窗口的句柄

可以使用win32gui 以及pyhook 庫來實現你的需求

7. python怎麼定位到windows窗口

前段時間使用了一下google的博客空間,感覺也很一般,所以現在把那裡的幾篇文章轉過來。執行python腳本只需要對python文件做如下操作即可:在python文件里第一行加上#! /usr/bin/python,即你的python解釋器所在的目錄。另外還有一種寫法是#! /

8. python 獲得編輯區句柄

你拿到的是主窗口句柄,還需要搜索遍歷,找到子窗口或控制項。有些是自定義,只能通過位置定義。

9. python 用什麼模塊獲取句柄

可以下載pywin32。
可用win32api,win32ui,win32gui等模塊可獲取窗口句柄。

10. python如何進行桌面開發有哪些資料可供參考

這里介紹3個python桌面開發的包,分別是tkinter,wxpython和pyqt,這3個包都可以快速的開發出桌面應用,下面我簡單介紹一下這3個包的安裝和使用,實驗環境win10+python3.6+pycharm5.0,主要內容如下:

1.tkinter:這個是python自帶的開發桌面GUI的標准庫,不需要安裝,跨平台、可移植性高,支持主流的操作系統,像Windows,Linux,Mac等,python自帶的IDLE就是採用這個包開發,簡單易學,容易上手,適合小型項目的開發,入門GUI開發的話,可以試一下這個包,官網資料https://docs.python.org/2/library/tkinter.html:

程序運行如下:

2.wxpython:這是python一個優秀、成熟的跨平台GUI包,但不是自帶的標准庫,需要單獨安裝,支持的組件眾多,可以幫助程序員快速的創建功能齊全、界面友好的GUI界面,應用廣泛,非常適合中小型項目的開發,官網資料https://docs.wxpython.org/,可以參考學習一下,下面我簡單介紹一下安裝和使用:

安裝,這里直接在cmd窗口輸入命令「pip install wxpython」就行,如下:

安裝成功後,就可以進行簡單的測試了,代碼如下,一個簡單編輯器:

程序運行截圖如下:

3.pyqt:這個是Qt提供給python的一個介麵包,Qt功能強大,組件眾多,可以快速構建用戶GUI界面,所以pyqt的功能也十分強大,藉助於Qt,我們可以構建桌面應用,下面我簡單介紹一下pyqt的安裝和使用,官網資料http://pyqt.sourceforge.net/Docs/PyQt5/:

安裝pyqt5,這個直接在cmd窗口輸入「pip install pyqt5」就行,如下:

測試代碼如下,一個簡單的計算器:

程序運行截圖如下:

當然,你也可以藉助designer.exe直接拖拽控制項,完成GUI界面開發,如下,最後打包成py文件就行:

目前,就介紹這3個包吧,網上也有許多這方面的教程,感興趣的話,可以搜搜,希望以上分享的內容能對你有所幫助吧。

閱讀全文

與python桌面句柄名稱相關的資料

熱點內容
python超簡單編程 瀏覽:257
獲取命令方 瀏覽:976
怎樣製作文件夾和圖片 瀏覽:58
調研編譯寫信息 瀏覽:859
python馮諾依曼 瀏覽:417
同時安裝多個app有什麼影響 瀏覽:253
奧術殺戮命令宏 瀏覽:182
用sdes加密明文字母e 瀏覽:359
單片機原理及應用試題 瀏覽:423
易語言開啟指定文件夾 瀏覽:40
馬思純參加密室大逃脫 瀏覽:322
文件夾冬季澆築溫度 瀏覽:712
京東有返點的aPp叫什麼 瀏覽:603
如何查看u點家庭伺服器是幾兆 瀏覽:262
python應用介面怎麼接 瀏覽:67
腐蝕怎麼進不去伺服器啊 瀏覽:359
linuxcpiogz 瀏覽:631
安卓中的布局是什麼文件 瀏覽:397
dex反編譯部分代碼無法查看 瀏覽:464
linuxandroid編譯 瀏覽:603