const VERSION = '2022618-16' if (!auto.service) { toast('无障碍服务未启动!退出!') exit() } let showVersion = function () { console.log('当前版本:' + VERSION) console.log('Hello, World!') toast('当前版本:' + VERSION) } console.show() showVersion() function getSetting() { let indices = [] autoOpen && indices.push(0) autoMute && indices.push(1) autoJoin && indices.push(2) let settings = 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 } } let storage = storages.create("jd_task"); let autoOpen = storage.get('autoOpen', true) let autoMute = storage.get('autoMute', true) let autoJoin = 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分钟 // 自定义取消亮屏的退出方法 function quit() { device.cancelKeepingAwake() exit() } // 监听音量下键 function registerKey() { 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) // 自定义一个findTextDescMatchesTimeout 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/JCTuenU","M_sourceFrom":"mxz","msf_type":"auto"}' }) } // 获取金币数量 function getCoin() { let anchor = className('android.view.View').filter(function (w) { if ((w.desc() && w.desc().match(/分红:.*份/)) || (w.text() && w.text().match(/分红:.*份/))) { return true } else { return false } }).findOne(5000) if (!anchor) { console.log('找不到分红控件') return false } let coin = anchor.parent().child(2).text() if (coin) { return parseInt(coin) } else { coin = anchor.parent().child(3).text() // 有可能中间插了个控件 if (coin) { return parseInt(coin) } else { return false } } } // 打开任务列表 function openTaskList() { console.log('打开任务列表') let taskListButtons = findTextDescMatchesTimeout(/分红+卡牌/, 20000) if (!taskListButtons) { console.log('未能打开任务列表,请关闭京东重新运行!') quit() } if (taskListButtons.indexInParent() == 0) { taskListButtons = taskListButtons.parent().parent().children() } else { taskListButtons = taskListButtons.parent().children() } let taskListButton = null let flag = 0 for (let i = 3; i < taskListButtons.length; i++) { // 从第4(4-1)个开始 if (taskListButtons[i].clickable()) { if (flag) { taskListButton = taskListButtons[i] break } else { flag = 1 continue } } } if (!taskListButton || !taskListButton.clickable()) { console.log('无法找到任务列表控件') quit() } taskListButton.click() console.log('等待任务列表') if (!findTextDescMatchesTimeout(/累计任务奖励/, 10000)) { console.log('似乎没能打开任务列表,退出!') console.log('如果已经打开而未检测到,请删除101版本及以上的webview或使用国内应用市场版京东尝试。') quit() } } // 关闭任务列表 function closeTaskList() { console.log('关闭任务列表') let jiangli = findTextDescMatchesTimeout(/累计任务奖励/, 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, tTitle = null console.log('寻找未完成任务...') let taskButtons = textMatches(/.*浏览并关注.*|.*浏览.*s.*|.*累计浏览.*|.*浏览可得.*|.*逛晚会.*|.*品牌墙.*|.*打卡.*/).find() if (!taskButtons.empty()) { // 如果找不到任务,直接返回 for (let i = 0; i < taskButtons.length; i++) { let item = taskButtons[i] 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) { // 如果数字相减不为0,证明没完成 tText = item.text() if (!autoJoin && tText.match(/成功入会/)) continue if (tText.match(/下单/)) continue tButton = item.parent().child(3) break } } } return [tButton, tText, tCount, tTitle] } // 返回任务列表并检查是否成功,不成功重试一次,带有延时 function backToList() { sleep(500) back() for (let i = 0; i < 3; i++) { // 尝试返回3次 if (!findTextDescMatchesTimeout(/累计任务奖励/, 5000)) { console.log('返回失败,重试返回') sleep(2000) back() continue } else { break } } sleep(3000) } // 浏览n秒的任务 function timeTask() { console.log('等待浏览任务完成...') let c = 0 while (c < 40) { // 0.5 * 40 = 20 秒,防止死循环 if ((textMatches(/获得.*?金币/).exists() || descMatches(/获得.*?金币/).exists())) // 等待已完成出现 break if ((textMatches(/已浏览/).exists() || descMatches(/已浏览/).exists())) { // 失败 console.log('上限,返回刷新任务列表') return false } // 弹窗处理 let pop = text('升级开卡会员领好礼') if (pop.exists()) { pop.parent().parent().child(2).click() console.log('关闭会员弹窗') } 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('即将点击开卡/解锁福利,自动隐藏控制台') 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('无法找到入会按钮弹窗,加载失败') return false } if (check.indexInParent() == 6) { check = check.parent().child(5) } else if (check.text() == '确认授权即同意') { check = check.parent().child(0) } else { check = check.parent().parent().child(5) } check = check.bounds() let x = check.centerX() let y = check.centerY() console.log('检测是否有遮挡') let float = className('android.widget.ImageView') .filter(function (w) { let b = w.bounds() return b.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。') return false } } else { console.log('未发现遮挡的浮窗,继续勾选') } console.log('即将勾选授权,自动隐藏控制台') sleep(500) console.hide() sleep(500) click(x, y) sleep(500) console.show() console.log('准备点击入会按钮') let j = textMatches(/^确认授权(并加入店铺会员)*$/).findOne(5000) if (!j) { console.log('无法找到入会按钮,失败') return false } click(j.bounds().centerX(), j.bounds().centerY()) sleep(1000) console.log('入会完成,返回') return true } } // 浏览商品和加购的任务,cart参数为是否加购的flag 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 // 进行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(5000) console.log('参观任务直接返回') return true } // 品牌墙任务 function wallTask() { console.log('进行品牌墙任务') sleep(3000) for (let i of [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() let r = textContains('!q70').findOne(8000) if (!r) back() sleep(3000) } console.log('返回顶部') let root = textContains('到底了').findOnce().parent().parent() root.child(root.childCount() - 2).click() console.log('品牌墙完成后重新打开任务列表') sleep(3000) openTaskList() return true } // 单个任务的function,自动进入任务、自动返回任务列表,返回boolean function doTask(tButton, tText, tTitle) { 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 // 品牌墙无需backToList,提前返回 } else if (tText.match(/打卡/)) { tFlag = clickFlag // 打卡点击一次即可 return tFlag } else { console.log('未知任务类型,默认为浏览任务', tText) tFlag = timeTask() } backToList() return tFlag } function signTask() { let anchor = className('android.view.View').filter(function (w) { return w.clickable() && (w.text() == '去使用奖励' || w.desc() == '去使用奖励') }).findOne(5000) if (!anchor) { console.log('未找到使用奖励按钮,签到失败') return false } let anchor_index = anchor.indexInParent() let sign = anchor.parent().child(anchor_index + 2) // 去使用的后两个 sign.click() sleep(3000) sign = textMatches(/.*点我签到.*|.*明天再来.*/).findOne(5000) if (!sign) { console.log('未找到签到按钮') return false } if (sign.text().match(/明天再来/)) { console.log('已经签到') } else { click(sign.bounds().centerX(), sign.bounds().centerY()) sleep(1000) console.log('签到完成') // let next = textContains('下一个红包').findOne(5000) // if (!next) { // console.log('找不到下一个红包提示语,未能自动关闭弹窗') // } else { // console.log('关闭签到弹窗') // next.parent().child(0).click() // sleep(1000) // } } // let title = text('每天签到领大额红包').findOne(5000) // if (!title) { // console.log('未找到标题,未能自动关闭签到页。') // return false // } // 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('没有弹窗,继续。') } return true } let startCoin = null // 音量键需要 // 全局try catch,应对无法显示报错 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() let endCoin = null try { 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 (let i = 0; i < taskCount; i++) { console.log('第' + (i + 1) + '次') let taskFlag = 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(new Error().stack, err) startCoin && console.log('本次任务开始时有' + startCoin + '金币') } showVersion() }
js教程
京东618活动自动挂机完成任务autojs脚本代码
- autojs
- JS脚本
- 自动挂机
- 京东618
- js代码
-
京东618活动自动挂机完成任务autojs脚本代码
const VERSION = '2022618-16' if (!auto.service) { toast('无障碍服务未启动!退出!') exit()} let showVersion = function () { console.log('当前版本:' + VERSION) console.log('Hello, World!') ...
-
淘宝618活动自动完成任务autojs脚本代码
const VERSION = '2022618-16' if (!auto.service) { toast('无障碍服务未启动!退出!') exit()} let showVersion = function () { console.log('当前版本:' + VERSION) console.log('Hello, World!') ...
-
两天入门autojs脚本开发视频教程
课程简介本系列课程完全免费,站长亲手打造零基础两天入门autojs脚本开发视频教程。课程包含:python&web&爬虫开发,JavaScript开发,autojs脚本开发,按键精灵脚本开发。autojs教程截图...
-
京东618活动autojs脚本分享
京东618活动autojs脚本,参考czj2369大佬的改了一下,我用的autojs4.1.0版本的基本上都能做完。// 判断停留时间var JUDGE_TIME = 0;var appName = "com.jingdong.app.mall";init();/** * 初始化 */function init() { // 子线程监听脚本 threads.s...
-
去除csdn必须登录复制代码限制JS脚本
前言现在搜索IT相关的内容都是csdn的结果,下载要登录不说,复制代码也要登录,真是有点麻烦,分享一段去除csdn必须登录复制代码限制JS脚本,可以把页面模式变成可编辑即可随便复制了,附上代码javascript:document.body.contentEditable='true';docume...
-
jQuery3.6.0更新说明
即使存在JSONP错误也返回JSON在以前的版本中,当JSONP请求返回错误时,返回通常仍是一个可执行脚本。3.6.0版本已经更改了默认行为,以尝试在这种情况下执行脚本。当遇到错误时,正常的脚本仍将被跳过。修正一个值得强调的bug是关于将焦点重定向到焦点处理程...
-
自用的JavaScript过滤XSS攻击方法
什么是XSS攻击XSS(Cross Site Scripting),跨站脚本攻击,是一种允许攻击者在另外一个用户的浏览器中执行恶意代码脚本的脚本注入式攻击。本来缩小应该是CSS,但为了和层叠样式(Cascading Style Sheet,CSS)有所区分,故称XSS。对于攻击者来说,能够让受害者浏览器...
-
jQuery淡入淡出效果语法教程
实现前端特效的方法很多,最方便的还是css,当然有些特效还是使用JavaScript脚本比较简单,具体的还得看情况而定。jquery作为高度封装的JavaScript,它给我们提供了一些特效实现方式,我们一起来学习下吧。jQuery Fading 方法通过 jQuery,您可以实现元素的淡入...
-
京东盲盒自动做任务JS脚本
京东盲盒自动做任务JS脚本,推荐使用:360极速浏览器或者QQ浏览器,调成极速模式 大概能抽到200~500左右个京豆,活动时间内每天都可以,输入代码后自动完成任务和抽奖,大概几分钟搞定!教程步骤如下:1、电脑浏...
-
京东618自动挂机助手
软件介绍京东618自动挂机助手,登陆后每日凌晨会自动帮你执行领取京豆,一次登陆,每天凌晨都会自动执行任务,帮你获取京豆,每天能领200到500的京豆。软件截图...
-
京东618活动自动挂机完成任务autojs脚本代码
const VERSION = '2022618-16' if (!auto.service) { toast('无障碍服务未启动!退出!') exit()} let showVersion = function () { console.log('当前版本:' + VERSION) console.log('Hello, World!') ...
-
抖音自动挂机评论/互关/点赞/涨粉工具V2.6.0
抖音自动挂机评论/互关/点赞/涨粉工具V2.6.0是一款抖音账号批量挂架涨粉软件,通过挂机模拟真实用户自动互粉/播放量/点赞/转发/评论等操作,来达到真实张粉效果。功能类似于抖音dou+自动爆粉工具,也...
-
点头条阅读自动挂机阅读赚钱app源码
网站源码介绍1、会员注册 三级奖励会员收益 三级奖励 奖励可在用户提现一次 奖励一次 ,注册和收益都有奖励 其中注册 直接奖励2、内容页 自动刷新 滚动 每刷新更换一篇同时增加余额 限制每个用户...
-
PHP自动挂机阅读浏览赚钱系统源码
源码说明PHP自动挂机阅读浏览赚钱系统源码,自动阅读挂机浏览文章赚钱投资理财分红广告机脚本机器人自动刷新闻赚钱自动刷广告源码可封装app。自动挂机阅读赚钱源码截图源码安装说明服务器系统:Linu...
-
京东618自动挂机助手
软件介绍京东618自动挂机助手,登陆后每日凌晨会自动帮你执行领取京豆,一次登陆,每天凌晨都会自动执行任务,帮你获取京豆,每天能领200到500的京豆。软件截图...
-
京东618活动自动挂机完成任务autojs脚本代码
const VERSION = '2022618-16' if (!auto.service) { toast('无障碍服务未启动!退出!') exit()} let showVersion = function () { console.log('当前版本:' + VERSION) console.log('Hello, World!') ...
-
淘宝京东618自动任务脚本
软件介绍淘宝京东618自动任务脚本,帮你自动完成淘宝京东618任务,点开脚本则会自行打开淘宝自动进入618会场自动运行。脚本截图
-
js指定时间定时自动执行代码分享
示例代码用的`setTimeout()`函数,在指定的时间后执行。代码非常的简单,获取当前时间和设定一个指定时间,指定时间减去当前时间就是定时的时间,如果定时器到期时等于0,就代表时间到了,就运行executeAtTime函数的方法。function executeAtTime() { console....
-
JS代码解除网页右键限制
JS解除右键限制方法一javascript:(function () {function R(a) {ona = "on" + a;if (window.addEventListener){window.addEventListener(a, function (e) {for (var n = e.originalTarget; n; n = n.parentNode){n[ona] = null;}}, true);}window[o...
-
淘宝买家秀API+ajax代码
淘宝买家秀API+ajax代码,用的是这个API,https://api.66mz8.com/api/rand.tbimg.php?format=jsonJSON返回格式,测试依旧可用。$(function(){ $.get('https://api.66mz8.com/api/rand.tbimg.php?format=json',function(data){ document.getElementB...
-
JS判断电脑端手机端自动跳转代码
JS判断电脑端手机端自动跳转代码,这段代码已经封装好了,不需要任何处理,复制引用就可以使用了。相比网上的JS判断终端代码,这点代码是直接判断终端然后判断域名是否带www.wdzzz.com,带就跳转到m.wdzzz.com//是否是移动端function is_mobile() {var regex_...
-
JS年月日星期早中午时间代码
JS年月日星期早中午时间代码,我的站长站自用时间代码,完美简单。var day=""; var month=""; var ampm=""; var ampmhour=""; var myweekday=""; var year=""; var hh;var wh;mydate=new Date(); myweekday=mydate.getDay(); mymonth=mydate.g...
-
01js返回上一页、刷新页面代码大全 2天前
-
02js语言!=与!==的区别 6天前
-
03JS防止网站被扒的解决方法 3周前
-
04Hexo插件开发实战教程 1个月前
-
05JavaScript定时删除指定元素方法 1个月前
-
01分享一个QQ音乐刷音响力API接口和JS请求代码 1185热度
-
02淘宝买家秀API+ajax代码 748热度
-
03QQ情侣头像API接口代码 592热度
-
04京东盲盒自动做任务JS脚本 561热度
-
05JS去除腾讯爱奇艺优酷视频右上角LOGO 361热度