Python中国社区  »  Python

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

Python中文社区 • 4 天前 • 29 次点击  

关注 Python 的人想必都知道 跳一跳辅助外挂 这个项目近来在 Github 上火得不行,相信不少人也可能尝试过一番,并暗暗叹息,为什么我一开始就没有这个好想法呢!

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

思路:

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作者。

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

长按扫描上方二维码或者点击阅读原文后,

关注公众号:编程狗,回复“0112”免费获取本文源码


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/kLTg5HAhNh
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/5283
 
29 次点击  
分享到微博
分享
社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
WEB开发
linux   NoSql   DATABASE   Jquery   Bootstrap   NGINX   js   其他Web框架   Git   peewee   web工具   bottle   zookeeper   IE   MongoDB   MQ   tornado   Redis  
机器学习
机器学习算法  
Python88.com
公告   社区推广   反馈