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

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

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

思路:

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

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

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

4、重复 1 - 3

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

先把后面需要的库引进来

import os

import math

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

import matplotlib.pyplot as plt

from PIL import Image

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

class WechatJump:

def __init__(self):
        
     # 按压系数,不同分辨率的手机需要做调整
 
    self._coefficient = 1.35
     
    # 记录按压次数
    
    self._click_count = 0

    # 记录点击点坐标的数组

    self._coords = []

首先需要保存图片至本地

def generate_screenshot(self):
    
# 截图,并将图片保存为 /sdcard/screenshot.png

    os.system('adb shell screencap -p /sdcard/screenshot.png')
    
# pull 命令是将图片从手机发送到电脑本地

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

点击图片坐标点

# event 是点击事件def on_click(self, event):    
# event.xdata, event.ydata 分别是点击的横纵坐标,将坐标依次保存到 _coords 数组中    
self._coords.append((event.xdata, event.ydata))    
# 这里是每两次点击(起始点和目标点)就会执行按压按压屏幕操作,所以当    
# self._click_count == 2 时才执行    
self._click_count += 1    
if self._click_count == 2:        
self._click_count = 0        
# 弹出第二次点击时的坐标        
_next = self._coords.pop()        
# 弹出第一次点击时的坐标        
_prev = self._coords.pop()        
# 根据勾股定理计算出两点之间的距离        
self.jump_to_next( math.sqrt((_next[0] - _prev[0]) ** 2 + (_next[1] - _prev[1]) ** 2))

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

def jump_to_next(self, distance):

    press_time = int(distance * self._coefficient)

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

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

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

    cmd = 'adb shell input swipe 100 100 200 200 {}'.format(press_time)
    
print(cmd)
    
# 执行命令

    os.system(cmd)

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

def run(self):
# 循环执行操作

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

        
self.generate_screenshot()
        
self.generate_screenshot()

        figure = plt.figure()

# 绑定 on_click 操作

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

# 打开并显示图片

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

        plt.imshow(img)

        plt.show()

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

wechat_jump = WechatJump()wechat_jump.run()

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

本文分享自微信公众号 - Python中文社区(python-china)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习养成记

ggplot2:结合ggmap绘制地图

ggmap包整合了四种地图资源,分别是Google、OpenStreetMaps、Stamen和Cloudmade。可以方便的与ggplot进行涂层叠加,实现在...

46780
来自专栏应用案例

RIOT 与 ImageOptim - 两款 Win 和 Mac 上好用的免费图片优化无损压缩工具

不管你是网站站长、自媒体、博客作者、摄影师、设计师,还是需要在网上分享传输图片/照片的人,都希望自己上传图片耗时更短、图片体积更小,别人浏览时又能更快下载显示出...

47650
来自专栏Python爬虫与算法进阶

敲敲级简单的鉴别H图片的小程序

首先,来看一下程序运行结果的截图 ? 功能实现 一、下载SDK pip install qcloud_image 先贴出官方给的实例代码: #!/usr/bi...

35440
来自专栏小文博客

腾讯云OCR文字识别“测评”

前不久有朋友为了方便工作,问我“怎么把图片中的文字提取出来”,我当时就想到手机QQ扫一扫刚好可以实现这个功能,就让他先将图片传到手机,然后再用手机QQ扫一扫 。

2.8K80
来自专栏开源项目

你真的会用 Issue 吗?

大家对 Issue 一定不陌生,它灵活又实用,可以用来做 Bug 跟踪、需求管理、项目管理、交流探讨、写文章…… 不少新用户在后台问我们,如何优雅地使用 Iss...

33050
来自专栏数据小魔方

细分饼图

今天跟大家分享的是一种叫做细分饼图的图表制作技巧! 它所用到的技巧很简单,表达的数据也不很复杂,就是三层数据结构,每一层都是上一层的细分数据。 首先我们还是来看...

38350
来自专栏数据小魔方

树状图(Tree Map)

今天跟大家分享的是树状图! ▼ 树状图(treemap)是一种经常用来展示多层级数据的分析工具。主要是使用矩形的面积、颜色、来显示复杂的层级数据关系,能够直观体...

689100
来自专栏CDA数据分析师

R可视化之交互式地图展示

来源 | 数据人网 文 | 薛丽丹 leaflet是来构建交互式地图JavaScript库。RStudio发布了一些允许在R建立这些地图的包,我们可以利用lea...

31690
来自专栏AI科技评论

开发 | 机器学习零基础?手把手教你用TensorFlow搭建图像分类器

AI科技评论按:Pete Warden是TensorFlow移动团队的技术负责人。曾在Jetpac担任首次技术官。Jetpac的深度学习技术经过优化,可在移动和...

39060
来自专栏数据结构与算法

pd_ds中的hash

前言 在c++的STL中,提供了一种hash函数,其用法和map是几乎一样的,但是速度却能快接近一倍 使用方法 需要的头文件 #include<ext/pb_d...

37690

扫码关注云+社区

领取腾讯云代金券