微信跳一跳脚本重出江湖,python实现安卓&iOS自动版与手动版!
前面一段时间在GitHub上看到有人利用Python玩一款名为“跳一跳”的微信小程序,于是打算自己也来试一试,毕竟这款小游戏最近吸引了众多人的目光。
演示工具
电脑系统:Win10
Python版本:2.7.13(64位)
环境配置
Step1:安装Python
安装Python2.7并添加到环境变量中。
Step2:配置adb
将相关文件中提供的adb.zip文件解压,将解压后的文件夹添加到环境变量中。
(Win10系统:右键“此电脑”→“属性”→“高级系统设置”→“环境变量”→双击“Path”,将adb文件夹的路径添加进去即可。)
例如下图:
添加成功后在cmd窗口输入adb会有类似如下图所示的显示:
Step3:安装依赖库
解压相关文件中提供的wechat_jump_game.rar文件。cmd窗口切换到解压后的文件夹内后输入pip install -r requirements.txt耐心等待相关依赖库安装完成即可。
如下图所示:
小编给大家推荐一个学习氛围超好的地方,python交流企鹅裙:【6.1.1,五三零,1.0.1】!适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程
使用演示
一、安卓手机(已成功)
cmd窗口中路径保持在wechat_jump_game不变。
Step1:
将安卓手机与电脑连接并开启安卓手机的USB调试(安全模式)。(请根据机型和系统自行百度开启方式。)
Step2:
手机端打开微信小程序“跳一跳”并点击“开始游戏”。
Step3:
电脑端在cmd窗口中输入:
python wechat_jump_auto.py即可。
如下图所示:
此时你可以发现小人已经自己开始跳起来了!
可能刚开始上手的时候,因为时间距离之间的关系把握不恰当,只能跳出几个就掉到了台子下面。如果能利用图像识别精确测量出起始和目标点之间测距离,就可以估计按压的时间来精确跳跃。
代码分iOS与安卓
# -*- coding: utf-8 -*-
from __future__ import print_function, division
import os
import time
import datetime
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import cv2
VERSION = "1.1.4"
scale = 0.25
template = cv2.imread('./resource/image/character.png')
template = cv2.resize(template, (0, 0), fx=scale, fy=scale)
template_size = template.shape[:2]
def search(img):
result = cv2.matchTemplate(img, template, cv2.TM_SQDIFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
cv2.rectangle(
img,
(min_loc[0], min_loc[1]),
(min_loc[0] + template_size[1], min_loc[1] + template_size[0]),
(255, 0, 0),
4)
return img, min_loc[0] + template_size[1] / 2, min_loc[1] + template_size[0]
def pull_screenshot():
filename = datetime.datetime.now().strftime("%H%M%S") + '.png'
os.system('mv autojump.png {}'.format(filename))
os.system('adb shell screencap -p /sdcard/autojump.png')
os.system('adb pull /sdcard/autojump.png ./autojump.png')
def jump(distance):
press_time = distance * 1.35
press_time = int(press_time)
cmd = 'adb shell input swipe 320 410 320 410 ' + str(press_time)
print(cmd)
os.system(cmd)
def update_data():
global src_x, src_y
img = cv2.imread('./autojump.png')
img = cv2.resize(img, (0, 0), fx=scale, fy=scale)
img, src_x, src_y = search(img)
return img
fig = plt.figure()
pull_screenshot()
img = update_data()
im = plt.imshow(img, animated=True)
update = True
def updatefig(*args):
global update
if update:
time.sleep(1)
pull_screenshot()
im.set_array(update_data())
update = False
return im,
def on_click(event):
global update
global src_x, src_y
dst_x, dst_y = event.xdata, event.ydata
distance = (dst_x - src_x)**2 + (dst_y - src_y)**2
distance = (distance ** 0.5) / scale
print('distance = ', distance)
jump(distance)
update = True
fig.canvas.mpl_connect('button_press_event', on_click)
ani = animation.FuncAnimation(fig, updatefig, interval=5, blit=True)
plt.show()
# -*- coding: utf-8 -*-
import time
import wda
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from PIL import Image
# 截图距离 * time_coefficient = 按键时长
# time_coefficient:
# iphonex: 0.00125
# iphone6: 0.00196
# iphone6s plus: 0.00120
time_coefficient = 0.00120
VERSION = "1.1.4"
c = wda.Client()
s = c.session()
def pull_screenshot():
c.screenshot('autojump.png')
def jump(distance):
press_time = distance * time_coefficient
press_time = press_time
print('press_time = ',press_time)
s.tap_hold(200, 200, press_time)
fig = plt.figure()
pull_screenshot()
img = np.array(Image.open('autojump.png'))
im = plt.imshow(img, animated=True)
update = True
click_count = 0
cor = []
def update_data():
return np.array(Image.open('autojump.png'))
def updatefig(*args):
global update
if update:
time.sleep(1)
pull_screenshot()
im.set_array(update_data())
update = False
return im,
def on_click(event):
global update
global ix, iy
global click_count
global cor
ix, iy = event.xdata, event.ydata
coords = [(ix, iy)]
print('now = ', coords)
cor.append(coords)
click_count += 1
if click_count > 1:
click_count = 0
cor1 = cor.pop()
cor2 = cor.pop()
distance = (cor1[0][0] - cor2[0][0])**2 + (cor1[0][1] - cor2[0][1])**2
distance = distance ** 0.5
print('distance = ', distance)
jump(distance)
update = True
fig.canvas.mpl_connect('button_press_event', on_click)
ani = animation.FuncAnimation(fig, updatefig, interval=50, blit=True)
plt.show()
原理说明
由于微信检测非常严厉,这里的防禁代码可能已经不起作用,主要供学习用途
将手机点击到《跳一跳》小程序界面
用 ADB 工具获取当前手机截图,并用 ADB 将截图 pull 上来
adb shell screencap -p /sdcard/autojump.png
adb pull /sdcard/autojump.png .
计算按压时间
手动版:用 Matplotlib 显示截图,用鼠标先点击起始点位置,然后点击目标位置,计算像素距离;
自动版:靠棋子的颜色来识别棋子,靠底色和方块的色差来识别棋盘;
用 ADB 工具点击屏幕蓄力一跳
adb shell input swipe x y x y time(ms)
使用教程
相关软件工具安装和使用步骤请参考 Android 和 iOS 操作步骤
PS:
如果屏幕分辨率不能成功探测,请按照你的手机分辨率从相应的config文件夹将config.json文件拷贝到 *.py 同级目录(wechat_jump_game下)。
二、苹果手机(未尝试)
苹果手机需要配置WebDriverAgentRunner,本人不使用Mac,因此无法测试代码的有效性。在相关文件中,本人也提供了一份CSDN中积分下载的WebDriverAgent.rar文件,有需要者可参考相关网络资料进行配置。
运行WebDriverAgentRunner并打开微信“跳一跳”程序界面。
Step2:
运行脚本。有两种模式可供选择:
(1)手动辅助跳:
①命令行输入:
python3 wechat_jump_iOS_py3.py后回车运行;
②依次点击弹出窗口中的起始位置和目标位置,程序会自动计算距离后起跳;
③根据起跳的精准性更改源代码中的time_coefficient参数,直到获得最佳取值。
(2)自动连续跳:
①命令行输入:
python3 wechat_jump_auto_iOS.py后回车运行;
②根据起跳的精准性更改机型对应的config.json 文件中的press_coefficient参数,直到获得最佳取值。
PS:
如果屏幕分辨率不能成功探测,处理方式与安卓手机中的处理方式类似。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Retrofit2源码解析(一)
本文基于Retrofit2的2.4.0版本 implementation 'com.squareup.retrofit2:retrofit:2.4.0' Retrofit2底层基于OkHttp3,是对利用OkHttp3请求网络的一种封装,可以使我们避免写很多重复的调用网络请求的代码,同时灵活性很高,可以定制自定义的OkHttpClient、自定义的数据解析转换器(比如Gson、Jackson等)、自定义的请求转换器(比如结合RxJava)。 Retrofit2的另一个特点就是使用运行时注解,我们在使用时可以根据需要来利用注解将我们的业务调用接口转换成Http请求的接口。 下面先来看看我们使用Retrofit2发起网络请求的步骤 (1)创建我们的具体业务接口,这里比如我们调用淘宝的IP地址库 public interface MyService { @GET("getIpInfo.php=11.11.11.11") Call<IpBean> getData(); } (2)创建Retrofit retrofit = new Retrofit.Builder() .baseUr...
- 下一篇
图书推荐:Kotlin从入门到进阶实战
图片发自简书App 《Kotlin从入门到进阶实战》从Kotlin 语言的基础语法讲起,逐步深入到Kotlin进阶实战,并在最后配合项目实战案例,重点介绍了使用Kotlin+Spring Boot进行服务端开发和使用Kotlin进行Android应用程序开发的内容,让读者不但可以系统地学习Kotlin编程的相关知识,而且还能对Kotlin应用开发有更为深入的理解。 本书分为14章,涵盖的主要内容有Kotlin简介,Kotlin语法基础,类型系统与可空类型,类与面向对象编程,函数与函数式编程,扩展函数与属性,集合类,泛型,文件I/O操作、正则表达式与多线程,使用Kotlin创建DSL,运算符重载与约定,元编程、注解与反射,Kotlin集成Spring Boot服务端开发,使用Kotlin进行Android开发。 本书内容通俗易懂,案例丰富,实用性强,特别适合Kotlin语言的入门读者和进阶读者阅读,也适合Android程序员、Java程序员等其他编程爱好者阅读,还适合作为相关培训机构的教材。 目录 目 录 第1章 Kotlin是什么 1 1.1 初识Kotlin 1 1.2 语言特性 2...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G