自動化之圖形界面庫pyautogui


開篇言:py的庫真的是多,封裝相關功能的庫真的是各具神通,里面的輪子很多。前幾天一直回去看基礎的語法函數這些,以及c語言數據結構這些,扎實自己的基礎。
學習是一件很麻煩但是很有意思的事情(我指的是碼代碼),今天為大家介紹這個自動化庫,提高趣味性,當然python的自動化操作還是有好多,后面會為大家繼續推出。

一:初步認識pyautogui

pyautogui是什么?

拆開來分析,畢竟還是英文單詞。py+auto+gui,那就是python的自動化圖形界面的一個庫。
給大家推薦一個可以查閱py文檔的網站,可以查看最新的庫的相關操作以及版本。點擊訪問PyPI
在這里插入圖片描述
可以試着去閱讀,雖然都是英文,但是也是可以通過谷歌翻譯翻譯為中文的(如果你真的看不懂的話),個人感覺學會閱讀英文文獻也是程序員的一種素養。
廢話有點多,我們來介紹這個庫究竟是什么?大家可以在這里看到。
在這里插入圖片描述


實現一個控制圖形界面的庫,完成一些自動化操作,當然也是需要配合你得程序,或者高級一點我們可以說是配合你的算法。
可以實現鼠標控制,鍵盤輸入,截圖匹配的相關操作,目前本人學到用到的也就這些。

二:相關方法的介紹

1:控制鼠標

先了解一下像素(我們以筆記本電腦像素舉例)

呃呃,剛剛去百度了一下。說的比較官方,但是比較准確。

像素是指由圖像的小方格組成的,這些小方塊都有一個明確的位置和被分配的色彩數值,小方格顏色和位置就決定該圖像所呈現出來的樣子。

按照我們的簡單的理解,像素就是電腦屏幕上的那些很小很小的方格,每個方格都有位置坐標,以及色彩rgb,像素方格組合起來顯示就可以呈現出來我們可以看到的圖像。就好像你的表皮細胞一樣,你是肉眼看不到,但是它是組成部分。不知道這樣比喻是否恰當。
在這里插入圖片描述

我們也會聽到有關分辨率,那么像素於之是什么樣的關系呢?
像素(px)=英寸(in)x分辨率(ppi)
我們需要知道一下這個概念。這是電腦顯示器上的分辨率,分別代表了長和寬上的像素點。值比較大的化,圖像會更加清晰,美觀。
在這里插入圖片描述
我們可以通過代碼來獲取屏幕的分辨率

import pyautogui 導入所需要的庫
print(pyautogui.size())#查看電腦橫縱像素

分別打印出橫縱如下,這是這個庫可以用到的一個方法。具體了解到有什么用呢?繼續往后看鼠標。
在這里插入圖片描述

實現對鼠標的控制

1:打印鼠標的當前位置

print(pyautogui.position())#查看鼠標所在的位置

我們可以做一個循環監測鼠標所在的位置

import pyautogui
import time
def search_positon() : 
    time.sleep(1)
    x1,y1= pyautogui.position()
    print("您當前位置坐標為:","x:"+str(x1)+'',"y:"+str(y1))

if __name__ == "__main__" : 
    while True :
      search_positon()
      pass
            

請添加圖片描述
我們剛剛說到像素,通過一行代碼獲取到顯示屏的橫縱像素,這個對於我們對電腦的像素坐標有了一個基本的認識。可以知道的是,x_max=1919,y_max=1079,這就是程序給出的最大坐標。因為下標從0開始,我的電腦屏幕左上角的坐標為(0,0),而電腦的的橫縱分別為1920,1080。所以就理解了。那么就可以在電腦的左上角建立坐標原點,然后可以開始你的平面構思。

我們可以用到一個方法,將該方法的返回直接打印出,如果在,就返回True,如果不在就返回False

print(pyautogui.onScreen(200,202))#查看位置點是否位於屏幕上

在這里插入圖片描述
2:控制鼠標移動

對的,還可以控制鼠標移動,我們來看具體的用到的方法。


pyautogui.moveTo(100,200,3)#這是控制鼠標移動,3代表了時間。

請添加圖片描述
還有一種移動的方法

pyautogui.moveRel(200,300,4)

請添加圖片描述看起來兩者區別不大,但是實際上還是有區別的,那就是moveTo()是移動到絕對位置,就是相對於你的屏幕坐標原點,而moveRel()是相對當前位置移動。


我們來看一種按鍵移動,就是指定按住鼠標那個鍵移動

pyautogui.drag(500,500,button='left',duration=4)
#button參數指定了按鍵,duration指定了完成任務的時間,當然這個移動也是相對當前位置移動

請添加圖片描述

pyautogui.dragTo(500,500,button='left',duration=6)#這邊的500是移動到具體的位置

請添加圖片描述
鼠標點擊

pyautogui.click(0,0,button='right')#鼠標點擊指定的位置
pyautogui.click(2,2,button='left',clicks=2,interval=0.1,duration=2)#interval代表完成間隔時間,clicks指定了點擊次數。

請添加圖片描述
請添加圖片描述鼠標滾動

import pyautogui
#為了效果明顯,我們使用一個循環進行觀察
pyautogui.FAILSAFE = False
while True :
    pyautogui.scroll(-200)

請添加圖片描述

2:控制輸入以及鍵盤按鍵

在鼠標光標的位置寫入內容
pyautogui.write("Hello",interval=0.5)#間隔為1秒,字符之間

請添加圖片描述
還有其它的按鍵方法,這邊不做演示,展示一下方法

# pyautogui.press('enter')#按鍵盤上的鍵
# # pyautogui.press(['x','y','z'])#以列表的形式傳入按鍵
# pyautogui.keyDown()#模擬按鍵
# pyautogui.keyUp()#按鍵釋放       

信息輸入

a = pyautogui.alert(Text = "i love you",title='666') #彈出提示框
print(a)#輸出一下返回內容

請添加圖片描述

a1 = pyautogui.confirm("你喜歡誰",button = ['張三','王五','李四'])
print(a1)

請添加圖片描述
信息輸入還有密碼的輸入的方法

# a2 = pyautogui.password("請輸入密碼")
# print(a2)

3:截圖以及匹配(圖片識別)

這邊我們介紹方法,具體看后面的一個自動化程序

#pyautogui.screenshot()#截圖
#pyautogui.screenshot("picture.png")保存
#另一種保存
#a = pyautogui.screenhot()
#a.save("picture.png")#這邊可以自己加路徑的
#pyautogui.screenshot(region=(0,0, 0, 0))#這邊指定區域截圖
#匹配圖片的函數
# pyautogui.locateOnScreen('picture.jpg')
# pyautogui.locateAllOnScreen('picture.jpg')#匹配多處圖片

具體完成一個小小的自動化點贊程序,網上也有好多,但是個人對異常進行了處理,所以點贊會比較絲滑。往下看,舉個栗子。

三:自動化點贊(處理了存在的異常)、

思路:?
如何實現自動化點贊?我的思路是這樣的,預先保存一個贊的圖標。這個截圖是我自己用windows自帶截圖功能截下來的,
如果你要用程序截圖的化,會很麻煩,因為我需要的贊表就這么大。如下。hhh。
在這里插入圖片描述
然后呢,我通過這個圖片作為模板,然后再頁面上尋找。一旦找到,我就返回其橫縱坐標,然后我就指定點擊這個位置。如果沒有找到,我就命令鼠標下滑,繼續找,如此循環。當然你可以看到,上面那個白色的贊標,這就決定了,我會給沒有贊的人點贊,或者我沒有點過贊的人。

我尋找的目標是csdn動態,來看代碼先



import pyautogui
import time
pyautogui.FAILSAFE =False
def dianzan():
    time.sleep(0.5)    # 等待 0.5try:
       buttonx,buttony = pyautogui.locateCenterOnScreen(image = 'D:/python/pydoc/pystudy/665.png')   # 尋找 點贊圖片;
       pyautogui.click(buttonx,buttony)
       # 點擊
       print('點贊成功!')
    except TypeError : 
        print("目前接收不了返回的參數")   

while True:  
    
    if pyautogui.locateOnScreen(image = 'D:/python/pydoc/pystudy/665.png'):
        dianzan()   # 調用點贊函數
    else:
        pyautogui.scroll(-200)    # 本頁沒有圖片后,滾動鼠標;
        print('沒有找到目標,屏幕下滾~')

想說的是這個和你預先作為模板的圖片有關,效果也是不一樣的,還有自己如何選擇和滾動,光標預先放置的位置。會有一部分沒點上,自動化點贊了許多。
請添加圖片描述
釋疑

我們來解釋一部分內容,就是這邊我們為什么要捕獲異常

   try:
       buttonx,buttony = pyautogui.locateCenterOnScreen(image = 'D:/python/pydoc/pystudy/665.png')   # 尋找 點贊圖片;
       pyautogui.click(buttonx,buttony)
       # 點擊
       print('點贊成功!')
    except TypeError : 
        print("目前接收不了返回的參數")   


buttonx,buttony會接收返回的坐標,橫縱,前提是如果找到了,但是沒有找到會返回none,那么你要用兩個參數接收的化就肯定不行了,所以我們考慮到這點,讓程序在遇到這種情況的時候拋出異常,然后繼續尋找,不然的化,程序會因為沒找到圖片返回值接收出錯而中斷。所以這個是一個很巧妙的點。

腳注:對個人用這些方法的話,其實沒有太多的技術含量,python這些要求我們會這些方法,調包這些,所以個人一向將python作為輔助工具,當然你要是人工智能這些高級的話就會用到數學這些算法相關的。python呢,是一門很值得去學習的語言,效率高,數據分析強,集成大量的功能,大家給python吹也是有道理的,人工智能沒數據可視化這些,數據分析等等。不得不說,這門語言很優秀。


歡迎大家留言,寫文章太累了。還有后面如果有新的內容的話,還會給本文加入更多自動話程序。

點擊訪問主頁-jgdabc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM