PythonPC客戶端自動(dòng)化實(shí)現(xiàn)原理(pywinauto)
一、前言
今天在這邊專門整理了一遍文章,和大家一起聊聊如何使用python做PC端自動(dòng)化!
二、環(huán)境安裝
使用python實(shí)現(xiàn)來做PC端自動(dòng)化,前提是先安裝好python,那么還需要用到一個(gè)第三方庫:pywinauto,在這邊我們首先需要安裝好這個(gè)庫,安裝命令如下:
pip install pywinauto
三、使用說明
安裝好了之后,關(guān)于使用說明大家可以參照官方文檔上的說明
內(nèi)容翻譯如下:
就是說在我們安裝好Pywinauto之后,首先要確定哪種可訪問性技術(shù)(pywinauto的backend)可以用于我們的應(yīng)用程序,在windows上受支持的輔助功能技術(shù)有兩種:
Win32 API (backend="win32") 默認(rèn)backend
MS UI Automation (backend="uia")
如果您不能確定程序到底適用于那種backend,可以借助于GUI對(duì)象檢查工具來做,常用的檢查工具有Inspect.ex,Spy++ 等,這個(gè)不做過多介紹,大家自行學(xué)習(xí)和下載,使用很簡(jiǎn)單,也非常便捷。
四、快速入門
在安裝好環(huán)境之后,并且確定了應(yīng)用程序適用的backend,那么接下來我們就可以使用Pywinauto這個(gè)模塊來對(duì)應(yīng)用程序進(jìn)行自動(dòng)化操作了
1、連接到應(yīng)用程序這邊以window自帶的計(jì)算器程序作為案例,給大家做講解
連接應(yīng)用程序,首先需要用到pywinauto.application.Application()來創(chuàng)建一個(gè)應(yīng)用程序?qū)ο?,然后再連接到應(yīng)用程序,有如下兩種方法:
方式一:直接通過start方法打開操作的應(yīng)用程序,
from pywinauto import application # 方式一:創(chuàng)建應(yīng)用程序時(shí)可以,指定應(yīng)用程序的合適的backend,start方法中指定啟動(dòng)的應(yīng)用程序 app = application.Application(backend='uia').start('notepad.exe')
方式二:連接已經(jīng)打開應(yīng)用程序,可以通過connect連接到指定的應(yīng)用程序
from pywinauto import application # 方式二:查看要打開的程序進(jìn)程號(hào),通過process指定進(jìn)程號(hào)連接 app = application.Application().connect(process=19035)
運(yùn)行以上代碼,就會(huì)自動(dòng)打開記事本記事本,如下
2、窗口選擇
打開這個(gè)窗口之后,我們要操作該窗口的話,那么就的先選中這個(gè)窗口,關(guān)于窗口的選擇有一下幾種方式
# 方式一 :不適用于窗口名為中文的 wind_1 = app.窗口名 # 方式二 :窗口名可以為中文 wind_2 = app["窗口名"] # 案例使用:選擇上面打開的計(jì)算器程序窗口 wind_calc = app['無標(biāo)題 - 記事本']
3、控件操作
程序窗口中的內(nèi)容,把它稱之為控件,我們要對(duì)這個(gè)窗口的內(nèi)容進(jìn)行操作,就需要選擇到對(duì)應(yīng)的控件,
獲取所有控件
我們可以通過print_control_identifiers()這個(gè)方法,來獲取這個(gè)窗口下的直接子控件,如下:
app['無標(biāo)題 - 記事本'].print_control_identifiers()
打印出來的結(jié)果如下:
上面打印出來的內(nèi)容分別對(duì)應(yīng)窗口種
選擇控件
關(guān)于控件選擇的方法有好幾種,最簡(jiǎn)單的方法如下:
# 選擇控件的方法 wind_calc = app["窗口名"]["控件名"] # 案例操作:選擇編輯窗口 edit = app['無標(biāo)題 - 記事本']['Edit']
內(nèi)容輸入
在上面選擇到編輯窗口之后,我們就可以進(jìn)行內(nèi)容輸入了,
內(nèi)容輸入的方法:type_key()
# 在編輯欄種輸入內(nèi)容 edit.type_keys("檸檬班") edit.type_keys("python自動(dòng)化") edit.type_keys("musen")
運(yùn)行結(jié)果如下:
4、鍵盤操作
輸入完上述內(nèi)容之后,接下來我們要修改編輯框中的內(nèi)容,
通過鍵盤完成以下操作:全選(ctrl+A) 復(fù)制(ctrl+C) 粘貼(ctrl+V)
pywinauto.keyboard.send_key
pywinauto模擬操作鍵盤,需要使用到 pywinauto.keyboard.send_keys這個(gè)方法
# 導(dǎo)入模塊 from pywinauto.keyboard import send_keys # 全選(ctrl+A) send_keys("^a") # 復(fù)制(ctrl+C) send_keys("^c") # 粘貼(ctrl+V) send_keys("^v") # 回車鍵 send_keys("{VK_RETURN}") # 粘貼(ctrl+V) send_keys("^v")
常見的按鍵操作
字母按鍵用按鍵小寫字母表示
常用的一些按鍵
- ESC鍵:VK_ESCAPE
- 回車鍵:VK_RETURN
- TAB鍵:VK_TAB
- Shift鍵:VK_SHIFT
- Ctrl鍵:VK_CONTROL
- Alt鍵:VK_MENU
按鍵修飾符
- # 對(duì)于一些常用的按鍵,可以通過修飾符來表示,使用的時(shí)候比較方便
- '+': {VK_SHIFT}
- '^': {VK_CONTROL}
- '%': {VK_MENU} Alt鍵
- # 上面:全選(ctrl+A) 復(fù)制(ctrl+C) 粘貼(ctrl+V)就使用的是修飾符^來代表ctrl
更多的鍵盤操作大家可以參考官網(wǎng)文檔
5、鼠標(biāo)操作
pywinauto. mouse
pywinauto操作鼠標(biāo),需要導(dǎo)入mouse模塊,mouse模塊中設(shè)置了一系列的鼠標(biāo)操作事件
鼠標(biāo)移動(dòng):move方法
move(coords=(x軸坐標(biāo),y軸坐標(biāo)))
緩慢移動(dòng)鼠標(biāo)案例
for i in range(10): x = 10 * i y = 10 * i time.sleep(0.5) # 移動(dòng)鼠標(biāo) mouse.move(coords=(x, y))
鼠標(biāo)點(diǎn)擊:click
# button指定左擊還是右擊,coords指定鼠標(biāo)點(diǎn)擊的位置 # 3.1、鼠標(biāo)單擊 # 指定位置,鼠標(biāo)左擊 mouse.click(button='left', coords=(40, 40)) # 指定位置 鼠標(biāo)右擊 # mouse.click(button='right', coords=(100, 200)) # 3.2 鼠標(biāo)雙擊 mouse.double_click(button='left', coords=(140, 40)) # 4 按下鼠標(biāo):press # 將屬性移動(dòng)到(140,40)坐標(biāo)處按下 mouse.press(button='left', coords=(140, 40)) # 5 釋放鼠標(biāo):repleace # 將鼠標(biāo)移動(dòng)到(300,40)坐標(biāo)處釋放, mouse.release(button='left', coords=(300, 40)) # 6、右鍵單擊指定坐標(biāo) mouse.right_click(coords=(400, 400)) # 7、鼠標(biāo)中鍵單擊指定坐標(biāo)(很少用的到) mouse.wheel_click(coords=(400, 400)) # 8 滾動(dòng)鼠標(biāo) # coords:指定鼠標(biāo)的坐標(biāo)位置。 # wheel_dist指定鼠標(biāo)滾輪滑動(dòng)的次數(shù),正數(shù)往上,負(fù)數(shù)往下。 mouse.scroll(coords=(1200,300),wheel_dist=-3)
五、說明
關(guān)于pywinauto模塊的基本使用就該大家介紹到這里了,對(duì)pc端自動(dòng)化感興趣的同學(xué)可以往這個(gè)方向去深入學(xué)習(xí)。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python爬蟲URL重試機(jī)制的實(shí)現(xiàn)方法(python2.7以及python3.5)
今天小編就為大家分享一篇python爬蟲URL重試機(jī)制的實(shí)現(xiàn)方法(python2.7以及python3.5),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12Pycharm保存不能自動(dòng)同步到遠(yuǎn)程服務(wù)器的解決方法
今天小編就為大家分享一篇Pycharm保存不能自動(dòng)同步到遠(yuǎn)程服務(wù)器的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06基于Python實(shí)現(xiàn)自動(dòng)關(guān)機(jī)小工具
上班族經(jīng)常會(huì)遇到這樣情況,著急下班結(jié)果將關(guān)機(jī)誤點(diǎn)成重啟,或者臨近下班又通知開會(huì),開完會(huì)已經(jīng)遲了還要去給電腦關(guān)機(jī)。今天使用PyQt5做了個(gè)自動(dòng)關(guān)機(jī)的小工具,設(shè)置好關(guān)機(jī)時(shí)間然后直接提交即可,需要的可以參考一下2022-10-10python wordcloud庫實(shí)例講解使用方法
這篇文章主要介紹了python wordcloud庫實(shí)例,詞云通過以詞語為基本單位,更加直觀和藝術(shù)地展示文本。wordcloud是優(yōu)秀的詞云展示的python第三方庫2022-12-12地圖可視化神器kepler.gl python接口的使用方法
這篇文章主要介紹了python 地圖可視化神器kepler.gl近期重要更新的的相關(guān)資料,幫助大家利用python實(shí)現(xiàn)地圖可視化,感興趣的朋友可以了解下2020-12-12python密碼學(xué)文件解密實(shí)現(xiàn)教程
這篇文章主要為大家介紹了python密碼學(xué)文件解密實(shí)現(xiàn)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05jupyter notebook遠(yuǎn)程訪問不了的問題解決方法
這篇文章主要介紹了jupyter notebook遠(yuǎn)程訪問不了的問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Django框架HttpResponse和HttpRequest對(duì)象學(xué)習(xí)
這篇文章主要介紹了Django框架HttpResponse和HttpRequest對(duì)象學(xué)習(xí),有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪2021-09-09