京东618活动自动挂机完成任务的Auto.js脚本代码
首先,我们需要安装Auto.js库,然后编写一个简单的脚本来实现自动挂机功能。以下是一个简单的示例: 1. 安装Auto.js库:在手机应用商店搜索并安装Auto.js应用。 2. 打开Auto.js应用,创建一个新的脚本文件。 3. 编写以下代码: ```javascript // 导入相关模块 var utils = require('utils'); var toast = require('toast'); // 设置任务间隔时间(毫秒) var interval = 60000; // 1分钟 // 定义任务函数 function task() { // 获取当前时间 var now = new Date(); // 获取当前小时和分钟 var hour = now.getHours(); var minute = now.getMinutes(); // 判断是否为6:18分 if (hour ==
constVERSION='2022618-16'if(!auto.service){toast('无障碍服务未启动!退出!')exit()}letshowVersion=function(){console.log('当前版本:'+VERSION)console.log('Hello,World!')toast('当前版本:'+VERSION)}console.show()showVersion()functiongetSetting(){letindices=[]autoOpen&&indices.push(0)autoMute&&indices.push(1)autoJoin&&indices.push(2)letsettings=dialogs.multiChoice('任务设置',['自动打开京东进入活动。多开或任务列表无法自动打开时取消勾选','自动调整媒体音量为0。以免直播任务发出声音,首次选择需要修改系统设置权限','自动完成入会任务。京东将授权手机号给商家,日后可能会收到推广短信'],indices)if(settings.length==0){toast('取消选择,任务停止')exit()}if(settings.indexOf(0)!=-1){storage.put('autoOpen',true)autoOpen=true}else{storage.put('autoOpen',false)autoOpen=false}if(settings.indexOf(1)!=-1){storage.put('autoMute',true)autoMute=true}else{storage.put('autoMute',false)autoMute=false}if(settings.indexOf(2)!=-1){storage.put('autoJoin',true)autoJoin=true}else{storage.put('autoJoin',false)autoJoin=false}}letstorage=storages.create("jd_task");letautoOpen=storage.get('autoOpen',true)letautoMute=storage.get('autoMute',true)letautoJoin=storage.get('autoJoin',true)getSetting()if(autoMute){try{device.setMusicVolume(0)toast('成功设置媒体音量为0')}catch(err){alert('首先需要开启权限,请开启后再次运行脚本')exit()}}console.log('开始完成京东任务...')console.log('按音量下键停止')device.keepScreenDim(30*60*1000)//防止息屏30分钟//自定义取消亮屏的退出方法functionquit(){device.cancelKeepingAwake()exit()}//监听音量下键functionregisterKey(){try{events.observeKey()}catch(err){console.log('监听音量键停止失败,应该是无障碍权限出错,请关闭软件后台任务重新运行。')console.log('如果还是不行可以重启手机尝试。')quit()}events.onKeyDown('volume_down',function(event){console.log('京东任务脚本停止了')console.log('请手动切换回主页面')startCoin&&console.log('本次任务开始时有'+startCoin+'金币')quit()})}threads.start(registerKey)//自定义一个findTextDescMatchesTimeoutfunctionfindTextDescMatchesTimeout(reg,timeout){letc=0while(c<timeout/50){letresult=textMatches(reg).findOnce()||descMatches(reg).findOnce()if(result)returnresultsleep(50)c++}returnnull}//打开京东进入活动functionopenAndInto(){console.log('正在打开京东App...')if(!launch('com.jingdong.app.mall')){console.log('可能未安装京东App')}sleep(2000)console.log('进入活动页面')app.startActivity({action:"VIEW",data:'openApp.jdMobile://virtual?params={"category":"jump","action":"to","des":"m","sourceValue":"JSHOP_SOURCE_VALUE","sourceType":"JSHOP_SOURCE_TYPE","url":"https://u.jd.com/JCTuenU","M_sourceFrom":"mxz","msf_type":"auto"}'})}//获取金币数量functiongetCoin(){letanchor=className('android.view.View').filter(function(w){if((w.desc()&&w.desc().match(/分红:.*份/))||(w.text()&&w.text().match(/分红:.*份/))){returntrue}else{returnfalse}}).findOne(5000)if(!anchor){console.log('找不到分红控件')returnfalse}letcoin=anchor.parent().child(2).text()if(coin){returnparseInt(coin)}else{coin=anchor.parent().child(3).text()//有可能中间插了个控件if(coin){returnparseInt(coin)}else{returnfalse}}}//打开任务列表functionopenTaskList(){console.log('打开任务列表')lettaskListButtons=findTextDescMatchesTimeout(/分红+卡牌/,20000)if(!taskListButtons){console.log('未能打开任务列表,请关闭京东重新运行!')quit()}if(taskListButtons.indexInParent()==0){taskListButtons=taskListButtons.parent().parent().children()}else{taskListButtons=taskListButtons.parent().children()}lettaskListButton=nullletflag=0for(leti=3;i<taskListButtons.length;i++){//从第4(4-1)个开始if(taskListButtons[i].clickable()){if(flag){taskListButton=taskListButtons[i]break}else{flag=1continue}}}if(!taskListButton||!taskListButton.clickable()){console.log('无法找到任务列表控件')quit()}taskListButton.click()console.log('等待任务列表')if(!findTextDescMatchesTimeout(/累计任务奖励/,10000)){console.log('似乎没能打开任务列表,退出!')console.log('如果已经打开而未检测到,请删除101版本及以上的webview或使用国内应用市场版京东尝试。')quit()}}//关闭任务列表functioncloseTaskList(){console.log('关闭任务列表')letjiangli=findTextDescMatchesTimeout(/累计任务奖励/,5000)if(!jiangli){console.log('无法找到任务奖励标识')returnfalse}letcloseBtn=jiangli.parent().child(1)returncloseBtn.click()}//重新打开任务列表functionreopenTaskList(){closeTaskList()sleep(3000)openTaskList()sleep(5000)}//获取未完成任务,根据数字标识,返回任务按钮、任务介绍、任务数量(数组)functiongetTaskByText(){lettButton=null,tText=null,tCount=0,tTitle=nullconsole.log('寻找未完成任务...')lettaskButtons=textMatches(/.*浏览并关注.*|.*浏览.*s.*|.*累计浏览.*|.*浏览可得.*|.*逛晚会.*|.*品牌墙.*|.*打卡.*/).find()if(!taskButtons.empty()){//如果找不到任务,直接返回for(leti=0;i<taskButtons.length;i++){letitem=taskButtons[i]tTitle=item.parent().child(1).text()letr=tTitle.match(/(d)/(d*)/)if(!r)continuetCount=(r[2]-r[1])console.log(tTitle,tCount)if(tCount){//如果数字相减不为0,证明没完成tText=item.text()if(!autoJoin&&tText.match(/成功入会/))continueif(tText.match(/下单/))continuetButton=item.parent().child(3)break}}}return[tButton,tText,tCount,tTitle]}//返回任务列表并检查是否成功,不成功重试一次,带有延时functionbackToList(){sleep(500)back()for(leti=0;i<3;i++){//尝试返回3次if(!findTextDescMatchesTimeout(/累计任务奖励/,5000)){console.log('返回失败,重试返回')sleep(2000)back()continue}else{break}}sleep(3000)}//浏览n秒的任务functiontimeTask(){console.log('等待浏览任务完成...')letc=0while(c<40){//0.5*40=20秒,防止死循环if((textMatches(/获得.*?金币/).exists()||descMatches(/获得.*?金币/).exists()))//等待已完成出现breakif((textMatches(/已浏览/).exists()||descMatches(/已浏览/).exists())){//失败console.log('上限,返回刷新任务列表')returnfalse}//弹窗处理letpop=text('升级开卡会员领好礼')if(pop.exists()){pop.parent().parent().child(2).click()console.log('关闭会员弹窗')}sleep(500)c++}if(c>39){console.log('未检测到任务完成标识。')returnfalse}returntrue}//入会任务functionjoinTask(){letcheck=textMatches(/.*确认授权即同意.*|.*我的特权.*|.*立即开卡.*|.*解锁全部会员福利.*/).findOne(8000)if(!check){console.log('无法找到入会按钮,判定为已经入会')returntrue}elseif(check.text().match(/我的特权/)){console.log('已经入会,返回')returntrue}else{sleep(2000)if(check.text().match(/.*立即开卡.*|.*解锁全部会员福利.*/)){letbtn=check.bounds()console.log('即将点击开卡/解锁福利,自动隐藏控制台')sleep(500)console.hide()sleep(500)click(btn.centerX(),btn.centerY())sleep(500)console.show()check=textMatches(/.*确认授权即同意.*/).findOne(8000)sleep(2000)}if(!check){console.log('无法找到入会按钮弹窗,加载失败')returnfalse}if(check.indexInParent()==6){check=check.parent().child(5)}elseif(check.text()=='确认授权即同意'){check=check.parent().child(0)}else{check=check.parent().parent().child(5)}check=check.bounds()letx=check.centerX()lety=check.centerY()console.log('检测是否有遮挡')letfloat=className('android.widget.ImageView').filter(function(w){letb=w.bounds()returnb.left<=x&&b.right>=x&&b.top<=y&&b.bottom>=y}).find()if(float.length>1){console.log('有浮窗遮挡,尝试移除')if(device.sdkInt>=24){gesture(1000,[x,y],[x,y+200])console.log('已经进行移开操作,如果失败请反馈')}else{console.log('安卓版本低,无法自动移开浮窗,入会任务失败。至少需要安卓7.0。')returnfalse}}else{console.log('未发现遮挡的浮窗,继续勾选')}console.log('即将勾选授权,自动隐藏控制台')sleep(500)console.hide()sleep(500)click(x,y)sleep(500)console.show()console.log('准备点击入会按钮')letj=textMatches(/^确认授权(并加入店铺会员)*$/).findOne(5000)if(!j){console.log('无法找到入会按钮,失败')returnfalse}click(j.bounds().centerX(),j.bounds().centerY())sleep(1000)console.log('入会完成,返回')returntrue}}//浏览商品和加购的任务,cart参数为是否加购的flagfunctionitemTask(cart){console.log('等待进入商品列表...')if(!textContains('当前页').findOne(10000)){console.log('未能进入商品列表。')returnfalse}sleep(2000)letitems=textContains('.jpg!q70').find()for(leti=0;i<items.length;i++){if(cart){console.log('加购并浏览')lettmp=items[i].parent().parent()tmp.child(tmp.childCount()-1).click()}else{console.log('浏览商品页')items[i].parent().parent().child(4).click()}sleep(5000)console.log('返回')back()sleep(5000)letr=textContains('.jpg!q70').findOnce()if(!r){back()sleep(5000)}if(i>=4-1){break}}returntrue}//逛店任务functionshopTask(){console.log('等待进入店铺列表...')letbanner=textContains('喜欢').findOne(10000)if(!banner){console.log('未能进入店铺列表。返回。')returnfalse}letc=banner.text().match(/(d)/(d*)/)if(!c){c=4//进行4次}else{c=c[2]-c[1]}sleep(2000)console.log('进行',c,'次')letlike=textContains('喜欢').boundsInside(1,0,device.width,device.height).findOnce()if(!like){console.log('未能找到喜欢按钮。返回。')returnfalse}letbound=[like.bounds().centerX(),like.bounds().centerY()]console.log('喜欢按钮位于',bound)for(leti=0;i<c;i++){click(bound[0],bound[1])console.log('浏览店铺页')sleep(8000)console.log('返回')back()sleep(5000)letr=textContains('喜欢').findOnce()if(!r){back()sleep(5000)}}returntrue}//参观任务functionviewTask(){console.log('进行参观任务')sleep(5000)console.log('参观任务直接返回')returntrue}//品牌墙任务functionwallTask(){console.log('进行品牌墙任务')sleep(3000)for(letiof[2,3,4,5,6]){//选5个console.log('打开一个')textContains('!q70').boundsInside(0,0,device.width,device.height).findOnce(i).click()sleep(5000)console.log('直接返回')back()letr=textContains('!q70').findOne(8000)if(!r)back()sleep(3000)}console.log('返回顶部')letroot=textContains('到底了').findOnce().parent().parent()root.child(root.childCount()-2).click()console.log('品牌墙完成后重新打开任务列表')sleep(3000)openTaskList()returntrue}//单个任务的function,自动进入任务、自动返回任务列表,返回booleanfunctiondoTask(tButton,tText,tTitle){letclickFlag=tButton.click()lettFlagif(tText.match(/浏览并关注.*s|浏览.*s/)){console.log('进行',tText)tFlag=timeTask()}elseif(tText.match(/累计浏览/)){console.log('进行累计浏览任务')if(tText.match(/加购/)){tFlag=itemTask(true)}else{tFlag=itemTask(false)}}elseif(tText.match(/入会/)){console.log('进行入会任务')tFlag=joinTask()}elseif(tText.match(/浏览可得|浏览并关注|晚会/)){lettTitle=tButton.parent().child(1).text()if(tTitle.match(/种草城/)){tFlag=shopTask()}else{tFlag=viewTask()}}elseif(tText.match(/品牌墙/)){tFlag=wallTask()returntFlag//品牌墙无需backToList,提前返回}elseif(tText.match(/打卡/)){tFlag=clickFlag//打卡点击一次即可returntFlag}else{console.log('未知任务类型,默认为浏览任务',tText)tFlag=timeTask()}backToList()returntFlag}functionsignTask(){letanchor=className('android.view.View').filter(function(w){returnw.clickable()&&(w.text()=='去使用奖励'||w.desc()=='去使用奖励')}).findOne(5000)if(!anchor){console.log('未找到使用奖励按钮,签到失败')returnfalse}letanchor_index=anchor.indexInParent()letsign=anchor.parent().child(anchor_index+2)//去使用的后两个sign.click()sleep(3000)sign=textMatches(/.*点我签到.*|.*明天再来.*/).findOne(5000)if(!sign){console.log('未找到签到按钮')returnfalse}if(sign.text().match(/明天再来/)){console.log('已经签到')}else{click(sign.bounds().centerX(),sign.bounds().centerY())sleep(1000)console.log('签到完成')//letnext=textContains('下一个红包').findOne(5000)//if(!next){//console.log('找不到下一个红包提示语,未能自动关闭弹窗')//}else{//console.log('关闭签到弹窗')//next.parent().child(0).click()//sleep(1000)//}}//lettitle=text('每天签到领大额红包').findOne(5000)//if(!title){//console.log('未找到标题,未能自动关闭签到页。')//returnfalse//}//console.log('关闭签到页')//title.parent().child(0).click()//sleep(1000)console.log('检测是否有通知权限弹窗')if(textContains('通知权限').findOne(3000)){console.log('出现弹窗,关闭')text('取消').click()sleep(1000)console.log('二次检测')if(textContains('通知权限').findOne(3000)){console.log('出现弹窗,关闭')text('取消').click()sleep(1000)console.log('完成')}else{console.log('没有弹窗,继续。')}}else{console.log('没有弹窗,继续。')}returntrue}letstartCoin=null//音量键需要//全局trycatch,应对无法显示报错try{if(autoOpen){openAndInto()console.log('等待活动页面加载')if(!findTextDescMatchesTimeout(/.*去使用奖励.*/,8000)){console.log('未能进入活动,请重新运行!')quit()}console.log('成功进入活动')sleep(2000)openTaskList();}else{alert('请关闭弹窗后立刻手动打开京东App进入活动页面,并打开任务列表','限时30秒')console.log('请手动打开京东App进入活动页面,并打开任务列表')if(!findTextDescMatchesTimeout(/累计任务奖励/,30000)){console.log('未能进入活动,请重新运行!')quit()}console.log('成功进入活动')}sleep(5000)try{console.log('获取初始金币数量')startCoin=getCoin()console.log('当前共有'+startCoin+'金币')}catch(err){console.log('获取金币失败,跳过',err)}sleep(2000)//完成所有任务的循环while(true){let[taskButton,taskText,taskCount,taskTitle]=getTaskByText()if(!taskButton){console.log('领取累计奖励')textContains('去领取').find().forEach(function(e,i){console.log('领取第'+(i+1)+'个累计奖励')e.click()sleep(2000)})console.log('最后进行签到任务')signTask()letendCoin=nulltry{console.log('获取结束金币数量')endCoin=getCoin()console.log('当前共有'+endCoin+'金币')}catch(err){console.log('获取金币失败,跳过',err)}console.log('没有可自动完成的任务了,退出。')console.log('互动任务、下单任务需要手动完成。')if(startCoin&&endCoin){console.log('本次运行获得'+(endCoin-startCoin)+'金币')}else{console.log('本次运行获得金币无法计算,具体原因请翻阅日志。')}//alert('任务已完成','别忘了在脚本主页领取年货节红包!')alert('任务已完成','互动任务手动完成之后还会有新任务,建议做完互动二次运行脚本')quit()}if(taskText.match(/品牌墙/)){//品牌墙0/3只需要一次完成taskCount=1}//根据taskCount进行任务,一类任务一起完成,完成后刷新任务列表console.log('进行'+taskCount+'次“'+taskText+'”类任务')for(leti=0;i<taskCount;i++){console.log('第'+(i+1)+'次')lettaskFlag=doTask(taskButton,taskText,taskTitle)if(taskFlag){console.log('完成,进行下一个任务')}else{console.log('任务失败,尝试重新打开任务列表获取任务')break//直接退出,无需在此调用reopen}}console.log('重新打开任务列表获取任务')reopenTaskList()}}catch(err){device.cancelKeepingAwake()if(err.toString()!='JavaException:com.stardust.autojs.runtime.exception.ScriptInterruptedException:null'){console.error(newError().stack,err)startCoin&&console.log('本次任务开始时有'+startCoin+'金币')}showVersion()}