開篇言:py的庫真的是多,封裝相關功能的庫真的是各具神通,里面的輪子很多。前幾天一直回去看基礎的語法函數這些,以及c語言數據結構這些,扎實自己的基礎。
學習是一件很麻煩但是很有意思的事情(我指的是碼代碼),今天為大家介紹這個自動化庫,提高趣味性,當然python的自動化操作還是有好多,后面會為大家繼續推出。
pyautogui庫的趣味操作
一:初步認識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.5 秒
try:
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吹也是有道理的,人工智能沒數據可視化這些,數據分析等等。不得不說,這門語言很優秀。
歡迎大家留言,寫文章太累了。還有后面如果有新的內容的話,還會給本文加入更多自動話程序。