本人0.0001基础小白,欢迎大佬指点。
目标:游戏里面的商品是由别的玩家售卖,价格是波动的,想要买到一个好价格需要不断查看其他玩家的商店,并识别商店内是否有所需要的商品,有商品就点击查看价格,识别价格和心里预期价格进行比较,低于价格预期弹出窗口提醒购买。
思路:
1.用pyautogui来进行鼠标的移动和点击,以及图片的识别,为防止游戏进行脚本检测用random来偏移鼠标点击位置,但要确保点击位置准确,不能超过作用范围
2.用pyautogui来获取固定区域内是否相应的商品的图片
2..用pyautogui来获取区域截图,用opencv处理价格区域的截图,获取int类型的价格
4.用win32api进行窗口的弹出
代码引用了csdn上一些大佬的代码 但是我写这个代码断断续续,前面的引用大部分都找不到了,大佬见谅。如有侵权立即删除。
另外代码如果在pycharm里运行 会出现一直循环 知道找到商品否则关不掉。
后面等自己水平提高会更新
代码如下:
# import the necessary packages
from imutils.perspective import four_point_transform
from imutils import contours
import imutils
import cv2
import pyautogui
import pytesseract
import random
import win32api, win32con
from PIL import Image
import goto
from goto import with_goto
from goto import goto, label
# define the dictionary of digit segments so we can identify
# each digit on the thermostat
@with_goto
def fun2(u,v):
#u,v需要点击的图片的中心点
de3 = random.random()
de4 = random.random()
de1 = u + de3
de2 = v + de4
pyautogui.moveTo(de1, de2, duration=0.25)# 移动到偏移后的位置
a = random.random()
b = 1 + a
pyautogui.click(duration=b)
# ---------------------------------------------------图片比对-------------------------------------------------------------
#确定目标商品的中心点坐标
l = pyautogui.locateCenterOnScreen(r'目标商品图片', region=(1507, 361, 348, 313), confidence=0.9)
while l is None:
fun2(1769, 651)
l = pyautogui.locateCenterOnScreen(r'目标商品图片', region=(1507, 361, 348, 313), confidence=0.9)
else:
center1, center2 = l
center1 = float(center1)
center2 = float(center2)
fun2(center1, center2)
# --------------------------------------------------价格区域截图-----------------------------------------------------------
im1 = pyautogui.screenshot(r'价格截图的位置和名字',region=(1577, 742, 85, 14))
# ----------------------------------------------------价格识别------------------------------------------------------------
image = cv2.imread(r'价格截图')
image = imutils.resize(image, height=500)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255,
cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (1, 5))
thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
cv2.namedWindow("Demo3", cv2.WINDOW_NORMAL)
cv2.resizeWindow("Demo3", 405, 68)
text = pytesseract.image_to_string(thresh)
n1 = text.replace(',', '')
n2 = int(n1)
if n2 <= 14000000:
win32api.MessageBox(0, '有货,速来', '价格比较窗口', win32con.MB_OK)
else:
goto.begin