微信跳一跳指令碼重出江湖,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:
如果螢幕解析度不能成功探測,處理方式與安卓手機中的處理方式類似。
相關文章
- Mac + iPhone 實現微信跳一跳自動化教程MaciPhone
- python實現自動搶課指令碼Python指令碼
- [跳一跳] Nodejs + Opencv 版NodeJSOpenCV
- python快手虎年跳一跳輔助(點選版)Python
- 微信跳一跳輔助app 僅需安裝app無需連線電腦等 支援手動、自動 | 已開源APP
- 微信跳一跳作弊軟體連線手機流程
- 使用 Fastlane 實現 iOS 跟 Android 自動打包指令碼ASTiOSAndroid指令碼
- 利用Python實現微信半自動化操作!Python
- 利用Python實現自動掃雷小指令碼Python指令碼
- 透過標籤清理微信好友:Python自動化指令碼解析Python指令碼
- thinkphp多商戶商城 分銷 帶 pc 手機版 微信版 安卓版 蘋果版 五端PHP安卓蘋果
- 實現指令碼自動部署docker指令碼Docker
- 搬運:python基於pywinauto實現PC端自動化 python操作微信自動化Python
- 微信電腦版怎麼升級?微信PC版手動更新升級方法教程
- iOS —— 兩套自動打包指令碼iOS指令碼
- 微信最新iOS微信6.7.4版正式釋出 iOS版微信6.7.4更新了什麼?iOS
- 安卓抓取JD wskey + 新增指令碼自動轉換JD cookie安卓指令碼Cookie
- 詳述微信自動跳轉外部瀏覽器是如何實現的瀏覽器
- Python——自動簽到指令碼Python指令碼
- Flutter與原生互動(安卓、iOS),實現原生分享 | 掘金技術徵文Flutter安卓iOS
- 使用SceneKit編寫微信跳一跳小遊戲(一)遊戲
- 微信小遊戲跳一跳外掛輔助程式遊戲
- Python | 微信自動回覆祝福語Python
- 使用 Python 來自動回微信Python
- 一次不成功的深度學習實踐 – 微信跳一跳深度學習
- mydumper自動化安裝指令碼指令碼
- CCF跳一跳Python程式Python
- 微信小程式如何實現自動退款功能?微信小程式
- 微信訂閱號實現AI自動回覆AI
- iOS自動構建打包釋出指令碼iOS指令碼
- flyway實現java 自動升級SQL指令碼JavaSQL指令碼
- 安信實驗室教你如何實現Windows自動安裝!Windows
- 《轉載》Jenkins持續整合-自動化部署指令碼的實現《python》Jenkins指令碼Python
- 自動化指令碼安裝mysql shell指令碼範例指令碼MySql
- golang一鍵自動安裝指令碼Golang指令碼
- Python實現微信電腦版微信支付收款監聽及支付回撥通知Python
- python股票自動 選股 與 止損 止盈 指令碼Python指令碼
- Python 指令碼自動視窗截圖Python指令碼