在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Python自動操作 GUI 神器-PyAutoGUI

    Python自動操作 GUI 神器-PyAutoGUI

    作者:閑歡

    來源:Python 技術(shù)

    我們以前講過怎樣使用 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ù)表示移動時間,即在指定時間內(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è)置操作時間:

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

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

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

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

    鼠標(biāo)滾動

    在桌面操作中,我們有時候需要滾動鼠標(biāo)到達(dá)向上或者向下的位置,這時候我們可以使用 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)容

    舉個例子,大家平時輸入感嘆號(!)是怎么操作鍵盤的?

    按住 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ù)是間隔時間,單位是秒。

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

    特殊符號

    有時我們需要輸入鍵盤的一些特殊的符號按鍵,比如 換行、方向鍵等,這些有相對應(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)你在模擬一個桌面操作的時候,如果有分支操作需要根據(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)一些有趣的桌面自動化操作,快去嘗試一把吧!

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月20日 23:34
    下一篇 2022年6月20日 23:34

    相關(guān)推薦

    • 存儲過程語法(sql server存儲過程語法)

      今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

      2022年11月26日
    • 《光遇》11月25日紅石在哪里 11.25紅石位置

      光遇11月25日的紅石出現(xiàn)在霞谷圓夢村,許多小伙伴都還不知道它具體在哪,下面就讓小編來給大家介紹一下光遇11.25紅石的位置,感興趣的小伙伴快來看看吧。 光遇11.25紅石位置 1…

      2022年11月25日
    • 《光遇》11月25日季節(jié)蠟燭在哪 11.25季節(jié)蠟燭位置2022

      光遇季節(jié)蠟燭的位置每天都會變化,今天出現(xiàn)在了雨林地區(qū),下面小編就給大家?guī)砹斯庥?1.25季節(jié)蠟燭位置分享,有需要的小伙伴不要錯過哦。 光遇11.25季節(jié)蠟燭位置2022 今日季節(jié)…

      2022年11月25日
    • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

      CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊,可以是激活,可以是搜索下載激活,可以是綁卡,實(shí)名認(rèn)證,可以是付費(fèi),可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來定…

      2022年11月25日
    • 中興Axon40 Ultra航天版將于11月29日正式發(fā)布

      據(jù)中興手機(jī)官微爆料,中興Axon40 Ultra航天版將于11月29日正式發(fā)布,新機(jī)不僅會采用驍龍?zhí)幚砥?,還將為大家?guī)硪幻丢?dú)立安全芯片,獲得國密認(rèn)證,擁有安全專利布局,不僅可以大…

      2022年11月24日
    • 三星tabs8+配置參數(shù) 三星tabs8+屏幕尺寸處理器介紹

      三星Galaxy Tab S8+是2022年3月份上市的一款平板,有很多用戶想了解一下這款平板的配置參數(shù),下面我就給大家提供一下這款平板的參數(shù)配置。 三星Galaxy Tab S8…

      2022年11月24日
    • 《寶可夢朱紫》樁子是什么?二級神封印樁位置一覽

      寶可夢朱紫中有一種叫做二級神封印樁的特殊收集道具,很多玩家不知道寶可夢朱紫樁子是什么,下面就帶來寶可夢朱紫二級神封印樁位置一覽,感興趣的小伙伴不要錯過,希望能幫助到大家。 二級神封…

      2022年11月24日
    • 淘寶直播開通后帶貨鏈接怎么做(淘寶直播需要開通淘寶店鋪嗎)

      直播帶貨無論是對于商家來說還是主播收益都是非常可觀的,所以不少平臺都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

      2022年11月24日
    • 銳龍97900x參數(shù)規(guī)格跑分評測 銳龍97900x屬于什么檔次

      銳龍9 7900X是銳龍7000系列處理器中性能頂尖的型號之一,它采用了這一代標(biāo)配的zen4架構(gòu)和5nm制程工藝,那么它具體的參數(shù)跑分如何,在電腦上世紀(jì)發(fā)揮怎么樣呢,下面就來看看銳…

      2022年11月24日
    • 《寶可夢朱紫》太晶水地龍捕捉位置一覽 太晶水地龍在哪里捕捉

      近日在貼吧看到有許多玩家在寶可夢朱紫中遇到了《寶可夢朱紫》太晶水地龍捕捉位置一覽的問題,又不知道該怎么辦。今天在這里,小編為大家?guī)淼木褪沁@個問題的解方案,只要你跟著小編的節(jié)奏來,…

      2022年11月24日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息