基于python的明日方舟自动刷取理智的脚本(一)—— 初始化环境

写在前面的话

身为一名计算机专业的懒鬼和明日方舟三年老博士(悲,在学习编程之后便一直有想法做一个脚本来解放我的双手。奈何此前一直没有多余的时间,放了假也是泡在网吧里。这学期接触了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)

 Change 函数

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

Init_Exit函数 ——————————————————————————

def Init_Exit():
    pyautogui.press('esc')
    time.sleep(1)

 按下一次esc键后休眠1秒

————————————————————————————————-——————

 Is_Daily函数————————————————————

def Is_Daily():#签到初始化函数
    try:#检查每日签到
        x,y = pyautogui.locateCenterOnScreen('\Arknight\picture\Every Day.jpg',confidence=0.8)
        Init_Exit()
    except:
        pass

 在全屏范围内查找

 若存在则使用Init_Exit()函数退出

———————————————————————————————— 

Is_System_Bulletin函数————————————————————

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

 识别到这个图片,执行Init_Exit函数

若报错,则识别,后同上。

最后无论如何均会跳过(对应一天内多次登录后不会有第二次弹出系统公告)

—————————————————————————————————— 

Check_Email函数————————————————————————

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(默认) 

若存在点击

模拟点击

模拟点击,最后按下esc

若中间报错则直接退出(对应无最新邮件)

———————————————————————————— 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值