python 30行代码实现蚂蚁森林自动偷能量


Posted in Python onFebruary 08, 2021

@[toc] 虽然我支付宝加了好多好友,平时有很多能量可以偷,但由于太懒,至今一棵树都没种成,所以心心念念把偷能量这事自动化。之前通过用代码模拟手机点按的方式,实现了朋友圈自动点赞,但当时蚂蚁森林的操作流程要比朋友圈点赞复杂很多,所以当时就没有实现自动偷能量。不过我那篇博客评论下面有网友推荐了appium和uiautomator2这俩工具,最近抽空研究了下,发现用uiautomator2的话这事简单了好多,而且由于蚂蚁森林改版,连续偷能量的操作流程也简单了好多,于是乎我就实现了自动偷能量,效果如下,完整视频戳这里

python 30行代码实现蚂蚁森林自动偷能量

接下来介绍下原理和实现方式,首先如果让你手动去收能量的话,你是什么流程?

1.打开支付宝
2.打开蚂蚁森林
3.先收取自己的能量
4.跳到下一个有能量的人哪
5.收取ta的能量
6.重复4和5,直到没有能量可以偷

很幸运的是,借助Uiautomator2,这些都可以自动化。UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作。Uiautomator2是在Uiautomator之上的python的接口封装,简单来说 Uiautomator2可以看到手机当前屏幕上有哪些控件,其坐标是啥,并且还可以模拟点击。

Uiautomator2的安装和使用

详细可以参考下官方文档Uiautomator2 ,安装方式很简单,下面一条命令即可。

pip install --upgrade --pre uiautomator2

使用的话这里有几个坑,手机接入电脑前首先需要开启开发者模式,并开启USB调试,USB安装 (如下图),这样才能保证uiautomator2有足够的权限操作你的手机。

python 30行代码实现蚂蚁森林自动偷能量

第一次使用过uiautomator2后,它会在你手机上安装ATX这个应用,打开这个应用你就可以之后通过无线的方式操作你的手机了。

具体实现

如何打开支付宝并进入蚂蚁森林?

Uiautomator2可以直接通过应用包名调起应用d.app_start("com.eg.android.AlipayGphone"),啥?你不知道支付宝的包名?你可以安装Uiautomators2后用其命令行查看支付宝的包名,具体可以查阅其文档。

如何进入蚂蚁森林? Uiautomators2提供了直接点击屏幕某个文字的位置,d(text="蚂蚁森林").click()。所以建议你把蚂蚁森林放的支付宝首页,这样打开支付宝后就可以直接定位到蚂蚁森林的位置了。

python 30行代码实现蚂蚁森林自动偷能量

收能量

python 30行代码实现蚂蚁森林自动偷能量

目前定位到具体能量的位置,所以最简单的方式就是把所有能量可能出现的位置都扫一遍(如上图红框),然后点击找能量按钮跳到下一个人那继续扫荡。

如何停止

怎么停下来是个大问题,因为上面的逻辑都是模拟点击,如果不在合适的时机停下来,鬼知道它会给我按出什么东西。通过几次观察,我发现没有能量偷之后,支付宝会跳到下面这个页面上,这里只需要检查下"返回我的森林"按钮是否存在即可。

python 30行代码实现蚂蚁森林自动偷能量

完整代码

完整代码很短,如下:

import uiautomator2 as u2
import time
import random
# d = u2.connect() # 有线连接,手机需要插电脑上 
d = u2.connect("192.168.0.108") #通过无线连接,电脑和手机需要在同一个局域网内,并且需要先用有线的方式做过初始化


# d.app_stop("com.eg.android.AlipayGphone") 

print("打开支付宝")
d.app_start("com.eg.android.AlipayGphone")
time.sleep(2) ## 休眠2s等待支付宝完全启动

print("打开蚂蚁森林,等待5s……")
d(text="蚂蚁森林").click()
time.sleep(5) ## 我手机比较卡,进入蚂蚁森林后还需要几秒钟才能完全加载完  

def collectEnergy(cnt):
  print("开始第%d次偷能量!" % cnt)

  # 开始扫描点击有能力出现的区域 
  for x in range(150,1000,150):
    for y in range(600,900,150):
      d.long_click(x + random.randint(10,20), y + random.randint(10,20), 0.1)
      time.sleep(0.01)
      if cnt != 1:
        d.click(536,1816)

cnt = 1
while True:
  collectEnergy(cnt)
  a = d.xpath("//*[@resource-id='J_tree_dialog_wrap']").get().bounds 
  d.click(1000, a[3]-80) # 找能量按钮的坐标 

  ## 如果页面出现了“返回我的森林”说明已经没有能量可偷了,结束
  if d.xpath('//*[@text="返回我的森林"]').click_exists(timeout=2.0):
    break
  cnt += 1
print("###结束###")
# d.app_stop("com.eg.android.AlipayGphone") # 退出支付宝

结语

抛开注释,真的不到30行代码,但建议用的时候还是低调点,别让你的好友知道你开了挂然后拉黑你。

以上就是python 30行代码实现蚂蚁森林自动偷能量的详细内容,更多关于python 实现蚂蚁森林自动偷能量的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
pyttsx3实现中文文字转语音的方法
Dec 24 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
使用Python实现毫秒级抢单功能
Jun 06 Python
python实现串口自动触发工作的示例
Jul 02 Python
python3实现微型的web服务器
Sep 03 Python
Python 实现训练集、测试集随机划分
Jan 08 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
如何在mac版pycharm选择python版本
Jul 21 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
python源文件的字符编码知识点详解
Mar 04 Python
PO模式在selenium自动化测试框架的优势
Mar 20 Python
如何用Python编写一个电子考勤系统
Feb 08 #Python
python编程的核心知识点总结
Feb 08 #Python
python上下文管理器异常问题解决方法
Feb 07 #Python
python中@contextmanager实例用法
Feb 07 #Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 #Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 #Python
Python中全局变量和局部变量的理解与区别
Feb 07 #Python
You might like
PHP聊天室技术
2006/10/09 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
php中JSON的使用与转换
2015/01/14 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
js 实现watch监听数据变化的代码
2019/10/13 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
python super()函数的基本使用
2020/09/10 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
医学检验专业大学生求职信
2013/11/18 职场文书
最新党员思想汇报
2014/01/01 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
学历公证书范本
2014/04/09 职场文书
职业规划实施方案
2014/06/10 职场文书
自查自纠整改报告
2014/11/06 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
房产公证书
2015/01/23 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL