最近迷上了微信跳一跳小游戏,正好也看到知乎上有大神分享了技术贴,我也参考了好多资料,原理就是通过abd命令截取图片,python计算两个点距离,然后转化按压时间,让电脑来完成游戏。我花了很长时间才把程序跑起来,作为一名技术小白我谈谈自己的认识,尽量让大家少走弯路。
准备工具
- abd驱动
- 安卓手机
- 打开手机调试模式
- usb线连接好手机与电脑
1.首先需要安装adb这里是下载地址点击这里;
这里是对adb的解释(https://baike.baidu.com/item/ADB/840725?fr=aladdin)
2.安装好之后将安装路径配置到环境变量中:(注意:路径后加 英文格式的;号,例如D:\adb;)快速配置环境:新建 environmen.txt ,内容如下:
backports.functools-lru-cache==1.4
cycler==0.10.0
matplotlib==2.1.1
numpy==1.13.3
olefile==0.44
opencv-python==3.4.0.12
Pillow==4.3.0
pyparsing==2.2.0
python-dateutil==2.6.1
pytz==2017.3
six==1.11.0
python install -r environmen.txt 即可
或者直接在abd所在的文件夹shift右键打开cmd
在cmd窗口中输入abd
然后有一些库需要提前下载好:matplotlib, PIL, numpy
我之前下载的anaconda自带这些库
获取手机截图:
os.system('adb shell screencap -p /sdcard/screen.png')#手机获取实时截图
os.system('adb pull /sdcard/screen.png')#PC端获取截图
通过numpy转化成多维数组进行图片绘制:
numpy.array(PIL.Image.open('screen.png'))
3.github 大神的 代码下载 再次感谢分享
下载解压即可。
4.新建python文件wechat.py,写入一下代码
# -*- coding: utf-8 -*-
import os
import time
import numpy,PIL
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
need_update = True
def get_screen_image():
os.system('adb shell screencap -p /sdcard/screen.png')
os.system('adb pull /sdcard/screen.png')
return numpy.array(PIL.Image.open('screen.png'))
def jump(point1, point2):
x1, y1 = point1; x2, y2 = point2
dis = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
os.system('adb shell input swipe 320 410 320 410 {}'.format(int(dis * 1.35)))#抓包获取(坐标、1.35是单位按压时间)
def on_click(event, coor = []):#点击事件的坐标位置
coor.append((event.xdata, event.ydata))
if len(coor) == 2:#单击2次开始计算
jump(coor.pop(), coor.pop())
need_update = True
def update_screen(frame):
global need_update
if need_update:
time.sleep(1)
axes_image.set_array(get_screen_image())#更新图片
need_ipdate = False
return axes_image,
figure = plt.figure()#创建空白对象
axes_image = plt.imshow(get_screen_image(), animated = True)#把获取的图片画在坐标轴
figure.canvas.mpl_connect('button_press_event', on_click)#单击回调函数(传递的是对象不是参数!!)
ani = FuncAnimation(figure, update_screen, interval = 50, blit = True) #刷新图片、时间50ms
plt.show()
用adb连接手机
- 通过usb
把手机通过usb接上pc,打开手机USB调试,传输模式选MTP。
可通过cmd打开adb.exe所在目录输入 adb devices 查看是否有设备已连接。
如果adb并没有连接上手机,于是下载了android驱动程序(驱动精灵等软件就能下载),安装了, 就好了。
- 通过wifi
adb connect 192.168.1.100
其中192.168.1.100为手机的ip(需要在手机信息里面查找),如果连接成功, 就可以进入android的shell了。
打开微信跳一跳,点击开始游戏
用cmd打开至wechat.py所在目录,输入 python wechat.py 运行wechat.py
业余爱好,不足之处请不吝指正,欢迎留言交流!
提示:(别搞太高分,适可而止,小心被封号就尴尬了...)
大家看完不要忘了点波关注哦~~~~~
看起来挺有意思的!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
编程
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
it业内的
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
看了不会系列,哈哈
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
厉害了,有机会用用,已mark
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
不错,有前途:D
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit