欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python自動操作神器PyAutoGUI的使用教程

 更新時(shí)間:2022年06月16日 10:04:13   作者:派森醬  
這篇文章主要是想和大家來聊一聊Python如何利用自動操作 GUI 神器——PyAutoGUI在桌面實(shí)現(xiàn)自動化操作,感興趣的小伙伴可以了解一下

我們以前講過怎樣使用 Python 在瀏覽器中實(shí)現(xiàn)頁面自動化操作,不管用哪種方式實(shí)現(xiàn),都是通過定位頁面中的元素來進(jìn)行相應(yīng)的操作。

今天我們來聊一聊如何在桌面實(shí)現(xiàn)自動化操作。與瀏覽器頁面自動化操作類似,桌面自動化操作也是需要定位鼠標(biāo)在桌面的位置,然后根據(jù)定位的位置執(zhí)行對應(yīng)的操作。

GUI 控制神器

我們今天的主人公是 pyautogui,pyautogui 是一個純 Python 的 GUI 自動化工具,通過它可以讓程序自動控制鼠標(biāo)和鍵盤的一系列操作來達(dá)到自動化測試的目的。

這個模塊的安裝也是老一套:

pip3 install pyautogui

安裝好了就可以直接使用了。

鼠標(biāo)操作

鼠標(biāo)移動

桌面操作最基本的就是鼠標(biāo)操作了,我們可以控制鼠標(biāo)的移動:

#?移動鼠標(biāo)
pyautogui.moveTo(200,400,duration=2)
pyautogui.moveRel(200,500,duration=2)

整個桌面是以左上角為坐標(biāo)軸的原點(diǎn),所有的操作都以這個原點(diǎn),來確定操作位置。

第一行是將鼠標(biāo)移動到指定的像素(200,400)位置,第二行代碼是將鼠標(biāo)按照當(dāng)前點(diǎn)向右移動200px,向下移動400px這個方向移動。

兩行代碼中都有一個共同的參數(shù) duration,這個參數(shù)表示移動時(shí)間,即在指定時(shí)間內(nèi)完成移動操作,單位是秒。

運(yùn)行這兩行代碼,觀察屏幕鼠標(biāo)的變化,是不是很神奇?

我們還可以獲取鼠標(biāo)位置:

print(pyautogui.position())??

這個很好理解,就是獲取鼠標(biāo)在當(dāng)前屏幕中的坐標(biāo)位置,運(yùn)行這行代碼,我們會得到諸如下面的信息:

Point(x=400, y=900)

鼠標(biāo)點(diǎn)擊

通常,我們的鼠標(biāo)有左右兩個按鍵,高級點(diǎn)的鼠標(biāo)中間還有個按鍵。

我的鼠標(biāo)只有兩個按鍵,中間沒有按鍵,唉~

pyautogui針對這三個按鍵操作都有相應(yīng)的處理:

#?鼠標(biāo)點(diǎn)擊,默認(rèn)左鍵
pyautogui.click(100,100)???
#?單擊左鍵
pyautogui.click(100,100,button='left')??
#?單擊右鍵
pyautogui.click(100,300,button='right')?
#?單擊中間?
pyautogui.click(100,300,button='middle')??

鼠標(biāo)點(diǎn)擊,如果不指定 button 參數(shù),默認(rèn)是點(diǎn)擊左鍵,前面兩個參數(shù)就是點(diǎn)擊坐標(biāo)的位置。

運(yùn)行這段代碼,看看你的桌面會發(fā)生什么?

鼠標(biāo)除了點(diǎn)擊操作,還有雙擊操作:

#?雙擊左鍵
pyautogui.doubleClick(10,10)??
#?雙擊右鍵
pyautogui.rightClick(10,10)???
#?雙擊中鍵
pyautogui.middleClick(10,10)?

操作函數(shù)也很簡單,相信大家一眼就能看明白,如果一眼看不明白,請多看幾眼!

熟悉前端的小伙伴可能會馬上聯(lián)想到,鼠標(biāo)操作有按下和釋放的過程,我們屏幕操作也有對應(yīng)的控制:

#?鼠標(biāo)按下
pyautogui.mouseDown()???
#?鼠標(biāo)釋放
pyautogui.mouseUp()????

鼠標(biāo)拖動

我們可以控制鼠標(biāo)拖動到指定坐標(biāo)位置,并且設(shè)置操作時(shí)間:

pyautogui.dragTo(100,300,duration=1)???

這個運(yùn)行效果和前面移動類似。

根據(jù)前面移動的經(jīng)驗(yàn),我們也有按照方向拖動鼠標(biāo):

pyautogui.dragRel(100,300,duration=4)?

鼠標(biāo)滾動

在桌面操作中,我們有時(shí)候需要滾動鼠標(biāo)到達(dá)向上或者向下的位置,這時(shí)候我們可以使用 scroll 這個函數(shù)來控制:

pyautogui.scroll(30000)?

參數(shù)是整數(shù),表示向上或向下滾動多少個單位,這個單位根據(jù)不同的操作系統(tǒng)可能不一樣。如果向上滾動,傳入正整數(shù),向下滾動傳入負(fù)整數(shù)。

屏幕處理

獲取屏幕截圖

我們先來假設(shè)一個場景:我現(xiàn)在要在屏幕上找到一個紅色的點(diǎn),你會怎么做?通常的做法是拿到這個紅色點(diǎn)的顏色值,然后再對屏幕上的點(diǎn)逐個進(jìn)行比較,直到找到為止。

pyautogui 為我們這個操作場景提供了支持,分別有三個函數(shù)可以完成這三件事情。

im?=?pyautogui.screenshot()
im.save('screenshot.png')
rgb?=?im.getpixel((100,?500))
print(rgb)
match?=?pyautogui.pixelMatchesColor(500,500,(12,120,400))
print(match)

第一個是獲取屏幕截圖函數(shù),它可以返回一個 Pillow 的 image 對象; 第二個是獲取屏幕截圖中指定坐標(biāo)點(diǎn)的顏色,返回 rgb 顏色值;第三個是將指定坐標(biāo)點(diǎn)的顏色和目標(biāo)的顏色進(jìn)行比對,返回布爾值。

我們再來升級一下需求:

我現(xiàn)在要在屏幕上找到 edge 瀏覽器的圖標(biāo),你會怎么做?

通常的做法是先知道 edge 瀏覽器的圖標(biāo)長啥樣,是綠色還是藍(lán)色,是胖的還是瘦的,對吧?然后再在屏幕上去進(jìn)行圖標(biāo)的匹配,直到找到一個圖標(biāo)跟我們目標(biāo)圖標(biāo)一樣,就得到了結(jié)果。

于是,我們的代碼如下:

#?圖像識別(一個)
oneLocation?=?pyautogui.locateOnScreen('1.png')
print(oneLocation)??

#?圖像識別(多個)
allLocation?=?pyautogui.locateAllOnScreen('1.png')
print(list(allLocation))

你可以在桌面上將某個應(yīng)用的圖標(biāo)截取下來,保存為圖片,然后使用上面幾行代碼來識別,識別成功,你會返回類似下面的結(jié)果:

Box(left=20, top=89, width=33, height=34)
[Box(left=20, top=89, width=33, height=34)]

這就是圖片在桌面的位置,如果找不到圖片,就會返回 None。

鍵盤輸入

鍵盤函數(shù)

鍵盤輸入有下面幾個常用的函數(shù):

  • keyDown():模擬按鍵按下
  • keyUP():模擬按鍵松開
  • press():模擬一次按鍵過程,即 keyDown 和 keyUP 的組合
  • typewrite():模擬鍵盤輸出內(nèi)容

舉個例子,大家平時(shí)輸入感嘆號(?。┦窃趺床僮麈I盤的?

按住 shift 按鍵,然后再按住 1 按鍵,就可以了。用 pyautogui 控制就是:

pyautogui.keyDown('shift')????
pyautogui.press('1')????
pyautogui.keyUp('shift')???

運(yùn)行上面的代碼,如果你的鼠標(biāo)是放在編輯框中,你會得到一個感嘆號!

我們還可以直接輸出內(nèi)容:

pyautogui.typewrite('python',?1)

第一個參數(shù)是輸出的內(nèi)容,第二個參數(shù)是間隔時(shí)間,單位是秒。

運(yùn)行上面代碼,你的編輯器里面就會每隔1秒鐘按順序輸出 python 的6個字母。

特殊符號

有時(shí)我們需要輸入鍵盤的一些特殊的符號按鍵,比如 換行、方向鍵等,這些有相對應(yīng)的鍵盤字符串表示:

pyautogui.typewrite(['p','y','t','h','o','n','enter'])???

運(yùn)行上面代碼,編輯器里面就會輸出 python 之后換行。

其他特殊按鍵對應(yīng)的字符串請參考官方說明。

快捷鍵

如果我要復(fù)制一個內(nèi)容,大部分情況下會使用快鍵鍵 ctrl + c,按照上面講的,我們應(yīng)該這么實(shí)現(xiàn):

pyautogui.keyDown('ctrl')
pyautogui.keyDown('c')
pyautogui.keyUp('c')
pyautogui.keyUp('ctrl')

這樣寫起來很麻煩,而且需要掌控按鍵的按下和釋放的順序。

pyautogui 為我們提供了一個快捷的函數(shù):

pyautogui.hotkey('ctrl','c')

實(shí)現(xiàn)的效果和上面的4行代碼相同。

信息框

當(dāng)你在模擬一個桌面操作的時(shí)候,如果有分支操作需要根據(jù)實(shí)際情況來判斷,你是不是需要有一個地方可以讓你選擇走哪個分支?

pyautogui 貼心地考慮到了這種情況,你可以通過彈出一個選擇框來中斷當(dāng)前的操作,選擇操作分支。

way?=?pyautogui.confirm('領(lǐng)導(dǎo),該走哪條路?',?buttons=['農(nóng)村路',?'水路',?'陸路'])
print(way)

這里就是我們 HTML 頁面的 confirm 選擇框,選擇了選項(xiàng)之后,我們可以獲取到選擇的選項(xiàng),然后基于這個選項(xiàng)做判斷,進(jìn)入相應(yīng)的操作分支。

除了選擇確認(rèn)框之外,還有其他一些提示信息框:

#?警告框
alert?=?pyautogui.alert(text='警告!敵軍來襲!',?title='警告框')
print(alert)
#?密碼框
password?=?pyautogui.password('請輸入密碼')
print(password)
#?普通輸入框
input?=?pyautogui.prompt('請輸入指令:')
print(input)

總結(jié)

pyautogui 的基本知識就給大家介紹到這里,這個 python 模塊的功能十分強(qiáng)大,函數(shù)都非常簡單,對 python 初學(xué)者比較友好。學(xué)了這些基本知識之后,你可以運(yùn)用這些基本知識的組合,去實(shí)現(xiàn)一些有趣的桌面自動化操作,快去嘗試一把吧!

以上就是Python自動操作神器PyAutoGUI的使用教程的詳細(xì)內(nèi)容,更多關(guān)于Python PyAutoGUI的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python類的私有屬性和公共屬性說明

    python類的私有屬性和公共屬性說明

    這篇文章主要介紹了python類的私有屬性和公共屬性說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python+Pygame實(shí)現(xiàn)懷舊游戲飛機(jī)大戰(zhàn)

    Python+Pygame實(shí)現(xiàn)懷舊游戲飛機(jī)大戰(zhàn)

    第一次見到飛機(jī)大戰(zhàn)是在小學(xué)五年級下半學(xué)期的時(shí)候,這個游戲中可以說包含了幾乎所有我目前可接觸到的pygame知識。本文就來利用Pygame實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,需要的可以參考一下
    2022-11-11
  • 使用python創(chuàng)建生成動態(tài)鏈接庫dll的方法

    使用python創(chuàng)建生成動態(tài)鏈接庫dll的方法

    這篇文章主要介紹了使用python創(chuàng)建生成動態(tài)鏈接庫dll的方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Django框架HttpResponse和HttpRequest對象學(xué)習(xí)

    Django框架HttpResponse和HttpRequest對象學(xué)習(xí)

    這篇文章主要介紹了Django框架HttpResponse和HttpRequest對象學(xué)習(xí),有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪
    2021-09-09
  • python爬蟲之請求模塊urllib的基本使用

    python爬蟲之請求模塊urllib的基本使用

    urllib是python內(nèi)置的HTTP請求庫,是一個用來處理網(wǎng)絡(luò)請求的python標(biāo)準(zhǔn)庫,下面這篇文章主要給大家介紹了關(guān)于python爬蟲之請求模塊urllib的基本使用,需要的朋友可以參考下
    2022-04-04
  • 深入了解Python?中線程和進(jìn)程區(qū)別

    深入了解Python?中線程和進(jìn)程區(qū)別

    這篇文章主要介紹了深入了解Python?中線程和進(jìn)程區(qū)別,一個進(jìn)程由一個或者多個線程組成,線程是一個進(jìn)程中代碼的不同執(zhí)行路線。切換進(jìn)程需要的資源比切換線程的要多的多,下面來了解更多的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • 用 python 進(jìn)行微信好友信息分析

    用 python 進(jìn)行微信好友信息分析

    這篇文章主要介紹了用 python 進(jìn)行微信好友信息分析的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • 基于OpenCV實(shí)現(xiàn)視頻循環(huán)播放

    基于OpenCV實(shí)現(xiàn)視頻循環(huán)播放

    這篇文章主要為大家介紹了如何利用OpenCV實(shí)現(xiàn)視頻的循環(huán)播放,本文為大家提供了兩種方式,一個是利用Python語言實(shí)現(xiàn),一個是利用C++語言實(shí)現(xiàn),需要的可以參考一下
    2022-02-02
  • SciPy中兩個模塊:io 和misc的使用

    SciPy中兩個模塊:io 和misc的使用

    這篇文章主要介紹了SciPy中兩個模塊:io 和misc的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Anaconda詳細(xì)安裝步驟圖文教程

    Anaconda詳細(xì)安裝步驟圖文教程

    這篇文章主要介紹了Anaconda詳細(xì)安裝步驟圖文教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評論