diff --git a/README.md b/README.md index a7a3c28..9b74237 100644 --- a/README.md +++ b/README.md @@ -1,373 +1,81 @@ -auto.waitFor() //等待开启无障碍服务 +# taobao_taojinbi +本项目主要用于自动执行淘金币活动 -//===================用户可编辑参数=================== -var MAX_EPOCH = 101 //最大执行次数 -var wait_sec = 15 //任务执行默认等待的时长 考虑到网络卡顿问题 默认15秒 -var do_dice_task = 1 // 1表示自动执行[淘宝人生掷色子任务],0表示跳过不执行 -var do_baba_farm_task = 1 // 1表示自动执行[芭芭农场任务],0表示跳过不执行 -var do_xiaoxiaole_task = 1 // 1表示自动执行[消消乐任务],0表示跳过不执行 -var taojinbi_reg_str = "逛|浏览|聚划算|天猫国际|看" //简单任务主题关键字,若有新的浏览任务出现可在此添加 -var is_earn_10coin = 1 //是否在逛好店任务中也执行领10金币任务(10s+10金币) 默认执行 1 -var is_collect_shop = 0 //是否在10金币任务中关注商铺(关注商铺+10金币) 默认不执行 0 -var is_show_choice = 1 //是否在启动时,显示特殊截图任务的选择框(生成app时使用) 默认显示 -var num_ant_find = 32 //在蚂蚁森林执行找能量的次数,0表示直接返回不收取能量,默认32 +**后续代码持续更新,力争完成淘金币全任务,你的☆就是我的动力** -//===================通用函数========================= -//点击控件 -function btn_click(x) { if (x) x.click() } +# 测试环境 +华为P30Pro + [autojs4.1.1](https://share.weiyun.com/owu3tBNr) + [淘宝v9.16.0](https://www.wandoujia.com/apps/32267/history) +(*华为P30Pro屏幕大小为1080x2340,此分辨率对特殊任务支持最佳*) -//点击控件所在坐标 -function btn_position_click(x) { if (x) click(x.bounds().centerX(), x.bounds().centerY()) } +# 脚本功能列表 + - 自动执行淘金币所有浏览任务 + - 自动执行[逛好店领一大波金币]任务 (包含浏览10s+10金币任务/收藏店铺+10金币) + - 自动执行[逛蚂蚁庄园喂小鸡]任务 + - 自动执行[签到领取话费充值金]任务 + - 自动执行[淘宝成就签到任务] + - 自动执行[淘宝人生逛街领能量]掷色子任务 (需截图权限) + - 自动执行[逛农场领免费水果]任务 (需截图权限) + - 自动执行[蚂蚁森林]任务,收取好友能量 (需截图权限) + - 浏览任务完成立即返回,**无需额外等待** + +# 更新日志 -//消息提示 -function toast_console(msg) { - console.log(msg); toast(msg); -} +**v1.2.3** 2020年12月17日20:50:41 +1. 消消乐和蚂蚁森林任务中暂时隐藏终端,对应任务结束后再显示 (不隐藏可能收取不到全部能量) +2. 发布[淘金币v1.2.3]apk版 -// 截屏查找图片颜色并单击对应的点 -function cs_click(num, rgb, xr, yr, wr, hr, flipup) { - //threshold = threshold == undefined ? 8 : threshold - while (num--) { - let img = captureScreen() - if (flipup != undefined) img = images.rotate(img, 180) - let point = findColor(img, rgb, { region: [img.getWidth() * xr, img.getHeight() * yr, img.getWidth() * wr, img.getHeight() * hr], threshold: 8 }) - if (point) { - if (flipup != undefined) { - point.x = img.getWidth() - point.x; point.y = img.getHeight() - point.y - } - //console.log(point); - click(point.x, point.y); return true - } - sleep(1000) - } - return false -} -//===================业务逻辑函数========================= +**v1.2.2** 2020年12月16日19:36:39 +1. 新增蚂蚁森林任务,支持自定义'找能量'收取好友能量的次数 +2. 解决'天猫领红包任务',取消了'继续逛逛'按钮问题 -//获取[浏览以下商品]的所在组控件数 -function get_group_count() { - let x = textContains('浏览以下商品').findOne(5) - if (x) { - return x.parent().childCount() - } - return 0 -} +**v1.2.1** 2020年12月14日19:57:06 +1. 新增消消乐任务,需截图权限,目前在测试P30Pro上测试通过 +2. 考虑到不同的机型,某些需截图权限的特殊任务可能会不兼容,启动时添加了可选的额外执行的任务: ['淘宝人生掷色子任务', '逛农场领免费水果任务', '消消乐任务'] +3. 添加了APK发布版,用户可直接运行 -//等待sec秒,有完成提示后立即返回 -function wait(sec) { - let pre_num = 0 //[浏览以下商品]的所在组控件数有时会变化 - while (sec--) { - let a1 = textMatches('点我领取奖励|任务已完成快去领奖吧|任务完成|任务已完成|任务已经全部完成啦').findOne(10) - let cur_num = get_group_count() - let a10 = pre_num > 0 && cur_num != pre_num; pre_num = cur_num - let a = descMatches('任务完成|快去领奖吧').findOne(1000) - if (a1 || a10 || a) { - toast_console('到时立即返回') - return true - } - } - toast_console('等待' + wait_sec + 's返回'); - return true -} +**v1.2.0** 2020年12月13日20:52:53 +1. 简化代码删减了双12的部分 +2. 对需要截图功能的[淘宝人生逛街领能量]和[逛农场领免费水果] 设置了是否执行的全局变量,用户可选择是否执行该任务 +3. 任务执行等待时间设置为全局变量,默认为15秒 -//根据正则表达式获取任务 -function get_task(reg_str, not_reg_str) { - sleep(500); textMatches('每日来访领能量.+').findOne(2000); sleep(500); - let list_x = textMatches('去完成|去施肥|去领取').find() - let reg = new RegExp(reg_str) - let not_reg = not_reg_str == undefined ? new RegExp('z') : new RegExp(not_reg_str) - for (let i = 0; i < list_x.length; i++) { - txt = list_x[i].parent().child(0).child(0).text() //主标题 - if (reg.test(txt) && !not_reg.test(txt)) { - toast_console(txt) - let obj = new Object(); obj.x = list_x[i] - return obj - } - } - return null -} +**v1.1.4** 2020年12月12日21:04:28 +1. 修复淘金币看直播任务,有时不能返回问题 -//淘金币获取奖励 -function get_rewards() { - sleep(200); btn_click(text('领取奖励').findOne(1000)); sleep(2500) //等待调整布局 -} +**v1.1.3** 2020年12月11日20:13:13 +1. 修复天猫app没安装,等待过长问题 +2. 修复特殊任务后,新出简单浏览任务遗漏问题 +3. 无法修复'双12红包兑现红包太少问题' -//确保任务按钮被单击,解决单击时布局发生改变的问题 -function assure_click_task(name) { - let obj = null - for (let i = 0; i < 3; i++) { - obj = get_task(name) - if (!obj) return false - if (obj.x) break - } - if (!obj.x) { - toast_console('无法找到[' + name + '任务],请确保其在未完成任务列表中'); return false - } - obj.x.click(); return true -} +**v1.1.2** 2020年12月10日20:38:12 +1. 解决淘金币执行过程中会返回到主页面问题(本质是按钮单击没有生效) +2. 把淘宝人生、逛好店任务、喂小鸡任务、逛直播间任务添加到特殊任务中 +3. 解决芭芭农场双12任务后,淘金币没有肥料问题 -//芭芭农场任务 -function baba_farm_task() { - if (!assure_click_task('农场')) return - sleep(6000) - //金色获取肥料按钮 - cs_click(6, '#fed362', 0.5, 0.45, 0.45, 0.25) - sleep(1000); btn_position_click(text('去施肥,赚更多肥料').findOne(1000)); sleep(500) - //签到列表领肥料 - if (cs_click(3, '#9dbe77', 0.66, 0.66, 0.25, 0.25)) { - console.log('打开签到列表领肥料'); sleep(1000) - btn_click(text('去签到').findOne(1000)) - btn_click(text('去领取').findOne(1000)) - btn_click(text('关闭').findOne(1000)); sleep(1000) - } - //金色施肥按钮 - cs_click(3, '#fff39f', 0.45, 0.6, 0.25, 0.35) - sleep(500); back(); get_rewards() -} +**v1.1.1** 2020年12月9日19:36:44 +1. 修复逛新加任务不能获取问题 +3. 某些任务(拍照识图)只在最新版淘宝中才存在,当前淘宝已换成最新版v9.16.0,经测试金币还是同样的奖励 -//淘宝成就签到 -function achievement_signin_task() { - if (!assure_click_task('淘宝成就')) return - btn_click(text("成就礼包").findOne(3000)) - btn_click(text("我收下了").findOne(1000)) - let btn_x = text('成就签到').findOne(2000) - if (btn_x) { - btn_x.parent().child(3).click() - } - btn_click(text("我收下了").findOne(1000)) - sleep(1000); back(); get_rewards() -} +**v1.1.0** 2020年12月8日19:51:51 +1. 代码基本重构,为适应不同机型,添加了截图查找功能(**需授予截图权限**) +2. 添加任务运行选择功能,可单独执行任务 -//签到领话费充值金 -function signin_phonecharge_task() { - if (!assure_click_task('签到领话费充值金')) return - btn_click(text('立即领取').findOne(9000)) - sleep(11000); back(); get_rewards() -} +# 使用说明 +## Auto.js中运行 +1. 下载 [autojs4.1.1](https://share.weiyun.com/owu3tBNr) +2. 在电脑端下载taojinbi.js文件,使用电脑端qq或微信发给手机端 +3. 导入js文件到autojs(可直接在微信/QQ/文件浏览中选择使用其他方式打开) +4. 在autojs中开启无障碍服务并点击运行导入的js文件 -//逛直播间任务 -function live_room_task() { - if (!assure_click_task('直播间')) return - //退出会有恶心的提示 - wait(wait_sec); back(); sleep(1000) - btn_position_click(desc('继续退出').findOne(1000)) - let num = 5; - while (textMatches('观看').findOne(1000) && num--) { back(); sleep(1000) } - get_rewards() -} +auto.js视频运行教程:https://www.bilibili.com/video/BV1Cy4y1S7qE -//喂小鸡任务,可以直接返回 -function feed_chick_task() { - if (!assure_click_task('小鸡')) return - sleep(1000); btn_click(text('取消').findOne(2000)); sleep(500); back(); sleep(1000) - if (text('打开支付宝').findOne(1000)) back() - get_rewards(); -} -//蚂蚁森林任务 -function ant_forest_task() { - if (!assure_click_task('蚂蚁森林')) return - sleep(2000) - let num = 5 - while (num-- && !text('最新动态').findOne(1000)); - if (num_ant_find) { - let img = captureScreen(); console.hide() - let point = findColor(img, '#ff6e01', { region: [img.getWidth() * 0.7, img.getHeight() * 0.6, img.getWidth() * 0.2, img.getHeight() * 0.2], threshold: 8 }) - for (let i = 0; i < num_ant_find; i++) { - for (let j = 0; j < 8; j++) { - if (!cs_click(1, '#b6ff00', 0.1, 0.2, 0.8, 0.5)) break - sleep(200) - } - click(point.x, point.y); sleep(2000) - if (!text('最新动态').findOne(1000)) break - toast_console('找能量/' + i) - } - } +## 淘金币app运行 +1. 在release页面下载taojinbi.apk并安装 +2. 为淘金币开启无障碍服务和悬浮框权限(悬浮框权限在华为手机:设置->应用->应用功能->淘金币->显示在其他应用的上层->允许) - num = 8; console.show() - while (num-- && !text('今日任务').findOne(1000)) back() -} +淘金币app视频运行教程:https://www.bilibili.com/video/BV1kp4y1q7CD/ -//逛好店并领10金币 -function shop_10coin_task() { - if (!assure_click_task('逛好店领')) return - for (let i = 0; i < 10 && is_earn_10coin; i++) { - let btn_x = desc('逛10秒+10').findOne(2000) - toast_console('逛10秒+10金币/' + (i + 1)) - if (!btn_x) break - btn_x.parent().click(); sleep(12500); - if (is_collect_shop) { - click('关注+10'); sleep(500); - } - back(); sleep(800); - } - wait(wait_sec); back(); get_rewards() -} -//去天猫红包任务 -function tianmao_task() { - if (!assure_click_task('去天猫APP领红包')) return - sleep(4000) - if (text('攻略').findOne(4000)) wait(wait_sec) - for (let i = 0; i < 8; i++) { - if (!text('今日任务').findOne(1000)) back() - } - get_rewards() -} - -//掷骰子任务 -function dice_task() { - if (!assure_click_task('淘宝人生逛街领能量')) return - sleep(5000) - //橙色收下奖励按钮按钮 - cs_click(3, '#ff7d44', 0.2, 0.45, 0.45, 0.2); sleep(1500) - //金色前进按钮 - cs_click(8, '#fff89d', 0.2, 0.5, 0.45, 0.3); sleep(3000) - //橙色收下奖励按钮按钮 - cs_click(3, '#ff7d44', 0.15, 0.5, 0.45, 0.2); back(); sleep(1000) - //橙色返回淘宝按钮 - cs_click(3, '#ff7d44', 0.15, 0.5, 0.45, 0.2) - btn_click(text('立刻离开').findOne(2000)); get_rewards() -} - -//消消乐任务 -function xiaoxiaole_task() { - if (!assure_click_task('消消')) return - sleep(8000); - console.log('消消乐,等待进入游戏界面'); console.hide() - //开心收下奖励 - cs_click(4, '#11c6bf', 0.2, 0.6, 0.3, 0.3); - //第一次返回没有主页按钮?//back(); sleep(1000); cs_click(3, '#ffffff', 0.6, 0.2, 0.3, 0.5); sleep(500); //单击关闭图标 - //回到主页 - console.log('消消乐,回到游戏首页'); - for (let i = 0; i < 8; i++) { - back(); sleep(1000) - if (cs_click(2, '#ffbd29', 0.2, 0.5, 0.45, 0.45)) break - } - sleep(3000) //过渡动画 - //邮件领取 pass - cs_click(3, '#ffffff', 0.65, 0.15, 0.3, 0.5); sleep(500) - //滑到屏幕下方 - for (let i = 0; i < 6; i++)swipe(device.width / 2, device.height / 2, device.width / 2, device.height / 5, 600) - //点击第一关 绿色圆圈 - sleep(1000); cs_click(3, '#63cbc4', 0.5, 0.3, 0.4, 0.4, true); sleep(2000) - console.log('消消乐,点击第一关'); - //开始 绿色方块 - cs_click(3, '#11c6bf', 0.3, 0.5, 0.3, 0.3); sleep(5000) - //消除方块,兼容不同机型 - console.log('消消乐,开始消除方块'); - let rgb = '#fff0e0' - img = captureScreen() - let point1 = findColor(img, rgb, { region: [img.getWidth() * 0.2, img.getHeight() * 0.2, img.getWidth() * 0.4, img.getHeight() * 0.4], threshold: 4 }) - img = images.rotate(img, 180) - let point2 = findColor(img, rgb, { region: [img.getWidth() * 0.2, img.getHeight() * 0.2, img.getWidth() * 0.4, img.getHeight() * 0.4], threshold: 4 }) - if (point1 && point2) { - let box_x = (img.getWidth() - point2.x - point1.x) / 5 - let box_y = (img.getHeight() - point2.y - point1.y) / 6 - list_xy = [[0, 1, 0, 2], [0, 5, 0, 4], [2, 2, 3, 2]] - list_xy.forEach(xy => { - x1 = (xy[0] + 0.5) * box_x + point1.x; x2 = (xy[2] + 0.5) * box_x + point1.x - y1 = (xy[1] + 0.5) * box_y + point1.y; y2 = (xy[3] + 0.5) * box_y + point1.y - swipe(x1, y1, x2, y2, 800); sleep(1200) - }); - } - back(); sleep(1000); - //回到主页1 灰色的暂时离开 - cs_click(3, '#9d6031', 0.2, 0.2, 0.4, 0.5, true) - //回到主页2 金色的回到主页 - cs_click(3, '#ffbd29', 0.2, 0.5, 0.45, 0.45); sleep(3000); - //返回淘宝按钮 - back(); sleep(1000); cs_click(3, '#ff6e09', 0.2, 0.75, 0.45, 0.2); console.show() - get_rewards() -} - -//执行简单的浏览任务 -function do_simple_task(epoch, sec, reg_str) { - toast_console('查询可执行的简单浏览任务') - let not_reg_str = '农场|消消乐|淘宝人生逛街领能量|逛好店领|小鸡|蚂蚁|直播间|淘宝成就' //需要特殊执行的任务 - for (let i = 0; i < MAX_EPOCH; i++) { - let obj = get_task(reg_str, not_reg_str) - if (!obj) { - console.log('简单浏览任务执行完毕'); break - } - if (!obj.x) { - console.log('继续执行简单浏览任务'); continue - } - obj.x.click() - if (wait(sec)) { - if (!text('今日任务').findOne(500)) back() - sleep(1000); btn_click(textContains('残忍离开|回到淘宝|立即领取').findOne(500)) - get_rewards() - } - } -} - -function taojinbi_task() { - if (!text('今日任务').findOne(1000)) { - toast_console('启动淘宝app') - app.launch('com.taobao.taobao'); - if (!text('今日任务').findOne(2000)) { - let btn_x = null - while (!btn_x) { - console.log('等待进入淘宝首页..(若长时间等待请手动进入淘宝首页)'); - btn_x = desc('领淘金币').findOne(1000) - } - btn_x.click() - toast_console('进入到淘金币主界面..') - btn_click(text('签到领金币').findOne(3000)) - btn_click(text('领取奖励').findOne(1000)) - btn_x = text('赚金币').findOne(3000) - if (!btn_x) { - toast_console('无法找到[赚金币]按钮,请重新运行程序'); return - } - btn_x.click() - } - } - toast_console('进入到淘金币列表界面..') - textMatches('每日来访领能量.+').findOne(6000); - //防止特殊任务卡顿,所以任务默认执行2次 - for (let i = 0; i < 2; i++) { - do_simple_task(MAX_EPOCH, wait_sec, taojinbi_reg_str) - feed_chick_task() - shop_10coin_task() - if (do_baba_farm_task) baba_farm_task() - if (do_dice_task) dice_task() - tianmao_task() - live_room_task() - achievement_signin_task() - signin_phonecharge_task() - ant_forest_task() - if (do_xiaoxiaole_task) xiaoxiaole_task() - get_rewards() - } - toast_console('*****淘金任务执行完毕*****') -} - -function multi_choice() { - do_dice_task = 0; do_baba_farm_task = 0; do_xiaoxiaole_task = 0; num_ant_find = 0; - let options = dialogs.multiChoice("(作者:Javis486)请选择需要额外执行的任务", ['淘宝人生掷色子任务', '逛农场领免费水果任务', '消消乐任务', '蚂蚁森林任务']) - options.forEach(option => { - switch (option) { - case 0: - do_dice_task = 1; break; - case 1: - do_baba_farm_task = 1; break; - case 2: - do_xiaoxiaole_task = 1; break; - case 3: - num_ant_find = 32; break; - } - }); -} - -//主函数 -function main() { - requestScreenCapture(false); - if (is_show_choice) multi_choice(); - console.show(); - console.log('本APP完全免费,作者:Javis486,github下载地址:https://github.com/JavisPeng/taojinbi') - taojinbi_task(); -} - -main() +# 免责声明 +为本人Auto.js学习交流的开源非营利项目,仅作为程序员之间相互学习交流之用,使用需严格遵守开源许可协议。严禁用于商业用途,禁止使用进行任何盈利活动。对一切非法使用所产生的后果,本人概不负责。