情况说明:该脚本适配华为手机、Android7.0以上版本、支付宝1.0.75版本及以上版本、分辨率1920x1080、autojs软件4.0版本(百度网盘资源:链接:https://pan.baidu.com/s/1w1k8wqXd8bAkRS_8mqz6IQ&shfl=sharepset 提取码:ikpp )
//var energeType=["线下支付","行走","共享单车","地铁购票","网络购票","网购火车票","生活缴费","ETC缴费","电子发票","绿色办公","咸鱼交易","预约挂号"];
var morningTime="07:28";//自己运动能量生成时间
var startTime="07:01";
var endTime="7:40";
unlock();
sleep(2000);
mainEntrence();
//蚂蚁会员积分
function get_alipay_points(){
clickByTextDesc("我的",0);
sleep(2000);
clickByTextDesc("支付宝会员",0);
sleep(8000);
clickByTextDesc("领积分",0);
sleep(2000);
var i=0;
for(i=0; i<10;i++){
clickByTextDesc("点击领取",0);
sleep(100);
}
back();
sleep(1000);
back();
sleep(1000);
clickByTextDesc("首页",0);
}
//蚂蚁会员家庭积分
function get_alipay_family(){
clickByTextDesc("我的",0);
sleep(2000);
clickByTextDesc("支付宝会员",0);
sleep(8000);
clickByTextDesc("我的家",0);
sleep(2000);
var i=0;
for(i=0; i<10;i++){
clickByTextDesc("到店付款",0);
clickByTextDesc("每日签到",0);
sleep(100);
}
back();
sleep(1000);
back();
sleep(1000);
clickByTextDesc("首页",0);
}
//
function exit_till_error(){
clickByTextDesc("关闭",0);
sleep(5000);
clickByTextDesc("关闭",0);
sleep(5000);
do{
//打开支付宝
openAlipay();
//蚂蚁庄园
//if(!checkTime()){
enterAntFarm();
// }
//进入蚂蚁森林主页,收集自己的能量
enterMyMainPage();
//进入排行榜
enterRank();
//进入好友主页,收好友能量
enterOthers();
//结束后返回主页面
whenComplete();
}while(checkTime());
exit();
}
//解锁
function unlock(){
if(!device.isScreenOn()){
//点亮屏幕
device.wakeUp();
//由于MIUI的解锁有变速检测,因此要点开时间以进入密码界面
sleep(1000);
swipe(500, 1800, 500, 200, 2000);
//click(100,150);
//输入屏幕解锁密码,其他密码请自行修改
sleep(2000);
click(210,1500);//*
sleep(500);
click(540,1715);//0
sleep(500);
click(540,1715);//0
sleep(500);
click(870,1020);//*
sleep(500);
}
}
/**
* 获取权限和设置参数
*/
function prepareThings(){
setScreenMetrics(1080, 1920);
//toast("test1");
//请求截图
if(!requestScreenCapture()){
toast("请求截图失败,脚本退出");
exit();
}
sleep(3000);
//toast("test2");
}
/**
* 设置按键监听 当脚本执行时候按音量减 退出脚本
*/
function registEvent() {
events.observeKey();
events.onKeyDown("volume_down", function(event){
toast("程序结束");
exit();
});
}
/**
* 获取截图
*/
function getCaptureImg(){
//captureScreen("/storage/emulated/0/DCIM/Screenshots/1.png");
//sleep(500);
var img0 = captureScreen();
sleep(100);
if(img0==null || typeof(img0)=="undifined"){
toast("截图失败,脚本退出");
exit();
}else{
return img0;
}
}
/**
* 从支付宝主页进入蚂蚁森林我的主页
*/
function enterMyMainPage(){
//五次尝试蚂蚁森林入
var i=0;
swipe(520,1200,520,600,500);
sleep(500);
swipe(520,600,520,1200,500);
while (!textEndsWith("蚂蚁森林").exists() && !descEndsWith("蚂蚁森林").exists() && i<=5){
sleep(1000);
i++;
}
clickByTextDesc("蚂蚁森林",0);
//等待进入自己的主页,10次尝试
sleep(3000);
i=0;
while (!textEndsWith("地图").exists() && !descEndsWith("地图").exists() && i<=10){
sleep(1000);
i++;
}
toast("第"+i+"次尝试进入自己主页");
if(i>=10){
toast("进入自己能量主页失败");
return false;
//exit_till_error();
}
//收自己能量
for(var row = 380;row < 750;row+=70)
for(var col = 250;col < 850;col+=70){
click(col,row);
//sleep(50);
}
//clickByTextDesc("行走",0);
//clickByTextDesc("线下支付",0);
toast("自己能量收集完成");
sleep(100);
return true;
}
/**
* 进入排行榜
*/
function enterRank(){
toast("进入排行榜");
sleep(2000);
swipe(520,1200,520,300,500);
sleep(500);
swipe(520,1200,520,300,500);
sleep(500);
swipe(520,1200,520,300,500);
sleep(500);
swipe(520,1200,520,300,500);
sleep(500);
swipe(520,1200,520,300,500);
toast("查看更多好友");
sleep(500);
clickByTextDesc("查看更多好友",0);
//等待排行榜主页出现
var i=0;
while (!textEndsWith("好友排行榜").exists() && !descEndsWith("好友排行榜").exists() && i<=10){
sleep(1000);
i++;
}
toast("第"+i+"次尝试进入好友排行榜");
if(i>=10){
toast("进入好友排行榜失败");
return false;
//exit_till_error();
}
return true;
}
/**
* 从排行榜获取可收集好友的点击位置
*/
function getHasEnergyfriend(type) {
var img = getCaptureImg();
//getCaptureImg();
//var img = images.read("/storage/emulated/0/Pictures/Screenshots/1.png");
var p=null;
if(type==1){
// 区分倒计时和可收取能量的小手
//p = images.findMultiColors(img, "#30bf6c",[[50, 0, "#30bf6c"], [44,43, "#ffffff"]], {
// region: [1018,100 , 1, 1800]
//});
p = images.findMultiColors(img, "#1da06d",[[50, 0, "#1da06d"], [44,43, "#ffffff"]], {
region: [1017,100 , 1, 1800]
});
//0xf99137是编辑器的橘黄色字体(字符串)颜色,这里找到替好友收能量的橘黄色标志
var point = findColor(img, "#f99137", {
region: [1017, 100, 1, 1800],
threads: 8
});
}
if(p!=null){
toast("找到好友");
return p;
}else {
//toast("此页没有找到可收能量的好友");
if(point!=null){
return point;
}else{
return null;
}
}
}
/**
* 在排行榜页面,循环查找可收集好友
* @returns {boolean}
*/
function enterOthers(){
var i=1;
var ePoint=getHasEnergyfriend(1);
//确保当前操作是在排行榜界面
//不断滑动,查找好友
while(ePoint==null){
//如果到了收取自己能量的时间,先收取自己能量
if(myEnergyTime()){
return false;
}
if(textEndsWith("好友排行榜").exists() || descEndsWith("好友排行榜").exists()){
swipe(520,1200,520,600,500);
sleep(200);
ePoint=getHasEnergyfriend(1);
i++;
//如果检测到结尾,同时也没有可收能量的好友,那么结束收取
if(textEndsWith("没有更多了").exists() || descEndsWith("没有更多了").exists()){
if(ePoint == null){
return true;
}
}
//如果连续32次都未检测到可收集好友,无论如何停止查找(由于程序控制了在排行榜界面,且判断了结束标记,基本已经不存在这种情况了)
if(i>55){
toast("程序可能出错,连续"+i+"次未检测到可收集好友");
return false;
}
}
}
//找到好友
//进入好友页面,10次尝试
click(ePoint.x,ePoint.y+20);
sleep(3000);
var i=0;
while (!textEndsWith("浇水").exists() && !descEndsWith("浇水").exists() && i<=20){
sleep(1000);
i++;
}
toast("第"+i+"次尝试进入好友主页");
if(i>=15){
toast("进入好友能量主页失败");
return false;
//exit_till_error();
}
//收能量
for(var row = 500;row < 750;row+=70)
for(var col = 170;col < 880;col+=70){
click(col,row);
//sleep(50);
}
// clickByTextDesc("可收取",0);
//等待返回好友排行榜
back();
var j=0;
if(!textEndsWith("好友排行榜").exists() && !descEndsWith("好友排行榜").exists() && j<=20){
sleep(1000);
j++;
}
if(j>=15){
toast("返回排行榜失败");
return false;
//exit_till_error();
}
//registEvent();
//返回排行榜成功,继续
enterOthers();
}
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;
}
//toast(pos.id());
var str = pos.id();
if(str != null){
if(str.search("search") == -1){
click(posb.centerX(),posb.centerY()-paddingY);
//toast("get it 1");
clicked = true;
}
}else{
click(posb.centerX(),posb.centerY()-paddingY);
//toast("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;
}
//toast(pos.id());
var str = pos.id();
if(str != null){
if(str.search("search") == -1){
click(posb.centerX(),posb.centerY()-paddingY);
//toast("get it 3");
clicked = true;
}
}else{
click(posb.centerX(),posb.centerY()-paddingY);
//toast("get it 4");
clicked = true;
}
sleep(100);
});
}
return clicked;
}
/**
* 结束后返回主页面
*/
function whenComplete() {
toast("结束");
back();
sleep(1500);
back();
}
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){
//sleep(2000);
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;
}
}
function enterAntFarm(){
var i=0;
swipe(520,1200,520,600,500);
sleep(500);
swipe(520,600,520,1200,500);
while (!textEndsWith("蚂蚁庄园").exists() &&!descEndsWith("蚂蚁庄园").exists() && i<=5){
sleep(1000);
i++;
}
if(i>=5){
return false;
}
clickByTextDesc("蚂蚁庄园",0);
sleep(7000);
//captureScreen("/storage/emulated/0/DCIM/Screenshots/2_1.png");
//exit();
click(936,1635);//喂饲料
sleep(2000);
click(424,1265);//赶小鸡
sleep(2000);
click(240,1115);//请走他
sleep(2000);
click(828,1265);//赶小鸡
sleep(2000);
click(649,1107);//请走他
sleep(2000);
click(221,1338);//收蛋
sleep(1000);
//click(350,1695);//领饲料,这里有点问题,所以先注释掉
//sleep(1000);
//swipe(600, 1500, 600, 900, 2000);
//clickByTextDesc("领取",0);
//click(340,1900);sleep(1000);click(230,1600);sleep(1000);
//click(930,1900);sleep(1000);click(670,1600);sleep(1000);
//captureScreen("/storage/emulated/0/DCIM/Screenshots/2_2.png");
back();
//back();
sleep(2000);
return true;
}
function openAlipay(){
//launchApp("Alipay");
launchApp("支付宝");
toast("等待支付宝启动");
//sleep(3000);
var i=0;
while (!textEndsWith("扫一扫").exists() && !descEndsWith("扫一扫").exists() && i<=5){
sleep(2000);
i++;
}
toast("第"+i+"次尝试进入支付宝主页");
if(i>=5){
toast("没有找到支付宝首页");
sleep(1000);
clickByTextDesc("首页",0);
return false;
//exit_till_error();
}
return true;
}
//程序主入口
function mainEntrence(){
//前置操作
prepareThings();
//注册音量下按下退出脚本监听
//registEvent();
do{
//打开支付宝
openAlipay();
//蚂蚁庄园
if(!checkTime()){
enterAntFarm();
}
//进入蚂蚁森林主页,收集自己的能量
enterMyMainPage();
//进入排行榜
enterRank();
//进入好友主页,收好友能量
enterOthers();
//结束后返回主页面
whenComplete();
}while(checkTime());
//获得积分
get_alipay_points();
//获得家庭积分
get_alipay_family();
exit();
}
滑动点击函数:
代码中模拟人手滑动的函数是swipe(x1,y1,x2,y2,delay);这5个参数的代表了你从坐标为(x1,y1)的点滑动到(x2,y2)的点用时为delay毫秒。所以,对于分辨率不是1920*1080的手机,请自己根据自己的手机的分辨率调整参数(坐标系的原点是手机屏幕的左上角)。
代码中模拟人手点击的函数是click(x1,y1),(x1,y1)即为你要点击地方的坐标。
需要注意的是,每次滑动或者点击后,都加一个sleep(delay),让点击或滑动不要过于频繁。
对于手机分辨率不是1920*1080的童鞋,代码中所有swipe()和click()函数中出现的数字,均需要自己计算相应像素点参数并修改。
寻找可偷能量的好友函数:
如何知道哪位胖友的能量可以收取了呢?当然是有小手的胖友啊,那怎么识别胖友的小手呢。
代码中取了三个点--左上角和右上角的点都是绿色的,对应的颜色代码是#1da06d。这个地方要注意,最好用PS看一下这个绿色的颜色代码是多少,因为在原代码中颜色代码是#30bf6c,导致我每次都跳过这个可爱的小手,最后用PS才发现不一样,推测是支付宝的开发给改了颜色。
颜色取对了之后,就要取点坐标了。我们可以自己截张带小手的图,然后将原图发到电脑上。使用电脑自带的画图软件打开图片,将鼠标放在左上角红点的位置,这个时候画图软件的左下角就会显示这个像素点的坐标,用这个坐标的X值替换下图代码[1018,200,1,1700]中的1018即可,其中搜索区域宽度[1,1700]可根据手机分辨率修改1700的值(region函数中的第二个参数(200)和第四个参数(1700)之和不要超过你的手机分辨率(1920))。左上角红点的坐标与右上角红点的相对坐标为[59,0],与下面红点的相对坐标为[46,44],这些相对坐标在不同分辨率的手机上是不同的,需要自己用画图工具取像素点坐标之后自己去计算。
收能量函数:
重头戏来了,那我如何收自己的能量以及偷别人的能量呢?原代码中是通过检查“可收取”文字的坐标实现点击收取,但是我发现并不能检测到,每次都是点进别人的主页,啥都不干就退出了,这是不能忍受的。我也没啥好办法,就用了暴力点击的方法收取能量----把所有有可能出现能量的地方都点一遍(一个都跑不了!!!!)。
上面两个图左图是收自己的能量,右图是收别人能量的循环,收自己能量的宽度(140~800)比收别人能量的宽度(170~1001)要小一点,因为有可能会点到"通知"按钮。以自己的蚂蚁森林主页为例。代码中的参数即为图中的矩形范围,想要自己修改的筒靴可以根据对应数值修改代码。这个坐标也是像素点的坐标,可以在电脑的画图中自己画个矩形,然后查看四个顶点的坐标。