所用工具環境
python3.6.5 和 支持自動鼠標鍵盤點擊等編程的pyautogui功能包
windows PC,安卓模擬器bluestacks,安裝王者榮耀
基本思路
王者榮耀有闖關任務模式可以獲得金幣,任務兩三分鐘一般就可以完成,支持自動模式,一次可獲取三四十金幣,且可以重復刷取。
利用腳本,模擬任務開啟點擊,進入后自動執行,中間對話跳過,最后任務完成檢測,再次啟動任務。均是通過截屏信息獲取當前在做什么,然后應該點擊什么,如此往復執行。
腳本所用關鍵功能說明
網上有關于pyautogui包的使用的一些參考,有一些是相對過期的,功能接口調用存在些差別,可以在安裝pyautogui包后,使用python doc 來查找相關API說明。
pyautogui.screenshot 用于截屏。
下面是py doc中函數原型,可傳入文件名,最終返回截屏圖片,保存在本地
screenshot = _screenshot_win32(imageFilename=None)
pyautogui.locateOnScreen 用于查找局部圖片位置(像素點區域位置)。輸入圖片文件名,最終返回圖片所在位置,如果當前屏幕不存在該圖片,則返回None
locateOnScreen(image, grayscale=False, region=None)
事先截取好中間需要點擊的按鈕圖片,保存在本地,然后截屏中去匹配查找按鈕圖片是否存在及其位置(該函數實際并不需要事先調用screenshot)
pyautogui.center 用于獲取某一像素區域的中心像素點位置。
center(coords)
源文件
pics中是事先截取的
實際運行效果展示
最開始選用最后一個關卡任務(大師級)
下一步,進入任務后,再啟用腳本
后面就自動執行了
錄制過屏幕,markdown下視頻無法上傳,想制作gif來這的,視頻太大需要一定裁剪處理,暫時不會。。
源碼展示
很簡單,重在功能,沒有注重什么規范
(業余python選手,工作之中也是python用于內部工具開發,代碼槽點可能較多)。
# -*- coding: utf-8 -*-
import pyautogui
import time
pyautogui.FAILSAFE = False
screenshot = pyautogui.screenshot
pngLocate = pyautogui.locateOnScreen
def click(x,y):
pyautogui.moveTo(x,y)
pyautogui.click()
def get_button_center_from_screen(button_png,png_path='pics'):
screen = screenshot("screen.png")
button_png = png_path + '\\' + button_png
start_pos = pngLocate(button_png)
if start_pos == None:
#找不到button
print("{} not exsit on current screen".format(button_png))
return 0,0
return pyautogui.center(start_pos)
def AutoMouse():
print("Start")
n = 1
while(n<60):
print("{now} 第{n}次\n".format(now=time.strftime("%m-%d %H:%M:%S"), n=n))
x, y = get_button_center_from_screen('開始闖關.PNG')
click(x,y)
time.sleep(5)
loading = False
#是否正在加載中
while(1):
x,y = get_button_center_from_screen('加載中.PNG')
time.sleep(3)
if (x,y) != (0,0):
break
loading = False
print("加載中\n")
while(1):
x,y = get_button_center_from_screen('加載中.PNG')
if (x,y) == (0,0):
break
print("加載完成\n")
#檢查是否初始畫面需要跳過
x,y = get_button_center_from_screen('跳過.PNG')
if (x,y) == (0,0):
print("no need Jump over")
else:
print("need Jump over")
click(x,y)
#檢查是否已經啟用自動
x,y = get_button_center_from_screen("未啟用自動.PNG")
if (x,y) != (0,0):
print("not auto run")
click(x,y)
else:
print("already auto run")
#運行監測,是否結束,以及中間存在需要跳過,結束則開啟下一次 每5s檢測一次
while(1):
time.sleep(3)
x,y = get_button_center_from_screen('跳過2.PNG')
if (x,y) == (0,0):
print("no need Jump over")
else:
print("need Jump over")
click(x,y)
x,y = get_button_center_from_screen("結束后繼續.PNG")
if (x,y) == (0,0):
print("not over")
else:
print("all over.\n")
click(x,y)
time.sleep(5)
#start 闖關
print("Start again")
x, y = get_button_center_from_screen('再次挑戰.PNG')
n = n+1
click(x,y)
time.sleep(10)
break
if __name__ == '__main__':
AutoMouse()
注意事項
腳本可能需要在管理員權限下執行(cmd啟動時以管理員身份運行)(click執行沒有效果的時候,就是權限問題導致的)
由于電腦尺寸可能不是絕對一樣,所以事先截取的按鈕圖片可能都不一樣,自行截取個人PC上實際王者榮耀刷任務運行時畫面,對應替換
個人在使用過程中遇到過的問題:
有一次晚上掛機,電腦死過機,應該和這個沒關系。。。
安卓模擬器中的王者榮耀出現卡機(手動點擊也是沒有反應,最后只好重啟了模擬器),不知有沒有關系
加載圖片 匹配不到,原因是王者榮耀有更新,任務開始后加載頁面的廣告有變化,建議截取關鍵按鈕時,盡量截取小部分,不要截取太多。
后續
可以做的更好,日志記錄實際運行情況,出問題時,方便回溯。利用圖片識別技術來識別圖片中的文字,來找到對應按鈕的位置。健壯性考慮,如果中間偶爾出現卡機,點擊失效,如何檢測出來,以及后續該怎么處理。當然需要更高的技術要求。喜歡且有相關能力的可以搞一下。
歡迎留言交流 _