赞
踩
当你想抢王者聊天频道的皮肤碎片红包,或者想和小姐姐(小哥哥)开游戏的时候。可以使用python自动化工具,进行自动化加入开黑房间(一般小姐姐开黑会开语音,然后就会有大佬带,然后就容易上分,哈哈哈)。然后可以喝个奶茶,看个电影~一边等待,加入上分的队伍(所需工具下载链接详见文章尾部)
B站视频传送门:攻城狮晚的个人空间_哔哩哔哩_Bilibili
目录
Android Debug Bridge 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具
下载工具包后,解压到英文路径后,添加系统环境变量
下载驱动之后,点击安装驱动
AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载
我是win10系统,所以下载了这个
下载装好之后,会自动运行 SDK Manager。如果没有的话,开始菜单或者安装目录找一下,运行就好。
测试了一下安装还挺快的,我安装的是这几个
1、下载jdk1.8安装(据说其他版本使用UiAutoMatorViewer有问题):
可以先查看jdk(Java Development Kit——Java开发工具包)版本。开始菜单输入cmd,打开命令行窗口,输入java -version查看:
如果没有jdk的话,可以从如下网址下载安装
https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html
2、下载UiAutoMatorViewer
https://dfenghuoyunji.jb51.net/201904/tools/uiautomatorviewer.rar
下载后,将里面的uiautomatorviewer.jar文件复制到之前安装的sdk的 tools/lib目录下
如果不放心的话,可以将之前的uiautomatorviewer.jar 备份一下
Sdk目录下的tools目录中,uiautomatorviewer.bat可以备份下,然后最后一行Dcom.android.uiautomator.bindir=后接adb实际存放路径。
我放在了D:\program files\Android\abd下
此时即可双击运行uiautomatorviewer.bat,打开uiautomatorviewer
1、使用获取截图png和uix文件,保存到当前文件夹:
adb shell screencap -p /sdcard/sc.png
adb pull /sdcard/sc.png
adb shell uiautomator dump /sdcard/sc.uix
adb pull /sdcard/sc.uix
2、使用uiautomatorviewer工具查看能否解析成功
经过测试,手机桌面是可以解析的
但是王者游戏界面无法解析
所以准备使用百度文字识别api,进行操作,大致思路如下:
可以免费领取百度文字识别api的额度,如下网址:
https://cloud.baidu.com/doc/OCR/s/9k3h7xuv6#通用文字识别(高精度含位置版)
如果没有申请的话,默认是收费的,含位置信息的,最便宜的大概0.01元/次调用
里面有相应的调用方式参考代码示例
Token的话,可以参考这个文档,需要先创建应用
https://ai.baidu.com/ai-doc/REFERENCE/Bkru0l60m
作者还试用了iOCR通用版,就是你可以选择需要识别的位置,指定参考点。但是经过测试,无法满足需求。
Adb调试,使用的是华为的鸿蒙手机(百度了一下,鸿蒙系统居然不是安卓了,不过应该是为了通用,adb工具还是可以进行调试的)。
连接手机后,电脑端会跳出华为手机助手,验证过后。Cmd中使用adb截图。如果截图不了的话,华为手机助手会提示再次验证。验证通过后,即可使用adb命令
Cmd中截图,查看没问题后,使用python脚本进行测试。其中点击屏幕命令如下:
adb shell input tap 522 1120(x y)
- import os
- import time
- import base64
- import shutil
- import requests
- from PIL import Image
-
-
- def Myexec(Tstr):
- # 自定义执行命令函数,方便调试
- os.system(Tstr)
-
-
-
- # client_id 为官网获取的AppKey, client_secret 为官网获取的SecretKey
- host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【你的AppKey】&client_secret=【你的SecretKey】'
- response = requests.get(host)
- if response:
- response = response.json()
- token = response["access_token"]
- print(response)
- print(token)
- # 可以将token保存为文件,需要的时候再取出来,这里不保存也能用,所以先不保存。
- # 默认过期时间30天["expires_in"]
-
-
- # 网络图片文字识别(含位置版)0.03一次,无折扣。能否检测,暂未尝试
- # 通用文字识别(高精度版)0.03一次,多了有折扣
- # request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic" # 可以检测出♀
-
- # 通用文字识别(高精度含位置版)0.04一次,多了有折扣
- # request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate" # 可以检测出♀
-
- # 通用文字识别(标准版含位置)0.01一次,多了有折扣
- request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general" # 可以检测出♀
- # 通用文字识别,不含位置的0.005一次,多了有折扣。总结了一下,还是需要位置比较好,不包含位置的,不方便点击。
-
-
- spic = 'sc.png'
- dpic = "tmp.png"
-
- abd1 = 'adb shell screencap -p /sdcard/'+spic
- abd2 = 'adb pull /sdcard/'+spic
- # adb shell screencap -p /sdcard/sc.png
- # adb pull /sdcard/sc.png
-
- testCount = 100 # 多少次循环没有找到合适的队伍及停止
- testN = 0 # 当前截屏识别次数
- clickOk = 0 # 进入队伍的标志
-
- while testN<testCount:
- testN+=1
- time.sleep(2) # 经过2秒获取一次截屏(5秒以内都行)。因为王者聊天频道刷新时间大概是5秒
- Myexec(abd1) # 获取截屏
- Myexec(abd2) # 从手机拉(复制)到本地
- im = Image.open(spic)#返回一个Image对象:[宽,高]
- spicW = im.size[0]
- spicH = im.size[1]
- DpicW = spicW/2
- print('第%d次尝试,截屏的宽:%d,高:%d'%(testN,spicW,spicH))
- # 裁剪一半、保存。增加响应速度。对于王者进入队伍的需求来说,只需要左半部分进行图片识别即可
- cropped = im.crop((0, 0, DpicW, spicH)) # (left, upper, right, lower)
- cropped.save(dpic)
- t = time.time()
- tmpName = "sc"+str(t)+".png"
- shutil.copy(dpic,"tmp/"+tmpName) # 保存到临时文件夹
-
- # 二进制方式打开图片文件,base64编码后,发送给百度api
- f = open(dpic, 'rb')
- img = base64.b64encode(f.read())
- params = {"image":img}
- access_token = token
- request_url = request_url + "?access_token=" + access_token
- headers = {'content-type': 'application/x-www-form-urlencoded'}
- response = requests.post(request_url, data=params, headers=headers) # 获取百度翻译api的返回值
- if response:
- response = response.json() # 解析返回值为json格式
- wres = response["words_result"]
- thisGhw = 0
- print (wres)
- for w in wres:
- # if "皮肤碎片红包" in w["words"]: # 也可以判断是否有红包,然后点击。哈哈哈,这个就留给大家自己去尝试了
- tWords = w["words"]
- if "♀" in tWords: # 男生的这个符号♂,经过测试,百度api识别不出来
- thisGhw = w["location"]["top"] # 文字距离屏幕截图顶部的距离 70-80,78
- thisGww = w["location"]["left"] # 文字距离屏幕截图左边的距离 110-120,116
- print("girl",thisGhw,thisGww)
- # if ("五人排位" in tWords or "无限乱斗" in tWords) and ("3/5" in tWords or "4/5" in tWords or "35)" in tWords or "45)" in tWords):
- if "排位" in tWords or "无限乱斗" in tWords: # 测试条件
- thisPhw = w["location"]["top"] # 70-80,78
- thisPww = w["location"]["left"] # 110-120,116
- print("五排或乱斗",thisPhw,thisPww)
-
- if thisGhw != 0:
- exY = int(thisPhw)-int(thisGhw)
- exX = int(thisPww)-int(thisGww)
- if exY>70 and exY<90 and exX>110 and exX<128: # 如果满足条件,则点击,进入房间。
- # 不同手机分辨率下,有可能不一样。这个需要具体测试 (我的是2340*1080px)
- print("点击位置,x:%s,y:%s"%(thisPww,thisPhw))
- # adb shell input tap 540 1104
- Myexec("adb shell input tap "+str(thisPww)+" "+str(thisPhw))
- break
- if "全队" in tWords or "召集" in tWords: # 判断是否已经进入房间
- clickOk = 1
- print("进入房间成功")
-
- if clickOk == 1:
- # 如果已经进入房间,退出循环
- break
经过测试,一般等待几分钟,就会进入想要的房间啦~再也不用一直盯着屏幕啦~其实还有很多功能,比如自动抢皮肤碎片啦、做任务啦,这些就需要大家自己去实现啦~
所用工具下载地址:链接:https://pan.baidu.com/s/1ckE8mj_eWhVatAFoV8E3Mg
提取码:lkkz
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。