打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用 Python 从零开始玩微信跳一跳

现在,参照外挂项目的源码,我们就从零开始来自己动手写一个手动版本的跳一跳外挂。

思路:

1、利用 adb 命令先把跳一跳截图保留至本地 

2、通过点击图上两个坐标点,算出两点之间的距离(勾股定理),最后得出按压屏幕3的时间。 

3、通过 adb 命令执行按压屏幕操作 

4、重复 1 - 3

思路已经有了,就可以动手开码了。不过要先安装好 adb 环境,至于怎么配置安装,Google it!无非就是下载安装 adb 驱动,并设置好环境变量而已!

先把后面需要的库引进来

  1. import os

  2. import math

  3. # 这两个库用于图片的操作

  4. import matplotlib.pyplot as plt

  5. from PIL import Image

新建 WechatJump 类,并进行初始化操作

  1. class WechatJump:

  2.    def __init__(self):

  3.        # 按压系数,不同分辨率的手机需要做调整

  4.        self._coefficient = 1.35

  5.        # 记录按压次数

  6.        self._click_count = 0

  7.        # 记录点击点坐标的数组

  8.        self._coords = []

首先需要保存图片至本地

  1. def generate_screenshot(self):

  2.    # 截图,并将图片保存为 /sdcard/screenshot.png

  3.    os.system('adb shell screencap -p /sdcard/screenshot.png')

  4.    # pull 命令是将图片从手机发送到电脑本地

  5.    os.system('adb pull /sdcard/screenshot.png .')

点击图片坐标点

  1. # event 是点击事件

  2. def on_click(self, event):

  3.    # event.xdata, event.ydata 分别是点击的横纵坐标,将坐标依次保存到 _coords 数组中

  4.    self._coords.append((event.xdata, event.ydata))

  5.    # 这里是每两次点击(起始点和目标点)就会执行按压按压屏幕操作,所以当

  6.    # self._click_count == 2 时才执行

  7.    self._click_count += 1

  8.    if self._click_count == 2:

  9.        self._click_count = 0

  10.        # 弹出第二次点击时的坐标

  11.        _next = self._coords.pop()

  12.        # 弹出第一次点击时的坐标

  13.        _prev = self._coords.pop()

  14.        # 根据勾股定理计算出两点之间的距离

  15.        self.jump_to_next(

  16.            math.sqrt((_next[0] - _prev[0]) ** 2 + (_next[1] - _prev[1]) ** 2))

先点击 1 号点,再点击 2 好点即可。按压屏幕,执行跳跃操作

  1. def jump_to_next(self, distance):

  2.    press_time = int(distance * self._coefficient)

  3.    # cmd 最后一个参数 press_time 为按压时间,按压时间为 距离x按压系数,至于按压系数是

  4.    # 多少则要根据每个人的手机分辨率而定,可自行测试调整

  5.    # 100 100 200 200 这四个数字其实无所谓,只是模拟 swipe 操作时的坐标点而已

  6.    cmd = 'adb shell input swipe 100 100 200 200 {}'.format(press_time)

  7.    print(cmd)

  8.    # 执行命令

  9.    os.system(cmd)

基本上函数已经完成了,最后整理一下,将 on_click 函数绑定到图片上,循环操作

  1. def run(self):

  2.    # 循环执行操作

  3.    while True:

  4.        # 这里执行两次截图操作,不然会提示远程图片未找到的问题(可以注释其中一行试试看)

  5.        self.generate_screenshot()

  6.        self.generate_screenshot()

  7.        figure = plt.figure()

  8.        # 绑定 on_click 操作

  9.        figure.canvas.mpl_connect('button_press_event', self.on_click)

  10.        # 打开并显示图片

  11.        img = Image.open('screenshot.png')

  12.        plt.imshow(img)

  13.        plt.show()

最后,只需要运行 run 函数即可,参数调得好的话,落点可以说是非常准了。手动刷到个上千分完全没问题,只要你要耐心…..

  1. wechat_jump = WechatJump()

  2. wechat_jump.run()

怎么样,是不是觉得其实也不难写出来。(其实原作者的第一版大概就长这样子)不过现在该项目,已经推出了自动跳跃的版本,兼容 iphone 的版本,甚至有大牛直接上了深度学习的版本!(有兴趣的同学可以阅读一下其源码,相信会有收获的。)不过这都是后来的事啦,总之一句话,想法才是最重要的!

本文作者

陈键冬

Python中文社区专栏作者,开源项目pyecharts作者。

获取本文完整源代码方式:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
10 个 Python 脚本来自动化你的日常任务
Python 自动化带你轻松赚钱
使用Python进行Android自动化测试
python 如何在一个.py文件中调用另一个.py文件的类
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
wxPython:文件对话框wx.FileDialog
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服