引入:
接着上篇的博文,今天我們講如何實現助人為樂
前期准備:
如何獲取圖片中指定文字的坐標?
我的思路是截取一個小區域,再根據小區域左上角的坐標獲取中央坐標
例如:
獲取坐上角的x和y坐標,測量x到紅點的橫向距離x1,在測量y點到紅點的縱向距離y1
可以得出紅點的坐標(x+x1,y+y1)
復制代碼,運行
X1 = 1132 X2 = 1536 time.sleep(3) screenshot(X1, 622, X2, 676,helpedName1)#截圖 mousemove_click(X1 + 200, Y + 30)
截取了一小區域,然后獲得了中心坐標,這里的200和30是自己測量出來的
如果有更好更直接的獲取圖片中指定文字的坐標的方法可以下方評論告訴我,我也學習學習
開始制作外掛:
詳細代碼如下:
imageGrabUtil.py(截圖工具)
#coding=utf-8
from PIL import ImageGrab # 參數說明 # 第一個參數 開始截圖的x坐標 # 第二個參數 開始截圖的y坐標 # 第三個參數 結束截圖的x坐標 # 第四個參數 結束截圖的y坐標 def screenshot(x1,y1,x2,y2,filename): bbox = (x1, y1, x2, y2) im = ImageGrab.grab(bbox) # 參數 保存截圖文件的路徑 im.save('E:\\python_project\\Asktao_Automation\\resource\\'+filename+'.png')
baiduAipUtil.py(文字識別工具)
我這里百度雲的APPP_ID、API_KEY、SECRET_KEY保存在config.ini
#coding=utf-8
from aip import AipOcr import re #百度文字識別 # !/usr/bin/env python # -*- coding:utf-8 -*- import ConfigParser import os os.chdir("E:\python_project\Asktao_Automation\util") cf = ConfigParser.ConfigParser() cf.read("config.ini") secs = cf.sections() APPP_ID = cf.get("baiduAip","APPP_ID") API_KEY = cf.get("baiduAip","API_KEY") SECRET_KEY = cf.get("baiduAip","SECRET_KEY") client = AipOcr(APPP_ID,API_KEY,SECRET_KEY) def characterRecognition(filePath): i = open(filePath,'rb') img = i.read() message = client.basicGeneral(img); #print(message.get('words_result')) string = ''; for i in message.get('words_result'): print(i.get('words')) string += i.get('words') return string
config.ini
[baiduAip]
APPP_ID = APPP_ID
API_KEY = API_KEY
SECRET_KEY = SECRET_KEY
joyByHelpingPeople.py
我只做了馮喜來和楊鏢頭的部分,其他人物的可以用同樣的方法做出來,先走完流程,再寫代碼
#coding=utf-8 import autopy import time import win32api import win32con from imageGrabUtil import screenshot from baiduAipUtil import characterRecognition import sys defaultencoding = 'utf-8' if sys.getdefaultencoding() != defaultencoding: reload(sys) sys.setdefaultencoding(defaultencoding) #助人為樂 #time.sleep(5) win32api.keybd_event(18,0,0,0) #alt鍵位碼是18 win32api.keybd_event(9,0,0,0) #tab鍵位碼是9 time.sleep(0.5) win32api.keybd_event(13,0,0,0) #enter鍵位碼是13 win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0) #釋放按鍵 win32api.keybd_event(9,0,win32con.KEYEVENTF_KEYUP,0) win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0) time.sleep(2) def mousemove_click(x,y): autopy.mouse.smooth_move(x, y) autopy.mouse.click() #幫助馮喜來 def fengXiLai(Y): mousemove_click(X1+200,Y+30) #鼠標移到按鈕中央,點擊馮喜來按鈕 for i in range(1,4,1): mousemove_click(1448,380) time.sleep(150) #打強盜、無名劍客平均時間150s mousemove_click(1515, 258)#跳過對話 mousemove_click(1515, 258) time.sleep(15) mousemove_click(1448, 380)# 白邦芒處領賞 #幫助楊鏢頭 def yangBiaoTou(Y): mousemove_click(X1 + 200, Y + 30) for i in range(1,5,1): #和張老板對話,傳遞心意,找張老板,找玄武 mousemove_click(1448, 380)#點任務欄 和張老板對話 time.sleep(15) mousemove_click(1515, 258) # 跳過對話 mousemove_click(1448, 380) # 點任務欄 尋找竊賊 time.sleep(45)#和竊賊對戰時間45s mousemove_click(1515, 258) # 跳過對話 for i in range(1,5,1): #向張老板復命,月老,蓮花姑娘,張老板 mousemove_click(1448, 380) # 點任務欄 向張老板復命 time.sleep(15) mousemove_click(1515, 258) # 跳過對話 mousemove_click(771, 203) # 活動的坐標 mousemove_click(1359,503) #前往的坐標 time.sleep(15)#從天墉城城中心/其他地圖走到白幫忙花費15s mousemove_click(1336,649) #領賞 #為了獲取圖片中指定文字的坐標,這里需要分開截圖 helpedName1 = "helpedName1" X1 = 1132 X2 = 1536 time.sleep(3) screenshot(X1, 622, X2, 676,helpedName1)#截圖 judgehelpedNameStr1 = characterRecognition('E:\\python_project\\Asktao_Automation\\resource\\'+helpedName1+'.png')#文字識別 helpedName2 = "helpedName2" screenshot(X1, 690, X2, 741,helpedName2)#截圖 judgehelpedNameStr2 = characterRecognition('E:\\python_project\\Asktao_Automation\\resource\\'+helpedName2+'.png')#文字識別 if '馮喜來' in judgehelpedNameStr1: fengXiLai(622) elif '馮喜來' in judgehelpedNameStr2: fengXiLai(690) elif '楊鏢頭' in judgehelpedNameStr1: yangBiaoTou(622) elif '楊鏢頭' in judgehelpedNameStr2: yangBiaoTou(690)
至此,回合制手游(如問道)的所有任務的腳本都可以用這三篇教程的所講方法去做
若有更簡潔的方法,歡迎指出
三篇教程的所有代碼請點擊這里獲取