前言:
双11来了,我也是一个剁手党,当然要想办法能省点钱算一点,双11的活动是攒喵币,和往年一样,点击各种商家页面来获取,这个过程是一个重复的过程,往年我都是手动点完的,但是今年真不想再继续做这些重复的事了,于是就有了下面这个自动脚本.
技术调研:
在网上也搜索了好多的方式方法,最终还是使用了autojs这个脚本工具,正所谓物理外挂最为致命,这个也有点类似物理外佳了.
实现效果:
还有自动浏览店铺的功能,由于太大就没上传完整的效果图了
实现代码:
这次双11,在淘宝与支付宝中都有活动,所以写了两个项目,不过代码逻辑大体都差不多,主要是点击到活动页面=>等待15秒 => 返回上一层页面... 然后循环
代码贴上:
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