引入:
接著上篇的博文,今天我們講如何實現助人為樂
'''
作者:Rest探路者
源自:https://www.cnblogs.com/Java-Starter/p/9609671.html
'''
前期準備:
如何獲取圖片中指定文字的坐標?
我的思路是擷取一個小區域,再根據小區域左上角的坐標獲取中央坐標
例如:
獲取坐上角的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)
至此,回合制手遊(如問道)的所有任務的指令碼都可以用這三篇教程的所講方法去做
若有更簡潔的方法,歡迎指出