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個包吧,網上也有許多這方面的教程,感興趣的話,可以搜搜,希望以上分享的內容能對你有所幫助吧。