文章图片
- Python 版本:Python 3.8
- 模拟器:雷电模拟器(推荐)|网易 MuMu
- 模拟器分辨率:
1024*576
- 网易 MuMu 显卡渲染模式:兼容(OpenGL)
- 兼容 Windows 系统和 MacOS 系统(不太友好,发热严重且需要重新截图)
- ** 下载「彩云天气」APP,输入我的邀请码:
24066808
,白嫖一年 SVIP。**
思路: 利用 adb 截图后,使用 opencv 找图找色,模拟点击。使用 adb 操作模拟器,相当于后台操作。
我主要为了刷勾玉,所以此工具更侧重地域鬼王,结界突破和秘闻副本,御魂是用来刷突破券的。
为了防止收到鬼使黑的来信,所以增加随机等待的时间比较多,每次随机等待 2-3 秒,导致整体运行速度稍微慢了一些。
此工具适合放在后台干其他工作的同学使用。观赏价值不高。
地域鬼王需要先把姑获鸟,以津真天和山童收藏。
文章图片
结界突破主要是把九宫格的坐标保存到列表,使用
shuffle
方法随机打乱,然后循环执行。目前只支持个人结界突破,并且阵容需要解锁。
文章图片
第一次进入突破会主动失败一次,失败的话难度不会增加,方便刷排名和勾玉使用。
每突破三次会领取一次奖励,等待九次全部完成后,会把右上角突破剩余数量截图上传到腾讯 OCR 识别接口,如果剩余次数大于等于九次,递归执行,否则停止执行。
腾讯 OCR 每月有一千次免费次数。如果只是识别结界券使用,应该是够用了,如果不够用可以按需付费或者自建字典识别。
文章图片
这一步需要申请 腾讯云文字识别 OCR 的 secretId 和 secretKey。
然后新建文件
tencentcloudKeys.py
,写入:secretId = "AKI***********************aYHDtmaOw"
secretKey = "Sg**************************QdZ7X"
模拟器版 部分操作参考 网易 MuMu 开发者必备说明书 和 【雷神命令】常用adb命令整理贴 。
建议直接看雷神模拟器社区的命令整理,比较详细。
运行阴阳师
如果不清楚应用的启动命令,可以先手动运行该程序,然后使用命令:
adb shell dumpsys window | findstr mCurrentFocus
查找正在运行的应用。
启动阴阳师的命令为:
http://www.biyezuopin.vip
adb shell am start -n com.netease.onmyoji.netease_simulator/com.netease.onmyoji.Client
因为我是 iOS,只能扫码登录,所以启动命令对我来说并不实用。
模拟点击
例如我们需要点击 500, 266 这个坐标:
adb shell input tap 500 266
模拟滑动
从
0, 0
滑动到 200, 200
,耗时 0.5 秒:adb shell input swipe 0 0 200 200 500
截图
需要先运行此命令:
adb shell screencap /data/screen.png
再将截图推送到电脑:
adb pull /data/screen.png .
注意:示例中的命令将图片保存到当前路径下。找图
这里借助 opencv 库实现。
http://www.biyezuopin.vip
import cv2def p():
capture_img = ""# 程序运行时的截图
temp_img = ""# 已经保存好的图片img1 = cv2.imread(capture_img)
img2 = cv2.imread(temp_img)
result = cv2.matchTemplate(img1, img2, cv2.TM_CCOEFF_NORMED)if result.max() > 0.9:
return True
找色
如何在截图中获取某坐标的像素值?
import cv2def p(x, y):
capture_img = ""
_img = cv2.imread(capture_img)
img = cv2.cvtColor(_img, cv2.COLOR_BGR2RGB)
r, g, b = img[y, x]# 注意这里的坐标是相反的
return r, g, b
裁剪图片
我们截图完成以后,如何从截图中获取剩余结界突破数量?
import cv2capture_img = ""
img = cv2.imread(capture_img)
cv2.imwrite("new.png", img[12:30, 705:750])# 裁剪坐标为 [y0:y1, x0:x1]
需要注意的是坐标都是 y, x。
双开应用切换
由于多开改版后(2.2.2x86/x64 版本之后)所有的多开应用和原应用都是同一个包名,所以需要通过 UserId 来控制多开的应用。这里以网易云游戏为例,多开后分别获取包名,使用命令:
adb shell dumpsys window | findstr mCurrentFocus
全部都是
com.netease.android.cloudgame/com.netease.android.cloudgame.MainActivity
。所以需要通过切换 UserId 来切换应用。
通过包名来获取对应 UserId:
adb shell ps|findstr com.netease.android.cloudgame
返回如下内容:
文章图片
可以看到原端应用的进程 id 是 u0_a36 ,看所以多开操作分为两步:_
前面的 u0 就行,即 UserId=0;
在 MuMu 上一般原端的 UserId=0,多开端 #N1 的 UserId=10,如此类推 #N2 的 UserId=11,#N3 的 UserId=12,#N4 的 UserId=13
- 切换 UserId
- 打开应用
# 切换原应用
adb shell am start-user 0
adb shell am start --user 0 com.netease.android.cloudgame/com.netease.android.cloudgame.MainActivity# 切换多开应用
adb shell am start-user 10
adb shell am start --user 10 com.netease.android.cloudgame/com.netease.android.cloudgame.MainActivity
【python|基于Python的阴阳师后台全平台辅助】切换之后就可以继续操作了。
推荐阅读
- 笔记|Real-SR超分辨网络
- 架构师|年后腾讯、阿里、滴滴后台面试题汇总总结 — (含答案)
- c++|c++中的extern c以使用
- 自学python|Python爬虫,私活接单记录,假日到手5500,美滋滋
- Python技术|无需破解,Python这个神器帮你免费获取资源,赶紧收藏!
- Linux|【Linux】Shell运行原理及Linux权限的概念
- 计算机视觉算法工程师|算法工程师0——算法工程师学习进阶路线
- java|六面天猫,已拿 offer,我的面经复盘总结,大厂真的有那么难进吗()
- python|分享一个开源免费、功能强大的视频播放器库