双11来了 收猫币麻烦? 使用autojs实现个自动脚本解放双手

2020-10-28 11:39:54 浏览数 (1)

前言:

双11来了,我也是一个剁手党,当然要想办法能省点钱算一点,双11的活动是攒喵币,和往年一样,点击各种商家页面来获取,这个过程是一个重复的过程,往年我都是手动点完的,但是今年真不想再继续做这些重复的事了,于是就有了下面这个自动脚本.

技术调研:

在网上也搜索了好多的方式方法,最终还是使用了autojs这个脚本工具,正所谓物理外挂最为致命,这个也有点类似物理外佳了.

实现效果:

还有自动浏览店铺的功能,由于太大就没上传完整的效果图了

实现代码:

这次双11,在淘宝与支付宝中都有活动,所以写了两个项目,不过代码逻辑大体都差不多,主要是点击到活动页面=>等待15秒 => 返回上一层页面... 然后循环

代码贴上:

代码语言:javascript复制
var baseWidth = 1080,baseHeight = 2400;
var height = device.height;
var width = device.width;

setScreenMetrics(baseWidth,baseHeight);

threads.start(function(){
  events.observeKey();
  events.on("key_down", function(keyCode, events){
    if(keyCode == keys.volume_up){
      toastLog('停止脚本使用')
      exit();
    }
  });
});
var canCapture = requestScreenCapture();
if(!canCapture){
  toast('请授权截图!')
  exit()
}

launchApp('手机淘宝')
sleep(3000);

click(800,1218);

sleep(6000);

let catImg = images.read('/sdcard/catImg.jpg');
if(catImg === null){
  catImg = images.load('https://pic1.zhimg.com/80/v2-8a9af44ba48b553fbbdafd96475ad47c_1440w.jpeg'); // 图片不能为png格式的 无法加载到
  catImg.saveTo('/sdcard/catImg.jpg');
}

// let screenCaptureImg2 = images.grayscale(screenCaptureImg)
// images.save(screenCaptureImg2,'/sdcard/screenCaptureImg2.jpg')
sleep(2000);

// 如果有11月11日见弹出框 则关闭
var eleven = text('好的,11月11日见').findOnce();
if(eleven){
  click('好的,11月11日见');
  sleep(2000)
}

click(942,1973); // 点击  赚喵币


sleep(1500)
while(true){
  var goText = text('去浏览').findOnce();
  if(goText){
    click(goText.bounds().centerX(),goText.bounds().centerY());
    sleep(5000)
    swipe(baseWidth/3,baseHeight - 200,baseWidth/2,200,2000);
    sleep(13000);
    back();
    sleep(2000);
    click('领取奖励');
    sleep(1000)
  }else{
    var goSearch = text('去搜索').findOnce();
    if(goSearch){
      click(goSearch.bounds().centerX(),goSearch.bounds().centerY());
      sleep(5000)
      swipe(baseWidth/3,baseHeight - 200,baseWidth/2,200,2000);
      sleep(13000);
      back();
      sleep(2000);
      click('领取奖励');
      sleep(1000);
      
    }else{
      // 需要更多的变量
      var array = ['逛一逛"潮酷新品"(0/2)','逛一逛"潮酷新品"(1/2)','逛一逛"潮流趋势"(0/2)','逛一逛"潮流趋势"(1/2)','逛一逛"时尚配饰"(0/2)','逛一逛"时尚配饰"(1/2)','逛一逛"家居百货"(0/2)','逛一逛"家居百货"(1/2)'];
      var goTo = null;
      for(var i = 0;i<array.length;i  ){
        var a = text(array[i]).findOnce();
        if(a){
          goTo = a;
          break;
        }
      }
      if(goTo){
        click(goTo.bounds().centerX(),goTo.bounds().centerY());
        sleep(2000)
        swipe(baseWidth/3,baseHeight - 200,baseWidth/2,200,2000);
        sleep(15500);
        back();
        sleep(2000);
        click('领取奖励');
        sleep(1000);
      }else{
        break
      }
    }
  }
}
toastLog('结束!');
click(974,650); // 点击右上角关闭
exit();




function readImg(name,url){
  let catImg = images.read('/sdcard/' name);
  if(catImg === null){
    catImg = images.load(url); // 图片不能为png格式的 无法加载到
    catImg.saveTo('/sdcard/' name);
  };
  return catImg
}

这段代码是用于淘宝收取喵币的,前后仅花了2小时不到,这一块内容还是比较简单的,主要之前写过类似的代码,有些经验了.

遇到的问题:

1.点击文字,由于不确定一些字体是图片还是纯文本,所以在调试的时候,都是凭感觉去试

2.活动的文本较多,有些地方情况无法用找图片的方式来定位要点击的位置,但是文字内容又不确定,所以只能把可能的文本内容情况给加上,比如这一块 var array = ['逛一逛"潮酷新品"(0/2)','逛一逛"潮酷新品"(1/2)','逛一逛"潮流趋势"(0/2)','逛一逛"潮流趋势"(1/2)','逛一逛"时尚配饰"(0/2)','逛一逛"时尚配饰"(1/2)','逛一逛"家居百货"(0/2)','逛一逛"家居百货"(1/2)']; 现在是把我可能遇到的情况都加上了,如果后面支付宝有增删改查的话,也需要跟着改一下逻辑...

3.手机兼容,由于自己只有一个手机,只能使用自己的手机来测试,虽然官网有说可以通过方法setScreenMetrics(baseWidth,baseHeight)来保持比例,但是自己没试过 也许还是不行呢.

4.还有各类的点击可能性,并没有完成覆盖,有些去完成的任务只能通过手点来获取喵币.

5.autojs是好早之前的框架,现在已经不维护了,有一些es6的语法是不支持的,比如const,let,尽量不用到新语法来写业务逻辑.

6.各种sleep 需要等待app内容加载完成,如果页面有不确定因素也是需要延长下一步的执行逻辑的.

总结:

小东西有大用处,在接下来的几天时间能够帮助我节省好多的时间,让自己感觉高大上一些,多探究一些小玩意,对自己以后的职业生涯也有帮助..

原文链接: https://www.xiaye0.com/?p=78

0 人点赞