GVKun编程网logo

Ant-Forest v1.3.4.9 发布,基于 Autojs 的蚂蚁森林自动收能量脚本(蚂蚁森林自动收能量脚本2020)

11

对于Ant-Forestv1.3.4.9发布,基于Autojs的蚂蚁森林自动收能量脚本感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍蚂蚁森林自动收能量脚本2020,并为您提供关于30行代码实现

对于Ant-Forest v1.3.4.9 发布,基于 Autojs 的蚂蚁森林自动收能量脚本感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍蚂蚁森林自动收能量脚本2020,并为您提供关于30 行代码实现蚂蚁森林自动收能量(附送源码)、30行代码实现蚂蚁森林自动偷能量、Ant-Forest v1.3.4.7.1 发布,自动收集蚂蚁森林能量脚本、Appium和Python实现蚂蚁森林自动化收取能量的有用信息。

本文目录一览:

Ant-Forest v1.3.4.9 发布,基于 Autojs 的蚂蚁森林自动收能量脚本(蚂蚁森林自动收能量脚本2020)

Ant-Forest v1.3.4.9 发布,基于 Autojs 的蚂蚁森林自动收能量脚本(蚂蚁森林自动收能量脚本2020)

Ant-Forest v1.3.4.9 已经发布,这是一个基于 Autojs 的蚂蚁森林自动收能量脚本,采用 4.1.1 Alpha2 版本开发。

此版本更新内容包括:

加入了基于webview和Vue的全新可视化配置工具

  • 运行 可视化配置.js 即可,加载速度更快,界面更好看,但是需要联网加载vue和vant的依赖
  • 20201130 修复部分错误,加入重置默认的功能,配置导出和导入功能待实现
  • 20201202 加入前台应用白名单功能,白名单应用在前台运行时,自动延迟5分钟再执行,防止玩游戏或者聊天时老被打扰
  • 20201216 修复排行榜中识别小手失败的问题;加入可视化辅助工具,方便开发和维护;修复可视化配置中的部分错误,对颜色值输入框组件进行重写,可以通过滑动方式自由调整颜色
  • 20201226 优化能量球识别方式,调整webview相关配置,避免闪屏、黑屏,屏蔽长按复制等
  • 20201226 增加配置项,可以配置自动授权截屏权限的按钮文本,可选是否关闭崩溃自启动,是否在排行榜中只识别倒计时等
  • 20201229 修改逛一逛结束标记 改为 "返回我的森林",同时该文本可在配置中修改
  • 20201230 优化能量球识别方式,适配部分非正常分辨率机型。简化自动授权截图权限的代码
  • 20210104 适配新版帮收能量球,并默认强制关闭帮收功能
  • 20210109 重构了部分代码,优化能量球识别参数,重写currentPackage用以准确识别当前包名
  • 20210125 优化列表中的识别方式,避免点击到邀请按钮,优化倒计时OCR截图提高识别准确率;优化能量保护罩识别方式;重构部分代码
  • 20210204 修复部分已知错误,优化执行流程;蚂蚁森林白天背景色变更,建议修改指定参数如下

image

详情查看:https://gitee.com/TonyJiangWJ/Ant-Forest/releases/v1.3.4.9

30 行代码实现蚂蚁森林自动收能量(附送源码)

30 行代码实现蚂蚁森林自动收能量(附送源码)

image

虽然我支付宝加了好多好友,平时有很多能量可以“偷”,但由于太懒,至今也没中出多少树,所以心心念念把偷能量这事自动化。之前通过用代码模拟手机点按的方式,实现了朋友圈自动点赞。但当时蚂蚁森林的操作流程要比朋友圈点赞复杂很多,所以当时就没有实现自动偷能量。

image

image
后来有不少网友在群里和评论区给我推荐了 appium 和 uiautomator2 这两款工具,最近抽空研究了下,发现用 uiautomator2 的话这事简单了好多,而且由于蚂蚁森林改版,连续偷能量的操作流程也简单了好多,于是乎我就实现了自动偷能量,效果如下,完整视频戳见下方。

(https://www.ixigua.com/692612...)。

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

  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有足够的权限操作你的手机。

image

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

具体实现

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

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

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

image

收能量

image

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

如何停止

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

image

完整代码

完整代码很短,如下:

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行代码,但建议用的时候还是低调点,别让你的好友知道你开了挂然后拉黑你。

image

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

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

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

在这里插入图片描述

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

  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有足够的权限操作你的手机。
在这里插入图片描述
第一次使用过uiautomator2后,它会在你手机上安装ATX这个应用,打开这个应用你就可以之后通过无线的方式操作你的手机了。

具体实现

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

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

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

收能量

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

如何停止

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

完整代码

完整代码很短,如下:

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行代码,但建议用的时候还是低调点,别让你的好友知道你开了挂然后拉黑你。

Ant-Forest v1.3.4.7.1 发布,自动收集蚂蚁森林能量脚本

Ant-Forest v1.3.4.7.1 发布,自动收集蚂蚁森林能量脚本

Ant-Forest v1.3.4.7.1 已经发布,此版本更新内容包括:

加入了基于webview和Vue的全新可视化配置工具

  • 运行 可视化配置.js 即可,加载速度更快,界面更好看,但是需要联网加载vue和vant的依赖
  • 20201130 修复部分错误,加入重置默认的功能,配置导出和导入功能待实现
  • 20201202 加入前台应用白名单功能,白名单应用在前台运行时,自动延迟5分钟再执行,防止玩游戏或者聊天时老被打扰
  • 20201216 修复排行榜中识别小手失败的问题;加入可视化辅助工具,方便开发和维护;修复可视化配置中的部分错误,对颜色值输入框组件进行重写,可以通过滑动方式自由调整颜色
  • 20201226 优化能量球识别方式,调整webview相关配置,避免闪屏、黑屏,屏蔽长按复制等
  • 20201226 增加配置项,可以配置自动授权截屏权限的按钮文本,可选是否关闭崩溃自启动,是否在排行榜中只识别倒计时等
  • 20201229 修改逛一逛结束标记 改为 "返回我的森林",同时该文本可在配置中修改
  • 20201230 优化能量球识别方式,适配部分非正常分辨率机型。简化自动授权截图权限的代码
  • 20210104 适配新版帮收能量球,并默认强制关闭帮收功能
  • 20210109 重构了部分代码,优化能量球识别参数,重写currentPackage用以准确识别当前包名

简介

本项目 由 https://github.com/Nick-Hopps/Ant-Forest-autoscript fork 而来,但是经过了各种改动,和原版功能差异较大 现在已经单独复制不再作为fork分支开发。

基于 Autojs 的蚂蚁森林自动收能量脚本,采用 4.1.1 Alpha2 版本开发。解锁模块参考自:https://github.com/e1399579/autojs

  • 脚本执行依赖于:AutoJs 4.1.1 alpha2 or AutoJS Modify 若无法访问请百度搜索一下

  • 设备系统要求

    • 具有 ROOT 权限的安卓 5.0 及以上版本
    • 没有 ROOT 权限的安卓 7.0 及以上版本
  • 觉得本项目好用的话请给个star吧~

其他脚本

  • 蚂蚁庄园传送门
  • 支付宝积分签到传送门
  • 京东签到传送门
  • 拆分出来了基础项目,用于快速开发AutoJS脚本AutoScriptBase

详情查看:https://gitee.com/TonyJiangWJ/Ant-Forest/releases/v1.3.4.7.1

Appium和Python实现蚂蚁森林自动化收取能量

Appium和Python实现蚂蚁森林自动化收取能量

 准备环境

  Window10系统

  Appium1.21.0

  AndroidSDK r24.1.1

  Python3.7.5

  支付宝apk文件

查看支付宝apk包信息

使用android sdk aapt命令查看支付宝apk包信息,后面会用到,如下。

Android Asset Packaging Tool

Usage:
 aapt l[ist] [-v] [-a] file.{zip,jar,apk}
   List contents of Zip-compatible archive.

 aapt d[ump] [--values] [--include-Meta-data] WHAT file.{apk} [asset [asset ...]]
   strings          Print the contents of the resource table string pool in the APK.
   badging          Print the label and icon for the app declared in APK.
   permissions      Print the permissions from the APK.
   resources        Print the resource table from the APK.
   configurations   Print the configurations in the APK.
   xmltree          Print the compiled xmls in the given assets.
   xmlstrings       Print the strings of the given compiled xml assets.

D:\android-sdk-windows\build-tools\29.0.0> .\aapt.exe dump badging C:\Users\XXX\Downloads\alipay_wap_main.apk

输出结果如下:
package: name='com.eg.android.AlipayGphone'
versionCode='410'
versionName='10.2.26.9000'
compileSdkVersion='29'
compileSdkVersionCodename='10'
install-location:'auto'
sdkVersion:'18'
targetSdkVersion:'29'
launchable-activity: name='com.eg.android.AlipayGphone.AlipayLogin'

检测设备是否连接

一开始想用模拟器(如夜神模拟器)进行自动化,后来发现支付宝在模拟器里运行特别卡,最终决定使用真机了。这里使用android sdk的adb工具检测手机设备是否连接正常,如下。如果看不到连接信息或者显示unauthorized的,请开启手机的USB调试权限,也有可能开启开发者模式呦。

准备知识

pip install 默认安装路径修改

Appium工作原理

Appium使用Python运行appium测试的实例

安装自动化工具包

pip install Appium-Python-Client --user

An extension library for adding Selenium 3.0 draft and Mobile JSON Wire Protocol Specification draft functionality to the Python language bindings, for use with the mobile testing framework Appium.

pip install pytest --user

The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries.

安装包的时候加上参数--user 包就会自动安装到自定义路径下面

启动Appium服务端

开启新会话定位画面元素

 

{
  "deviceName": "Alipay-Test",
  "platformName": "Android",
  "platformVersion": "10",
  "appActivity": "com.eg.android.AlipayGphone.AlipayLogin",
  "appPackage": "com.eg.android.AlipayGphone",
  "noreset": true,
  "fullReset": false
}

编写python脚本

知道如何定位支付宝界面的元素后,开始编写python自动化运行脚本。大体分为如下几个步骤。

初始化客户端

def setUp(self):
    desired_caps = {}
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '10'
    desired_caps['deviceName'] = 'Alipay'
    desired_caps['appActivity'] = 'com.eg.android.AlipayGphone.AlipayLogin'
    desired_caps['appPackage'] = 'com.eg.android.AlipayGphone'
    desired_caps['noreset'] = True
    desired_caps['fullReset'] = False

    self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

客户端初始化后会自动启动支付宝APP,注意noreset和fullReset参数的设置。

If noreset is set to TRUE, the app data will NOT be cleared before this session starts.
If fullReset is set to true, the app will get uninstalled and all data will be cleared.

解锁手机

def unlocked(self):
    sz = self.getSize();
    x1 = int(sz[0] * 0.10)      #x坐标
    y1 = int(sz[1] * 0.95)      #起始y坐标
    y2 = int(sz[1] * 0.15)      #终点y坐标
    self.driver.swipe(x1, y1, x1, y2, 1000)
    sleep(1)
    try:
        self.driver.find_element_by_id('com.android.systemUI:id/vivo_pin_keyboard')
        for k in [5,1,2,9,9,9]:
            self.driver.find_element_by_id('com.android.systemUI:id/VivoPinkey%d' % k).click()
        print('手机解锁成功...')
    except NoSuchElementException:
        print('手机已解锁或解锁失败')

进入蚂蚁森林

def entry_ant_forest(self):
  try:
      sleep(2)
      # 点击蚂蚁森林icon
      self.driver.find_element_by_android_uiautomator('new UiSelector().text("蚂蚁森林")').click()
  except NoSuchElementException:
      # 异常回到首页重试
      self.driver.back()
      sleep(2)
      # 点击支付宝icon
      self.driver.find_element_by_android_uiautomator('new UiSelector().text("支付宝")').click()
      sleep(2)
      # 点击蚂蚁森林icon
      self.driver.find_element_by_android_uiautomator('new UiSelector().text("蚂蚁森林")').click()

按理说进入蚂蚁森林直接模拟点击“蚂蚁森林”icon就可以了,但是偶尔会抛出NoSuchElementException异常。也就是Appium在切换activity后导致元素无法定位,如果手机不锁屏不会发生这种情况(可以在开发者模式中指定),锁屏解锁后切换到支付宝的activity后偶尔会出现这种情况。没有找到太好的解决方法,发生异常时使手机界面返回到首页,然后点击支付宝重新进入,最后点击蚂蚁森林进入。

搜索能量

def search_energy(self):
    # 点击找能量
    self.driver.tap([(1000, 1520), (1080, 1580)], 1000)
    sleep(3)
    try:
        self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("好友能量都收完了")')
    except NoSuchElementException:
        try:
            self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("返回我的森林")')
        except NoSuchElementException:
            pass
        else:
            print('全部好友能量收取完毕...')
            return
            
        # 收取好友能量
        self.collect_energy()
        # 继续找能量
        self.search_energy()
    else:
        print('全部好友能量收取完毕...')

点击“找能量”功能自动定位到有能量偷取的好友界面。如果界面中有“好友能量都收完了”或者“返回我的森林”相关字样,结束查找,否则开始收取好友能量。

收取好友能量

def collect_energy(self):
    name = ''
    try:
        name = self.driver.find_element_by_id('com.alipay.mobile.nebula:id/h5_tv_title').text
    except NoSuchElementException:
        pass
    
    print('开始收取%s的能量...' % name)
    
    # 获取手机屏幕宽高
    sz = self.getSize();
    width = sz[0]
    height = sz[1]
    
    # 能量球可能出现的区域坐标
    start_x = 110
    end_x = 940
    start_y = 460
    end_y = 880
    for i in range(start_y, end_y, 80):
        for j in range(start_x,end_x, 80):
            try:
                self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("关闭")').click()
                sleep(1)
            except NoSuchElementException:
                pass
            tap_x1 = int((int(j) / width) * width)
            tap_y1 = int((int(i) / height) * height)
            # 点击指定坐标
            self.driver.tap([(tap_x1, tap_y1), (tap_x1, tap_y1)], 1000)
            
    print('结束收取%s的能量...' % name)

首先获取当前页面的“com.alipay.mobile.nebula:id/h5_tv_title”元素,代表好友的名字;因为蚂蚁森林现在不能定位能量球元素了,所以要在能量球可能出现的方块区域按照一定的坐标步长模拟点击进行能量偷取。上面的方案中,规定的能量球可能出现的区域为[(110,460),(940,880)],这个坐标可以根据实际的机型进行修改,可以通过Appium坐标定位判断出矩形区域,如下。

 

还要一个点需要注意的,点击的时候可能会出现装饰树和挂件的展示,如下图所示。这时候需要在界面中查找“关闭”元素,然后click事件关闭就行了。

演示效果

如果效果感觉还不错的话,那就关注一下微信公众号(请扫下方二维码),回复“蚂蚁森林”获取完整代码吧。

 

关于Ant-Forest v1.3.4.9 发布,基于 Autojs 的蚂蚁森林自动收能量脚本蚂蚁森林自动收能量脚本2020的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于30 行代码实现蚂蚁森林自动收能量(附送源码)、30行代码实现蚂蚁森林自动偷能量、Ant-Forest v1.3.4.7.1 发布,自动收集蚂蚁森林能量脚本、Appium和Python实现蚂蚁森林自动化收取能量的相关信息,请在本站寻找。

本文标签: