2020魔幻开年,在家等学校通知的时候,随手写了这个程序,代码比较乱,后面学校安排出来后也没时间进一步完善了,暑假和学长交流中叫我们最好把做过的项目都记录一下,才开始试试写文章,写不好多多包涵。
安装ADB并且连接到模拟器
https://www.cnblogs.com/yangshifu/p/9790125.html
控制ADB
Python可以用
import os
os.system('输入到CMD里的内容')
或者
import subprocess
subprocess.call('输入到CMD里的内容',shell=True)
来操作CMD进而达到操作ADB的目的,其中os.system()会像演示图中弹出CMD窗口,后来采用subprocess.call()可以不用弹出窗口,让程序在后台安静运行。
常用的ADB命令
subprocess.call('adb -s 127.0.0.1:62001 shell screencap -p /sdcard/screen.png',shell=True)#Android截图保存到/sdcard/screen.png
subprocess.call(r'adb -s 127.0.0.1:62001 pull /sdcard/screen.png C:\Users\Administrator\Desktop',shell=True)#把截图文件发送到电脑
subprocess.call('adb -s 127.0.0.1:62001 shell input tap 1350 750',shell=True)#点击屏幕坐标为X=1350 Y=750的点
subprocess.call('adb -s 127.0.0.1:62001 shell input swipe 1400 340 900 400 2000 ',shell=True)#滑动屏幕,其中前两个是起始坐标,中间两个是终点坐标,最后是移动所需时间
绝大多数手游没有太多随机性,有了最后两个点击和滑动的操作基本,再加上一个time.sleep()函数控制等待时间,就可以写出自动挂机脚本了,复杂一点的还要对屏幕进行分析。
分析屏幕
import subprocess
from PIL import Image
subprocess.call('adb -s 127.0.0.1:62001 shell screencap -p /sdcard/screen.png',shell=True)#Android截图保存到/sdcard/screen.png
subprocess.call(r'adb -s 127.0.0.1:62001 pull /sdcard/screen.png C:\Users\Administrator\Desktop',shell=True)#把截图文件发送到电脑
img = Image.open(r"C:\Users\Administrator\Desktop\screen.png") #读取保存到电脑中的截图
for i in range(1400,300,-40):#扫描X=1400到X=300区域,-40控制扫描间隔和扫描方向
for j in range(100,800):#扫描Y=100到Y=300区域
data = (img.getpixel((i,j)))#记录扫描数据
if (data[0]>=250 and data[1]<=50 and data[2]<=90):#分析扫描点颜色的RGB参数
subprocess.call('adb -s 127.0.0.1:62001 shell input tap '+str(i)+' '+str(j),shell=True)#点击符合条件的点
break
最开始是用模板匹配法分析图像,后面发现效率太低就改为了使用特定位置的色块来定位,扫描X轴的时候使用40的间隔采样也是为了提高效率,采用负号是因为咸鱼号练度不够要从右边向左开始战斗捡右上角的补给。
一个获取目标地点RGB图的方法
不太想安装多余的软件,就可以用电脑自带的画图软件打开截图用颜色吸管选取要的颜色,然后就可以看到参数了,截取的时候左下角还能看坐标。
如果想要使用模板匹配法的话可以使用cv2模块。
https://blog.csdn.net/RNG_uzi_/article/details/90034485