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 相关文章推荐
Python3中多线程编程的队列运作示例
Apr 16 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
python实现俄罗斯方块
Jun 26 Python
Python OpenCV处理图像之图像像素点操作
Jul 10 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
Django model select的多种用法详解
Jul 16 Python
Python调用C语言的实现
Jul 26 Python
在django admin中添加自定义视图的例子
Jul 26 Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
Django分页器的用法你都了解吗
May 26 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
ThinkPHP安装和设置
2015/07/27 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
jQuery的12招常用技巧分享
2011/08/08 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
通过Python实现自动填写调查问卷
2017/09/06 Python
python实现查找所有程序的安装信息
2020/02/18 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
奖学金自我鉴定范文
2013/10/03 职场文书
八年级语文教学反思
2014/02/11 职场文书
环保倡议书怎么写
2014/05/16 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书