
autojs.app版本:
Version 4.1.1 Alpha2
运行截图:

下面是借鉴前辈脚本的基础上,修改后的自动收取蚂蚁森林能量的脚本:
/*
支付宝蚂蚁森林收取能量
*/
/*
设备宽:1080
设备高:2160
手机型号:Redmin5Plus
安卓版本:8.1.0
package_name: "com.eg.android.AlipayGphone"
current_Activity: "com.eg.android.AlipayGphone.AlipayLogin"
*/
// 设置初始变量
var morningTime = "07:14"//自己运动能量生成时间
var startTime = "07:00"
var endTime = "7:35"
var screen_width = device.width //设置屏幕的宽度,像素值
var screen_height = device.height //设置屏幕的高度,像素值
var app_name = "支付宝"
var package_name = "com.eg.android.AlipayGphone"
// 开始所有逻辑
mainEntrence()
// 程序主入口
function mainEntrence () {
// 子线程监听关闭事件
listen_Event()
// 前置操作
if (prepareThings()) {
// 打开APP
if (openAPP(app_name, package_name)) {
// 执行主要任务
do {
// 蚂蚁森林
Antsenlin()
} while (checkTime())
closeAPP(package_name)
// 完成所有任务,退出
toastLog("完成所有任务,退出脚本")
sleep(1000)
exit()
} else {
exit()
}
} else {
exit()
}
}
// 监听音量键,如果点击,则退出脚本
function listen_Event () {
threads.start(function () {
//在子线程中调用observeKey()从而使按键事件处理在子线程执行
events.observeKey()
events.on("key_down", function (keyCode, events) {
//音量键关闭脚本
if (keyCode == keys.volume_down) {
toastLog("您点击了音量键,脚本自动退出!")
sleep(1500)
exit()
}
})
})
}
//获取权限和设置参数
function prepareThings () {
// 检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。
auto.waitFor()
// 显示设备基础详情
toastLog("\n设备宽:" + screen_width + "\n" + "设备高:" + screen_height + "\n" + "手机型号:" + device.model + "\n安卓版本:" + device.release)
sleep(1500)
setScreenMetrics(screen_width, screen_height)
// 获取应用的packagename
var packagename = app.getPackageName(app_name)
toastLog("\npackage_name:" + packagename)
sleep(1500)
//请求截图
if (requestScreenCapture()) {
toastLog("必要权限获取成功")
sleep(1000)
return true
} else {
toastLog("必要权限获取失败,脚本退出")
sleep(1000)
return false
}
}
// 蚂蚁森林操作
function Antsenlin () {
// 进入蚂蚁森林我的主页
if (enterMyMainPage()) {
//进入好友主页,收好友能量
if (enterOthers()) {
// 收取能量结束,返回主页面
toastLog("蚂蚁森林收取能量结束")
sleep(1000)
back()
sleep(500)
back()
sleep(500)
return_to_index()
return true
} else {
back()
sleep(500)
return false
}
} else {
return false
}
}
//从支付宝主页进入蚂蚁森林我的主页
function enterMyMainPage () {
if (page_load_sleep("支付宝首页", "扫一扫", "卡包")) {
clickByTextDesc("蚂蚁森林", 0)
//等待进入自己的主页,5次尝试
if (page_load_sleep("蚂蚁森林我的主页", "背包", "任务")) {
//收自己能量
//clickByTextDesc("克",0)
for (var row = screen_height * 0.256; row < screen_height * 0.376; row += 80)
for (var col = screen_width * 0.185; col < screen_width * 0.815; col += 80) {
click(col, row)
}
toastLog("自己能量收集完成")
sleep(1000)
return true
} else {
return false
}
} else {
return false
}
}
//在排行榜页面,循环查找可收集好友
function enterOthers () {
// 滑动到页面底部
toastLog("滑动到页面底部")
sleep(1000)
swipe(screen_width * 0.5, screen_height * 0.8, screen_width * 0.5, screen_height * 0.1, 500)
sleep(500)
swipe(screen_width * 0.5, screen_height * 0.8, screen_width * 0.5, screen_height * 0.1, 500)
sleep(500)
if (page_load_sleep("蚂蚁森林我的主页下周排行榜", "背包", "任务")) {
toastLog("查看蚂蚁森林更多好友")
sleep(1000)
clickByTextDesc("查看更多好友", 0)
if (page_load_sleep("蚂蚁森林周排行榜", "周排行榜", "总排行榜")) {
if (getother()) {
toastLog("收取好友能量成功")
return true
} else {
toastLog("收取好友能量失败")
back()
sleep(500)
return false
}
} else {
return false
}
} else {
return false
}
}
// 收取有能量的好友能量
function getother () {
sleep(3000)
var i = 1
var ePoint = getHasEnergyfriend(1)
//不断滑动,查找好友
while (ePoint == null) {
//如果到了收取自己能量的时间,先收取自己能量
if (myEnergyTime()) {
return false
}
swipe(screen_width * 0.5, screen_height * 0.7, screen_width * 0.5, screen_height * 0.1, 500)
sleep(1000)
ePoint = getHasEnergyfriend(1)
i++
//如果连续5次都未检测到可收集好友,无论如何停止查找
if (i > 5) {
toastLog("连续" + i + "次未检测到可收能量的好友")
sleep(1000)
return false
}
}
//进入好友页面
click(ePoint.x, ePoint.y + 20)
if (page_load_sleep("好友主页", "TA收取你", "你收取TA")) {
toastLog("进入好友主页成功")
//clickByTextDesc("克",0)
for (var row = screen_height * 0.256; row < screen_height * 0.376; row += 80)
for (var col = screen_width * 0.185; col < screen_width * 0.815; col += 80) {
click(col, row)
}
//等待返回好友排行榜
back()
sleep(500)
//返回排行榜成功,继续
getother()
} else {
return false
}
return true
}
// 从排行榜获取可收集好友的点击位置
function getHasEnergyfriend (type) {
var img = getCaptureImg()
//getCaptureImg()
//var img = images.read("/storage/emulated/0/DCIM/Screenshots/2.png")
var p = null
if (type == 1) {
// 区分倒计时和可收取能量的小手
p = images.findMultiColors(img, "#ffffff", [[0, -35, "#1da06d"], [0, 23, "#1da06d"]], {
region: [1043, 200, 1, screen_height - 300]
})
}
if (p != null) {
toastLog("发现有可收取能量的好友")
return p
} else {
toastLog("没有找到可收能量的好友")
return null
}
}
// 点击页面指定元素
function clickByTextDesc (energyType, paddingY) {
var clicked = false
if (descEndsWith(energyType).exists()) {
descEndsWith(energyType).find().forEach(function (pos) {
var posb = pos.bounds()
if (posb.centerX() < 0 || posb.centerY() - paddingY < 0) {
return false
}
//toastLog(pos.id())
var str = pos.id()
if (str != null) {
if (str.search("search") == -1) {
click(posb.centerX(), posb.centerY() - paddingY)
//toastLog("get it 1")
clicked = true
}
} else {
click(posb.centerX(), posb.centerY() - paddingY)
//toastLog("get it 2")
clicked = true
}
sleep(100)
})
}
if (textEndsWith(energyType).exists() && clicked == false) {
textEndsWith(energyType).find().forEach(function (pos) {
var posb = pos.bounds()
if (posb.centerX() < 0 || posb.centerY() - paddingY < 0) {
return false
}
//toastLog(pos.id())
var str = pos.id()
if (str != null) {
if (str.search("search") == -1) {
click(posb.centerX(), posb.centerY() - paddingY)
//toastLog("get it 3")
clicked = true
}
} else {
click(posb.centerX(), posb.centerY() - paddingY)
//toastLog("get it 4")
clicked = true
}
sleep(100)
})
}
return clicked
}
// 如果当前时间在起始范围内,则一直循环调用,否则只调用一次
function checkTime () {
var now = new Date()
var hour = now.getHours()
var minu = now.getMinutes()
var time_a = startTime.split(":")
var time_b = endTime.split(":")
var timea = 60 * Number(time_a[0]) + Number(time_a[1])
var timeb = 60 * Number(time_b[0]) + Number(time_b[1])
var time = 60 * hour + minu
if (time >= timea && time <= timeb) {
return true
} else {
return false
}
}
// 判断当前时间是否是自己能量生成时间
function myEnergyTime () {
var now = new Date()
var hour = now.getHours()
var minu = now.getMinutes()
var mytime = morningTime.split(":")
if (mytime[0] == hour && (mytime[1] == minu || mytime[1] == minu - 1)) {
return true
} else {
return false
}
}
// 返回app首页
function return_to_index () {
var i = 0
while (!is_require_page("支付宝首页", "扫一扫", "卡包") && i < 5) {
i++
sleep(1000)
toastLog("等待" + i + "秒未找到支付宝首页")
}
while (!is_require_page("支付宝首页", "扫一扫", "卡包") && i >= 5 && i < 10) {
i++
clickByTextDesc("首页", 0)
toastLog("尝试进入支付宝首页第" + i - 5 + "次失败,当前功能模块返回false")
sleep(1000)
}
if (!is_require_page("扫一扫", "卡包") && i >= 10) {
toastLog("进入支付宝首页失败,当前功能模块返回false")
sleep(1000)
return false
}
return true
}
// 启动app
function openAPP (appname, packagename) {
toastLog("启动支付宝APP")
// closeAPP(packagename) // 手机未root,杀死进程权限不够,只能先临时注释掉
sleep(1000)
if (launchApp(appname)) {
toastLog("等待app启动完毕")
if (page_load_sleep("支付宝首页", "扫一扫", "卡包")) {
// 查看当前Activity
var currentAct = currentActivity()
toastLog("\ncurrent_Activity:" + currentAct)
sleep(1000)
return true
} else {
return false
}
} else {
return false
}
}
// 关闭app
function closeAPP (packagename) {
toastLog("关闭APP进程")
// var close_result = shell("am force-stop " + packagename, true) // 是否以root身份运行,默认false,需要手机root
if (back()) { // 手机没有root,上面命令执行失败,提示权限不够,所以只能采用back()方法
var close_result = "成功"
} else {
var close_result = "失败"
}
toastLog("关闭APP进程结果:" + close_result)
}
// 每个页面加载等待
function page_load_sleep (page_name, text1, text2) {
i = 0
limit = 6
while (!is_require_page(page_name, text1, text2) && i < limit) {
i++
sleep(1000)
toastLog("等待" + i + "秒未找到 " + page_name + " 页")
}
if (!is_require_page(page_name, text1, text2) && i >= limit) {
toastLog("进入 " + page_name + " 页面失败,返回fase")
return false
}
toastLog("进入 " + page_name + " 页面成功,返回true")
return true
}
// 判断当前是否为APP指定页
function is_require_page (page_name, text1, text2) {
var exist_text_one = textEndsWith(text1).exists()
var exist_text_two = textEndsWith(text2).exists()
// toastLog("\nexist_text_one:" + exist_text_one + "\nexist_text_two:" + exist_text_two)
sleep(1500)
if (exist_text_one && exist_text_two) {
toastLog("当前是指定页:" + page_name)
return true
} else {
toastLog("当前不是指定页:" + page_name)
return false
}
}
// 判断变量是否为空
function is_kong (str) {
if (str == null || str == "" || str == undefined) {
return true
} else {
return false
}
}
//获取截图
function getCaptureImg () {
//captureScreen("/storage/emulated/0/DCIM/Screenshots/1.png")
//sleep(500)
var img0 = captureScreen()
sleep(100)
if (img0 == null || typeof (img0) == "undifined") {
toastLog("截图失败,脚本退出")
exit()
} else {
return img0
}
}