微信跳一跳脚本重出江湖,python实现安卓&iOS自动版与手动版!

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 微信跳一跳脚本重出江湖,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:

如果屏幕分辨率不能成功探测,处理方式与安卓手机中的处理方式类似。


相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
5天前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
29天前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
126 68
|
3天前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
13天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
41 2
|
15天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
30 3
|
20天前
|
缓存 运维 NoSQL
python常见运维脚本_Python运维常用脚本
python常见运维脚本_Python运维常用脚本
24 3
|
20天前
|
数据采集 JSON 数据安全/隐私保护
Python常用脚本集锦
Python常用脚本集锦
18 2
|
21天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
22天前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
28天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
28 1
下一篇
无影云桌面