2022年淘宝/天猫/京东618自动任务助手,带抢购功能源码

下载地址:https://wwc.lanzouq.com/b01cfbrbi

支持自动完成淘宝/天猫/京东618任务,自动领取奖励,解放双手,棒棒的!

先开启无障碍和悬浮窗权限,再运行助手;运行过程中可以按音量减“—”键强制停止,提前关闭媒体声音,直播任务可能会发出声音。

if (!auto.service) {

toast('无障碍服务未启动,退出!')

exit()

}

if (confirm('是否需要自动调整媒体音量为0', '以免直播任务发出声音,调整需要修改系统设置权限')) {

try {

        device.setMusicVolume(0)

toast('成功设置媒体音量为0')

    } catch (err) {

alert('需要开启权限,请先开启后再运行助手')

exit()

    }

} else {

toast('不修改媒体音量')

}

let join = confirm('是否自动完成入会任务?', '入会将会自动授权手机号给京东商家')

console.show()

console.log('开始完成京东任务...')

console.log('按音量减键停止任务')

device.keepScreenDim(30 * 60 * 1000) 

function quit() {

    device.cancelKeepingAwake()

exit()

}

function registerKey() {

    events.observeKey()

    events.onKeyDown('volume_down', function (event) {

console.log('京东任务脚本停止了')

console.log('请手动切换回主页面')

quit()

    })

}

threads.start(registerKey)

function findTextDescMatchesTimeout(reg, timeout) {

let c = 0

while (c < timeout / 50) {

let result = textMatches(reg).findOnce() || descMatches(reg).findOnce()

if (result) return result

sleep(50)

        c++

    }

return null

}

function openAndInto() {

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/JdqLePD","M_sourceFrom":"mxz","msf_type":"auto"}'

    })

}

function openTaskList() {

console.log('打开任务列表')

let taskListButtons = textMatches(/.*消耗.*/).findOne(20000)

if (!taskListButtons) {

console.log('未能打开任务列表,请关闭京东APP重新运行!')

quit()

    }

    taskListButtons = taskListButtons.parent().parent().parent().parent().children()

let taskListButton = null

let flag = 0

for (let i = 3; i<taskListButtons.length;i++) { 

if (taskListButtons[i].clickable()) {

if (flag) {

                taskListButton = taskListButtons[i]

break

            } else {

                flag = 1

continue   

            }

        }

    }

if (!taskListButton || !taskListButton.clickable()) {

console.log('无法找到任务列表控件')

quit()

    }

    taskListButton.click()

if (!textMatches(/.*累计任务奖.*/).findOne(8000)) {

console.log('似乎没能打开任务列表,退出')

quit()

    }

}

function closeTaskList() {

console.log('关闭任务列表')

let jiangli = text('累计任务奖励').findOne(5000)

if (!jiangli) {

console.log('无法找到任务奖励标识')

return false

    }

let closeBtn = jiangli.parent().child(1)

return closeBtn.click()

}

function reopenTaskList() {

closeTaskList()

sleep(3000)

openTaskList()

sleep(5000)

}

function getTaskByText() {

let tButton = null,

        tText = null,

        tCount = 0

console.log('寻找未完成任务...')

let taskButtons = textMatches(/.*浏览并关注.*|.*浏览.*s.*|.*累计浏览.*|.*浏览可得.*|.*逛晚会.*|.*品牌墙.*|.*打卡.*/).find()

if (taskButtons.empty()) { 

return [null, null, 0]

    }

for (let i = 0; i < taskButtons.length; i++) {

let item = taskButtons[i]

let tTitle = item.parent().child(1).text()

let r = tTitle.match(/(\d)\/(\d*)/)

if (!r) continue

        tCount = (r[2] - r[1])

console.log(tTitle, tCount)

if (tCount) { 

            tText = item.text()

if (!join && tText.match(/成功入会/)) continue

if (tText.match(/下单/)) continue

            tButton = item.parent().child(3)

break

        }

    }

return [tButton, tText, tCount]

}

function backToList() {

back()

let r = findTextDescMatchesTimeout(/.*累计任务奖.*/, 8000)

if (!r) {

back()

    }

sleep(3000)

}

function timeTask() {

console.log('等待浏览任务完成...')

let c = 0

while (c < 40) { 

let finish_reg = /获得.*?金币|已达上限/

if ((textMatches(finish_reg).exists() || descMatches(finish_reg).exists())) 

break

sleep(500)

        c++

    }

if (c > 39) {

console.log('未检测到任务完成标识。')

return false

    }

return true

}

function joinTask() {

let check = textMatches(/.*确认授权即同意.*|.*我的特权.*|.*立即开卡.*/).findOne(8000)

if (!check) {

console.log('无法找到入会按钮,判定为已经入会')

return true

    } else if (check.text().match(/我的特权/)) {

console.log('已经入会,返回')

return true

    } else {

sleep(2000)

if (check.text().match(/立即开卡/)) {

let btn = check.bounds()

console.log('即将点击开卡,自动隐藏控制台')

console.hide()

sleep(500)

click(btn.centerX(), btn.centerY())

sleep(500)

            check = textMatches(/.*确认授权即同意.*/).findOne(8000)

sleep(2000)

        }

if (!check) {

console.log('无法找到入会按钮弹窗,加载失败')

return false

        }

if (check.indexInParent() == 6) {

            check = check.parent().child(5).bounds()

        } else {

            check = check.parent().parent().child(5).bounds()

        }

console.log('即将勾选授权,自动隐藏控制台', check)

console.hide()

sleep(500)

click(check.centerX(), check.centerY())

sleep(500)

try {

let j = textMatches(/^确认授权(并加入店铺会员)*$/).findOne(8000).bounds()

if (!j) {

console.log('无法找到入会按钮,失败')

return false

            }

click(j.centerX(), j.centerY())

sleep(500)

console.show()

return true

        } catch (err) {

console.log('入会任务出现异常!停止完成入会任务。', err)

            join = 0

sleep(500)

console.show()

return false

        }

    }

}

function itemTask(cart) {

console.log('等待进入商品列表...')

if (!textContains('当前页').findOne(10000)) {

console.log('未能进入商品列表。')

return false

    }

sleep(2000)

let items = textContains('.jpg!q70').find()

for (let i = 0; i < items.length; i++) {

if (cart) {

console.log('加购并浏览')

let tmp = 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)

let r = textContains('.jpg!q70').findOnce()

if (!r) {

back()

sleep(5000)

        }

if (i >= 4 - 1) {

break

        }

    }

return true

}

function shopTask() {

console.log('等待进入店铺列表...')

let banner = textContains('喜欢').findOne(10000)

if (!banner) {

console.log('未能进入店铺列表。返回。')

return false

    }

let c = banner.text().match(/(\d)\/(\d*)/)

if (!c) {

        c = 4 

    } else {

        c = c[2] - c[1]

    }

sleep(2000)

console.log('进行', c, '次')

let like = textContains('喜欢').boundsInside(1, 0, device.width, device.height).findOnce()

if (!like) {

console.log('未能找到喜欢按钮,返回')

return false

    }

let bound = [like.bounds().centerX(), like.bounds().centerY()]

console.log('喜欢按钮位于', bound)

for (let i = 0; i < c; i++) {

click(bound[0], bound[1])

console.log('浏览店铺页')

sleep(8000)

console.log('返回')

back()

sleep(5000)

let r = textContains('喜欢').findOnce()

if (!r) {

back()

sleep(5000)

        }

    }

return true

}

function viewTask() {

console.log('进行参观任务')

sleep(8000)

console.log('参观任务直接返回')

return true

}

function wallTask() {

console.log('进行品牌墙任务')

sleep(3000)

for (let i of [2, 4, 6]) { 

console.log('打开一个')

textContains('!q70').findOnce(i).click()

sleep(5000)

console.log('直接返回')

back()

let r = textContains('!q70').findOne(8000)

if (!r) back()

sleep(3000)

    }

console.log('返回顶部')

let root = textContains('!q70').findOnce(2).parent().parent().parent().parent().parent().parent()

    root.child(root.childCount() - 1).click()

console.log('品牌墙完成后重新打开任务列表')

sleep(3000)

openTaskList()

return true

}

function doTask(tButton, tText) {

let clickFlag = tButton.click()

let tFlag

if (tText.match(/浏览并关注.*s|浏览.*s/)) {

console.log('进行', tText)

        tFlag = timeTask()

    } else if (tText.match(/累计浏览/)) {

console.log('进行累计浏览任务')

if (tText.match(/加购/)) {

            tFlag = itemTask(true)

        } else {

            tFlag = itemTask(false)

        }

    } else if (tText.match(/入会/)) {

console.log('进行入会任务')

        tFlag = joinTask()

    } else if (tText.match(/浏览可得|浏览并关注|晚会/)) {

let tTitle = tButton.parent().child(1).text()

if (tTitle.match(/种草城/)) {

            tFlag = shopTask()

        } else {

            tFlag = viewTask()

        }

    } else if (tText.match(/品牌墙/)) {

        tFlag = wallTask()

return tFlag 

    } else if (tText.match(/打卡/)) {

        tFlag = clickFlag 

return tFlag

    } else {

console.log('未知任务类型,默认为浏览任务', tText)

        tFlag = timeTask()

    }

backToList()

return tFlag

}

try {

if (confirm('是否自动打开京东进入活动')) {

openAndInto()

    } else {

alert('请关闭弹窗后立刻手动打开京东APP并进入活动页面')

console.log('请手动打开京东APP并进入活动页面')

    }

console.log('等待活动页面加载')

if (!findTextDescMatchesTimeout(/.*去使用奖励.*/, 20000)) {

console.log('未能进入活动,请重新运行!')

quit()

    }

console.log('成功进入活动')

sleep(2000)

openTaskList();

sleep(5000)

while (true) {

let [taskButton, taskText, taskCount] = getTaskByText()

if (!taskButton) {

console.log('未找到可自动完成的任务,退出')

console.log('如果页面中任务列表未铺满屏幕,请重新运行一次助手尝试')

console.log('互动任务、下单任务需要手动完成')

alert('任务已完成', '互动任务手动完成之后还会有新任务,建议做完互动二次运行助手')

quit()

        }

if (taskText.match(/品牌墙/)) { 

            taskCount = 1

        }

console.log('进行' + taskCount + '次“' + taskText + '”类任务')

for (let i = 0; i < taskCount; i++) {

console.log('第' + (i + 1) +'次')

let taskFlag = doTask(taskButton, taskText)

if (taskFlag) {

console.log('完成,进行下一个任务')

            } else {

console.log('任务失败,尝试重新打开任务列表获取任务')

break 

            }

        }

console.log('重新打开任务列表获取任务')

reopenTaskList()

    }

} catch (err) {

    device.cancelKeepingAwake()

if (err.toString() != 'JavaException: com.stardust.autojs.runtime.exception.ScriptInterruptedException: null') {

console.error(new Error().stack, err)

    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值