步骤:
1.找到手机模拟器的句柄
2.设置模拟器窗口位置和大小
3.鼠标模拟点击抽卡位置
4.对模拟器进行截图
5.识别截图中蓝卡 紫卡 金卡数量
因为是自己写着用,变量名很随意
首先是找到模拟器的句柄,有了句柄才能操作这个窗口位置大小。这里我用的spy++这个软件
把这个标移动到模拟器上获取他的句柄
使用win32gui中FindWindow这个函数,分别把spy++得到的类名和标题传进去,就成功得到了他的句柄
import win32gui
LEIDIAN = win32gui.FindWindow("LDPlayerMainFrame", "雷电模拟器") # 类名,标题
然后调用ShowWindow(句柄,win32con.SW_SHOW)函数来把模拟器窗口显示在上方
用SetWindowPos函数调整窗口的位置大小,函数用法百度一下
import win32con
# 显示窗口
win32gui.ShowWindow(LEIDIAN, win32con.SW_SHOW)
win32gui.SetWindowPos(LEIDIAN, win32con.HWND_TOPMOST, -1930, 0, 700, 1040, win32con.SWP_SHOWWINDOW)
# 调整应用位置
鼠标模拟点击用pyautogui.click函数
from PyQt5.QtWidgets import QApplication
pyautogui.click(-1771, 902, clicks=1, button="left")
#(x,y,点击次数,点哪个键)
获取屏幕上坐标我用这个软件,用法非常简单并且还可以识别像素颜色桌面坐标获取工具【易语言开源】下载-桌面坐标获取工具【易语言开源】v1.0免费版下载 - 非凡软件站桌面坐标获取工具【易语言开源】能够对鼠标的位置坐标进行获取,软件操作简单,即使是没有电脑操作经验的用户也能够快速上手使用,通过该软件用户可以一键复制坐标,同时支持快捷键操作,非常的实用,如果你是平面设计师需要用到坐标获取,那么这款软件再合适不过了!https://www.crsky.com/soft/238509.html#down对模拟器进行截图并保存(网上找来的方法)
from PIL import Image
from PyQt5.QtWidgets import QApplication
import sys
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
img = screen.grabWindow(LEIDIAN).toImage() # LEIDIAN是我句柄的变量名
img.save("screenshot.jpg")
下一步就到怎么识别抽卡颜色了,这里比较麻烦,我的方法是识别截图中这些坐标的颜色
这也是网上找来的,用途是传进x,y的坐标然后将他的RGB颜色转为一个元组返回
截图的像素坐标为我是右键这个截图,点编辑,里面左下角可以看到你指针所在的图像中的坐标
from PIL import Image
def getPngPix1(x, y, pngPath="screenshot.jpg"):
img_src = Image.open(pngPath)
img_src = img_src.convert('RGBA')
img_array = img_src.load()
data = img_array[x, y]
img_src.close()
return data
下一步是根据像素颜色识别抽卡颜色
o = 0
b = 0
c = 0
def shaka(a):
global o, b, c
if a[0] > 60 and a[0] < 95: # 元组中第一个元素在这个区间中为蓝色
o += 1
elif a[0] > 95 and a[0] < 150: # 紫色
b += 1
else: # 金色
c += 1
return o, b, c
shaka(getPngPix1(324, 113)) # 把getPngpix1这个函数返回的元组传进这个识别颜色的函数中
最后只要加上循环和打印和金卡数量大于几结束程序就好了,这是我的全部代码,好多都是网上找的
import sys
import win32con
import time
from PyQt5.QtWidgets import QApplication
import win32gui
import pyautogui
from PIL import Image
def getPngPix1(x, y, pngPath="screenshot.jpg"):
img_src = Image.open(pngPath)
img_src = img_src.convert('RGBA')
img_array = img_src.load()
data = img_array[x, y]
img_src.close()
return data
def shaka(a):
global o, b, c
if a[0] > 60 and a[0] < 95:
o += 1
elif a[0] > 95 and a[0] < 150:
b += 1
else:
c += 1
return o, b, c
# 找出窗体编号
LEIDIAN = win32gui.FindWindow("LDPlayerMainFrame", "雷电模拟器") # 类名,标题
# 隐藏窗体
# win32gui.ShowWindow(XHZMG, win32con.SW_HIDE)
# time.sleep(1)
# 显示窗体
win32gui.ShowWindow(LEIDIAN, win32con.SW_SHOW)
win32gui.SetWindowPos(LEIDIAN, win32con.HWND_TOPMOST, -1930, 0, 700, 1040, win32con.SWP_SHOWWINDOW)
# 调整应用位置
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
o = 0
b = 0
c = 0
e = 0
for i in range(1000):
o = 0
b = 0
c = 0
pyautogui.click(-1771, 902, clicks=1, button="left")
time.sleep(1.5)
img = screen.grabWindow(LEIDIAN).toImage()
img.save("screenshot.jpg")
# 上面是截屏雷电模拟器
shaka(getPngPix1(324, 113))
# print(getPngPix1(324, 113))
shaka(getPngPix1(475, 113))
# print(getPngPix1(475, 113))
shaka(getPngPix1(616, 261))
# print(getPngPix1(616, 261))
shaka(getPngPix1(616, 498))
# print(getPngPix1(616, 498))
shaka(getPngPix1(476, 647))
# print(getPngPix1(476, 647))
shaka(getPngPix1(325, 646))
# print(getPngPix1(325, 646))
shaka(getPngPix1(187, 494))
# print(getPngPix1(187, 494))
shaka(getPngPix1(189, 263))
# print(getPngPix1(189, 263))
shaka(getPngPix1(325, 383))
# print(getPngPix1(325, 383))
shaka(getPngPix1(475, 383))
# print(getPngPix1(475, 383))
e += 1
print("蓝卡%d,紫卡%d,金卡%d,本次执行了%d次" % (o, b, c, e))
if c >= 4:
exit()