身为一名计算机专业的懒鬼和明日方舟三年老博士(悲,在学习编程之后便一直有想法做一个脚本来解放我的双手。奈何此前一直没有多余的时间,放了假也是泡在网吧里。这学期接触了pyautogui库后,又恰逢期中考试结束,就萌生了写个脚本的想法,在经历各种艰难困苦之后,历时两星期半,完成了初步的脚本制作。
本脚本基于
import pyautogui
import time
from win32 import win32gui,win32api
import win32con
使用的模拟器为雷电模拟器(可更换,没打广告)
使用的编程平台vscode2022
print("初始化正在进行中")
a = pyautogui.prompt(text = "1. 激进策略(高级芯片),2.保守策略(普通芯片)",title = "请选择策略")
b = pyautogui.password(text = '请输入验证口令',title = "源石访问验证",mask = "*")
MoveAndClick('picture\search cusor.jpg',0.9)
pyautogui.press('l')
pyautogui.press('d')
pyautogui.press('m')
pyautogui.press('n')
pyautogui.press('q')
time.sleep(1)
pyautogui.press('space')
time.sleep(1)
try:
MoveAndClick('picture\Simulator.jpg',0.9)
except:
print("请将输入法切换小写或安装雷电模拟器")
time.sleep(8)
hwnd = change('雷电模拟器')#change为自定义函数
这一段思路为从搜索栏找到图片
并点击,然后使用库中对键盘的操作来搜索模拟器,再次点击。
def MoveAndClick(a,c):
x,y = pyautogui.locateCenterOnScreen(a,confidence=c)#confidence为图片可信度
pyautogui.click(x,y)
time.sleep(1)
def foo(hwnd,mouse):#获取当前标题
global titles
if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):#窗口存在,可视且窗口可使用
titles.add( win32gui.GetWindowText(hwnd))#获取窗口标题
def change(Name):#本含要求要有元组接收
win32gui.EnumWindows(foo, 0)#枚举当前窗口
lt = [t for t in titles if t]
lt.sort()
for t in lt:
if(t.find(Name)) >= 0:
hwnd = win32gui.FindWindow(None, t)#得到窗口句柄
#print(hwnd)#得到句柄
win32gui.SetWindowPos(hwnd,win32con.HWND_TOPMOST,0,0,2000,1000,win32con.SWP_SHOWWINDOW)#win32con.HWND_TOPMOST将窗口至于所有窗口的最顶层,显示窗口
hwnd = win32gui.FindWindow(None, t)#得到窗口句柄
size = win32gui.GetWindowRect(hwnd)#获取窗口位置,返回左上角坐标和高及宽
return hwnd
#------------------------------------------------
随后使用窗口句柄将模拟器放置在指定位置(方便后期图像识别取材及图像识别)(人话:固定位置,图长得一样,匹配成功率高)
time.sleep(3)
try:
MoveAndClick(r'\Arknight\picture\_20221123000957.jpg',0.8)#这里有一个问题,当前目录要加\
except:
try:
print(' 当前神经传输存在波动')
time.sleep(10)
MoveAndClick(r'\Arknight\picture\_20221123000957.jpg',0.8)
except TypeError:
print('请检查精神状况')
time.sleep(14)
try:#检查更新
MoveAndClick('\Arknight\picture\Start Arknight.jpg',0.9)
except:
print('检测到终端更新')
time.sleep(10)
try:
MoveAndClick('\Arknight\picture\Start Arknight.jpg',0.9)
except:
pass
time.sleep(20)
模拟点击明日方舟图标
模拟点击开始图标
接下来检查签到,检查系统公告,检查邮件,最后返回句柄和两个值
try:#检查月卡
MoveAndClick('\Arknight\picture\daily sup.jpg',0.8)
except:
pass
time.sleep(8)
Is_Daily()
time.sleep(8)
Is_System_Bulletin()
print('神经链接完成')
time.sleep(8)
Check_Email()
print('邮件检查完成')
print('初始化完成')#初始化调试完成
return hwnd,a,b
def Init_Exit():
pyautogui.press('esc')
time.sleep(1)
按下一次esc键后休眠1秒
————————————————————————————————-——————
def Is_Daily():#签到初始化函数
try:#检查每日签到
x,y = pyautogui.locateCenterOnScreen('\Arknight\picture\Every Day.jpg',confidence=0.8)
Init_Exit()
except:
pass
在全屏范围内查找
若存在则使用Init_Exit()函数退出
————————————————————————————————
def Is_System_Bulletin():#系统公告初始化函数
try:#检查系统公告
x,y = pyautogui.locateCenterOnScreen('\Arknight\picture\System bulletin.jpg',confidence=0.8)
Init_Exit()
except TypeError:
try:
x,y = pyautogui.locateCenterOnScreen(r'\Arknight\picture\activity bulletin.jpg',confidence=0.8)
Init_Exit()
except:
pass
finally:
pass
最后无论如何均会跳过(对应一天内多次登录后不会有第二次弹出系统公告)
——————————————————————————————————
def Check_Email():
try:#检查邮件
x,y = pyautogui.locateCenterOnScreen('\Arknight\picture\Email.png')
MoveAndClick('\Arknight\picture\Email.png',0.9)
MoveAndClick('\Arknight\picture\Payemail.png',0.9)
MoveAndClick('\Arknight\picture\Confirm.png',0.9)
pyautogui.press('esc')
except:
pass
这个图片(注意,为了不与没有邮件的情况混淆,图片识别可信度调为1(默认)
若中间报错则直接退出(对应无最新邮件)
————————————————————————————