用pyautogui給粉絲們點(diǎn)贊
2024-06-10 加入收藏
用pyautogui給粉絲們點(diǎn)贊【#172】
歡迎訪問「Python3分鐘」系列。「花3分鐘時(shí)間」,學(xué)習(xí)或溫習(xí)一個(gè)Python知識(shí)點(diǎn)。今天是第172。
?上期的「Python3分鐘」系列給大家介紹了
pyautogui
的基本使用。但是有細(xì)心的小伙伴發(fā)現(xiàn)了,我并沒有介紹
?pyautogui
模塊最核心的使用方法 -- 「圖片定位」
「如果你還不會(huì)pyautogui
模塊的基本使用,請進(jìn)入下面的傳送門學(xué)習(xí):」
解放雙手!Python自動(dòng)化必知必會(huì)的小技能【#171】
屏幕圖片定位
上期我們只能通過坐標(biāo)點(diǎn)去操作鼠標(biāo)的位置,如果每次都用這種方式定位,是非常不方便的。
所以如果能識(shí)別出指定元素的坐標(biāo),那真的是極極好。。
使用pyautogui
模塊定位指定元素坐標(biāo)也很簡單,先把圖片元素文件的路徑傳入pyautogui模塊的locateOnScreen
或locateAllOnScreen
函數(shù)即可。
?locateOnScreen函數(shù)只返回第一處識(shí)別的位置信息;
locateAllOnScreen函數(shù)則返回匹配到所有的識(shí)別的位置信息
這個(gè)匹配非模糊匹配,匹配對(duì)象和傳入對(duì)象要完全一樣才能正確匹配。
?
匹配桌面文件夾圖標(biāo)
我桌面上有兩個(gè)文件夾;截取文件夾圖標(biāo);
結(jié)合代碼識(shí)別文件夾坐標(biāo)位置信息;
識(shí)別單個(gè)文件夾圖標(biāo)
import pyautogui
folder = pyautogui.locateOnScreen('icon.png')
print(folder)
運(yùn)行結(jié)果:
Box(left=17, top=88, width=82, height=68)
識(shí)別多個(gè)文件夾圖標(biāo)
import pyautogui
folders = pyautogui.locateAllOnScreen('icon.png')
print(list(folders))
運(yùn)行結(jié)果:
[Box(left=17, top=88, width=82, height=68), Box(left=106, top=146, width=82, height=68)]
轉(zhuǎn)成x,y坐標(biāo)
從返回的結(jié)果看出,返回的并不是一個(gè)點(diǎn)的坐標(biāo)數(shù)據(jù),而是一個(gè)塊狀的范圍數(shù)據(jù)。
所以我們需要把這個(gè)塊狀
數(shù)據(jù)轉(zhuǎn)為點(diǎn)
數(shù)據(jù),以方便假鼠標(biāo)
能更方便去點(diǎn)擊。
方法一
可以直接使用pyautogui.locateCenterOnScreen
方法獲得匹配中的圖標(biāo)中心坐標(biāo);
import pyautogui
print(pyautogui.locateCenterOnScreen('icon.png'))
運(yùn)行結(jié)果:
Point(x=58, y=122)
但這個(gè)方式只能取到一個(gè)坐標(biāo)。
方法二
使用pyautogui.center
函數(shù),獲得塊狀數(shù)據(jù)
的中心點(diǎn)坐標(biāo)。
import pyautogui
folder = pyautogui.locateOnScreen('icon.png')
print(pyautogui.center(folder))
運(yùn)行結(jié)果:
Point(x=58, y=122)
使用這個(gè)方法可以遍歷塊狀數(shù)據(jù)
批量獲得對(duì)應(yīng)的中心點(diǎn)坐標(biāo)數(shù)據(jù)。
綜合實(shí)例
用pyautogui
模塊做一個(gè)簡單B站評(píng)論點(diǎn)贊器:
需要識(shí)別的贊
圖標(biāo):
還有就是當(dāng)識(shí)別到已經(jīng)底部時(shí),代碼退出運(yùn)行,
我找到這一個(gè)標(biāo)識(shí):
點(diǎn)贊邏輯也很簡單,如果在界面上沒有識(shí)別到贊
的圖標(biāo)則頁面往下滾動(dòng),
如果識(shí)別到了,則對(duì)其進(jìn)行點(diǎn)擊,
如果識(shí)別到底部標(biāo)識(shí),則退出程序。
相關(guān)圖片標(biāo)識(shí):
示例代碼:
import pyautogui
pyautogui.FAILSAFE = True
end_flag = False
def click_like(box_data):
for i in box_data:
pyautogui.click(pyautogui.center(i))
print('點(diǎn)贊成功!')
while not end_flag:
end_flag = pyautogui.locateCenterOnScreen('end.png')
targets = pyautogui.locateAllOnScreen('icon.png')
if targets:
click_like(targets)
pyautogui.scroll(clicks=-800)
print('往下滾動(dòng)!')
print("全部點(diǎn)完,退出程序!")
運(yùn)行效果圖:
?圖標(biāo)識(shí)別需要費(fèi)點(diǎn)時(shí)間,所以需要耐心等待,并不是代碼問題。