Auto.js自動(dòng)收取自己和好友螞蟻森林能量腳本
用autoJS寫的能量收取腳本軟件.說一下達(dá)到的效果,把螞蟻森林按鈕要設(shè)置在常用應(yīng)用中.先收取自己主頁的能量,然后進(jìn)入排行榜收集好友的能量.中途可以按下音量下鍵提前結(jié)束腳本運(yùn)行.改改測測基本上現(xiàn)在運(yùn)行完美的了,充分衡量了網(wǎng)絡(luò)延遲和程序運(yùn)行正常的平衡性.并且支持支持運(yùn)動(dòng)能量生成時(shí)間段執(zhí)行,等待自己的運(yùn)動(dòng)能量生成收集.我是配合tasker設(shè)置的定時(shí)執(zhí)行腳本,由Tasker喚醒設(shè)備教程鏈接,調(diào)用autojs插件執(zhí)行任務(wù).總之我覺得要想下載下來直接使用的話可能由于運(yùn)行環(huán)境因素,你可能要調(diào)整一下.這個(gè)作為參考的價(jià)值還是稍微比較好的.
說明:
我的設(shè)備是6.0的,因?yàn)閏lick及很多函數(shù)7.0以上才能用.根據(jù)搜索組件,利用UiObject組件的click點(diǎn)擊我測試在我這失效,改用了獲取到組件位置后,調(diào)用Tap(x,y).點(diǎn)擊、滑動(dòng)的處理我用的是root的處理方式,沒root自行應(yīng)該改為無障礙方式應(yīng)該也可以話.目前只支持分辨率為1080,1920.如果分辨率不一樣,可能你還有做分辨率兼容性處理.或者等我后續(xù)處理.后邊會(huì)不定期更新新的功能
var myEnergeType=["線下支付","行走","共享單車","地鐵購票","網(wǎng)絡(luò)購票","網(wǎng)購火車票","生活繳費(fèi)","ETC繳費(fèi)","電子發(fā)票","綠色辦公","咸魚交易","預(yù)約掛號(hào)"];
var morningTime="07:10";//自己運(yùn)動(dòng)能量生成時(shí)間
function tLog(msg) {
toast(msg);
console.log(msg)
}
/**
* 獲取權(quán)限和設(shè)置參數(shù)
*/
function prepareThings(){
setScreenMetrics(1080, 1920);
//請(qǐng)求截圖
if(!requestScreenCapture()){
tLog("請(qǐng)求截圖失敗");
exit();
}
}
/**
* 設(shè)置按鍵監(jiān)聽 當(dāng)腳本執(zhí)行時(shí)候按音量減 退出腳本
*/
function registEvent() {
//啟用按鍵監(jiān)聽
events.observeKey();
//監(jiān)聽音量上鍵按下
events.onKeyDown("volume_down", function(event){
tLog("腳本手動(dòng)退出");
exit();
});
}
/**
* 獲取截圖
*/
function getCaptureImg(){
var img0 = captureScreen();
if(img0==null || typeof(img0)=="undifined"){
tLog("截圖失敗,退出腳本");
exit();
}else{
return img0;
}
}
/**
* 默認(rèn)程序出錯(cuò)提示操作
*/
function defaultException() {
tLog("程序當(dāng)前所處狀態(tài)不合預(yù)期,腳本退出");
exit();
}
/**
* 等待加載收集能量頁面,采用未找到指定組件阻塞的方式,等待頁面加載完成
*/
function waitPage(type){
// 等待進(jìn)入自己的能量主頁
if(type==0){
desc("消息").findOne();
}
// 等待進(jìn)入他人的能量主頁
else if(type==1){
desc("澆水").findOne();
}
//再次容錯(cuò)處理
sleep(3000);
}
/**
* 從支付寶主頁進(jìn)入螞蟻森林我的主頁
*/
function enterMyMainPage(){
launchApp("支付寶");
tLog("等待支付寶啟動(dòng)");
var i=0;
sleep(1000);
//五次嘗試螞蟻森林入口
while (!textEndsWith("螞蟻森林").exists() && i<=5){
sleep(2000);
i++;
}
clickByText("螞蟻森林",true,"請(qǐng)把螞蟻森林入口添加到主頁我的應(yīng)用");
//等待進(jìn)入自己的主頁
waitPage(0);
}
/**
* 進(jìn)入排行榜
*/
function enterRank(){
Swipe(520,1860,520,100);
sleep(2500);
clickByDesc("查看更多好友",0,true,"程序未找到排行榜入口,腳本退出");
var i=0;
//等待排行榜主頁出現(xiàn)
sleep(2000);
while (!textEndsWith("好友排行榜").exists() && i<=5){
sleep(2000);
i++;
}
if(i>=5){
defaultException();
}
}
/**
* 從排行榜獲取可收集好有的點(diǎn)擊位置
* @returns {*}
*/
function getHasEnergyfriend(type) {
var img = getCaptureImg();
var p=null;
if(type==1){
//411寬度 #a2cbb4 1032,1820 #30bf6c 1032,1787 -33 #52ca84 1032,1832 12 #ffffff 1032,1835 15
p = images.findMultiColors(img, "#a2cbb4",[[0, -33, "#30bf6c"], [0,12, "#52ca84"],[0,15, "#ffffff"]], {
region: [1032, 180, 1, 1700]
});
}else if(type==2){
// 480寬度 基準(zhǔn)點(diǎn)1775,832 #30bf6 -2,23 #ffffff -5,16 #ffffff 0,-12 #30bf6c 0,44 #30bf6c
p = images.findMultiColors(img, "#30bf6c",[[-2, 23, "#ffffff"], [-5,16, "#ffffff"],[0,-12, "#30bf6c"],[0,44, "#30bf6c"]], {
region: [1069, 180, 7, 1680]
});
}
if(p!=null){
return p;
}else {
return null;
}
}
/**
* 判斷是否好有排行榜已經(jīng)結(jié)束
* @returns {boolean}
*/
function isRankEnd() {
if(descEndsWith("沒有更多了").exists()){
var b=descEndsWith("沒有更多了").findOne();
var bs=b.bounds();
if(bs.centerY()<1920){
return true;
}
}
return false;
}
/**
* 在排行榜頁面,循環(huán)查找可收集好友
* @returns {boolean}
*/
function enterOthers(){
tLog("開始檢查排行榜");
var i=1;
var ePoint=getHasEnergyfriend(1);
//確保當(dāng)前操作是在排行榜界面
while(ePoint==null && textEndsWith("好友排行榜").exists()){
//滑動(dòng)排行榜 root方式的的點(diǎn)擊調(diào)用.如無root權(quán)限,7.0及其以上可采用無障礙模式的相關(guān)函數(shù)
Swipe(520,1800,520,300,1000);
sleep(3000);
ePoint=getHasEnergyfriend(1);
i++;
//檢測是否排行榜結(jié)束了
if(isRankEnd()){
return false;
}
//如果連續(xù)32次都未檢測到可收集好友,無論如何停止查找(由于程序控制了在排行榜界面,且判斷了結(jié)束標(biāo)記,基本已經(jīng)不存在這種情況了)
else if(i>32){
tLog("程序可能出錯(cuò),連續(xù)"+i+"次未檢測到可收集好友");
exit();
}
}
if(ePoint!=null){
//點(diǎn)擊位置相對(duì)找圖后的修正
Tap(ePoint.x,ePoint.y+20);
waitPage(1);
clickByDesc("可收取",80);
//進(jìn)去收集完后,遞歸調(diào)用enterOthers
back();
sleep(2000);
var j=0;
//等待返回好有排行榜
if(!textEndsWith("好友排行榜").exists() && j<=5){
sleep(2000);
j++;
}
if(j>=5){
defaultException();
}
enterOthers();
}else{
defaultException();
}
}
/**
* 根據(jù)描述值 點(diǎn)擊
* @param energyType
* @param noFindExit
*/
function clickByDesc(energyType,paddingY,noFindExit,exceptionMsg){
if(descEndsWith(energyType).exists()){
descEndsWith(energyType).find().forEach(function(pos){
var posb=pos.bounds();
Tap(posb.centerX(),posb.centerY()-paddingY);
sleep(2000);
});
}else{
if(noFindExit!=null && noFindExit){
if(exceptionMsg !=null){
tLog(exceptionMsg);
exit();
}else{
defaultException();
}
}
}
}
/**
* 根據(jù)text值 點(diǎn)擊
* @param energyType
* @param noFindExit
*/
function clickByText(energyType,noFindExit,exceptionMsg){
if(textEndsWith(energyType).exists()){
textEndsWith(energyType).find().forEach(function(pos){
var posb=pos.bounds();
Tap(posb.centerX(),posb.centerY()-60);
});
}else{
if(noFindExit!=null && noFindExit){
if(exceptionMsg !=null){
tLog(exceptionMsg);
exit();
}else{
defaultException();
}
}
}
}
/**
* 遍歷能量類型,收集自己的能量
*/
function collectionMyEnergy(){
var energyRegex=generateCollectionType();
var checkInMorning=false;
//如果是早上7點(diǎn)10分左右的話.等待主頁能量出現(xiàn) 每隔一秒檢測一次
while(isMorningTime() && descEndsWith("行走").exists()){
if (!checkInMorning){
tLog("等待運(yùn)動(dòng)能量生成中...");
checkInMorning=true;
}
descEndsWith("行走").find().forEach(function(pos){
var posb=pos.bounds();
Tap(posb.centerX(),posb.centerY()-80);
sleep(1500);
});
}
if(checkInMorning){
tLog("運(yùn)動(dòng)能量收集完成");
}
if(descMatches(energyRegex).exists()){
if(!checkInMorning){
tLog("防止小樹的提示遮擋,等待中");
sleep(7000);
}
descMatches(energyRegex).find().forEach(function(pos){
var posb=pos.bounds();
Tap(posb.centerX(),posb.centerY()-80);
sleep(2000);
});
}
}
/**
* 結(jié)束后返回主頁面
*/
function whenComplete() {
tLog("結(jié)束");
back();
sleep(1500);
back();
exit();
}
/**
* 根據(jù)能量類型數(shù)組生成我的能量類型正則查找字符串
* @returns {string}
*/
function generateCollectionType() {
var regex="/";
myEnergeType.forEach(function (t,num) {
if(num==0){
regex+="(\\s*"+t+"$)";
}else{
regex+="|(\\s*"+t+"$)";
}
});
regex+="/";
return regex;
}
function isMorningTime() {
var now =new Date();
var hour=now.getHours();
var minu=now.getMinutes();
var targetTime=morningTime.split(":");
if(Number(targetTime[0])==hour && Math.abs(Number(targetTime[1])-minu)<=2){
return true;
}else{
return false;
}
}
//程序主入口
function mainEntrence(){
//前置操作
prepareThings();
//注冊(cè)音量下按下退出腳本監(jiān)聽
registEvent();
//從主頁進(jìn)入螞蟻森林主頁
enterMyMainPage();
//收集自己的能量
collectionMyEnergy();
//進(jìn)入排行榜
enterRank();
//在排行榜檢測是否有好有的能量可以收集
enterOthers();
//結(jié)束后返回主頁面
whenComplete();
}
mainEntrence();
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IE8的JavaScript點(diǎn)擊事件(onclick)不兼容的解決方法
這篇文章主要介紹了IE8的JavaScript點(diǎn)擊事件(onclick)不兼容的解決方法,大家參考使用吧2013-11-11
JavaScript中數(shù)組sort()方法的基本使用與踩坑記錄
: js中用方法sort()為數(shù)組排序,這篇文章主要給大家介紹了關(guān)于JavaScript中數(shù)組sort()方法的基本使用,sort()方法已經(jīng)可以滿足我們對(duì)數(shù)組的很多處理需求,需要的朋友可以參考下2021-06-06
layui在form表單頁面通過Validform加入簡單驗(yàn)證的方法
今天小編就為大家分享一篇layui在form表單頁面通過Validform加入簡單驗(yàn)證的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09
event.X和event.clientX的區(qū)別分析
解釋一下event.X和event.clientX有什么區(qū)別?event.clientX返回事件發(fā)生時(shí),mouse相對(duì)于客戶窗口的X坐標(biāo) event.X也一樣但是如果設(shè)置事件對(duì)象的定位屬性值為relative2011-10-10
A標(biāo)簽中通過href和onclick傳遞的this對(duì)象實(shí)現(xiàn)思路
想傳遞當(dāng)前對(duì)象給一個(gè)函數(shù),于是就將這個(gè)URL寫成"Javascript:shoControlSidebar(this)",可是結(jié)果發(fā)現(xiàn)這并不可行,接下來為大家詳細(xì)介紹下解決方法2013-04-04
JS實(shí)現(xiàn)數(shù)組簡單去重及數(shù)組根據(jù)對(duì)象中的元素去重操作示例
這篇文章主要介紹了JS實(shí)現(xiàn)數(shù)組簡單去重及數(shù)組根據(jù)對(duì)象中的元素去重操作,涉及javascript數(shù)組元素的遍歷、判斷、追加等操作實(shí)現(xiàn)去重功能的相關(guān)技巧,需要的朋友可以參考下2018-01-01
echarts動(dòng)態(tài)渲染柱狀圖背景顏色及頂部數(shù)值方法詳解
在使用echarts時(shí),有時(shí)需要給柱狀圖設(shè)置背景,下面這篇文章主要給大家介紹了關(guān)于echarts動(dòng)態(tài)渲染柱狀圖背景顏色及頂部數(shù)值的相關(guān)資料,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
我要點(diǎn)爆”微信小程序云開發(fā)之項(xiàng)目建立與我的頁面功能實(shí)現(xiàn)
這篇文章主要介紹了我要點(diǎn)爆”微信小程序云開發(fā)之項(xiàng)目建立與我的頁面功能實(shí)現(xiàn),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-05-05

