├── README.md ├── 重启手机 ├── 支付宝获取收款码 ├── 自动抢购医院专家号 ├── 51cto自动养号 ├── 爬取美团app数据 ├── cnblog博客园自动养号 ├── 抖音自动刷视频、做任务赚金币 ├── 微信视频号自动点赞、收集视频信息 ├── 百度极速版自动阅读 ├── 映客直播薅羊毛 ├── 趣看天下自动阅读、看视频、做任务 └── 趣头条自动阅读、刷金币 /README.md: -------------------------------------------------------------------------------- 1 | # 精心收集的各种冰狐智能辅助的自动化js脚本 2 | 以上脚本是本人利用业余时间收集的各种冰狐智能辅助脚本,还望兄弟们不吝给个star。功能包括:app自动化、自动养号、自动薅羊毛、自动刷钱金币、自动玩游戏、抢票、抢购商品、app数据采集、rpa、app爬虫、app自动化测试、自动化运营、自动聊天、自动打卡等。 3 | * js脚本均来源于网络收集,如有违反版权,请告知,本人会立即删除。 4 | * js脚本仅供学习之用,禁止将其用于各种非法用途! 5 | * 免责申明:本人仅基于学习目的在网上搜集脚本,没有任何商业目的,不承担任何法律责任和风险。脚本使用者自己承担一切使用脚本之责任。 6 | -------------------------------------------------------------------------------- /重启手机: -------------------------------------------------------------------------------- 1 | function main() { 2 | openPowerDialog({afterWait:3000}); 3 | 4 | var ret = findView('txt:重新启动', {maxStep: 8}); 5 | if (ret.length > 0) { 6 | click(ret.views[0], {afterWait: 2000}); 7 | 8 | ret = findView('txt:点击重新启动', {maxStep: 8}); 9 | if (ret.length > 0) { 10 | click(ret.views[0], {afterWait: 10000}); 11 | return true; 12 | } 13 | } 14 | 15 | return false; 16 | } 17 | -------------------------------------------------------------------------------- /支付宝获取收款码: -------------------------------------------------------------------------------- 1 | 2 | function main() { 3 | requestScreenShot(); 4 | var ret = launchApp('com.eg.android.AlipayGphone', 'txt:我的', {failed: exitPopup}); 5 | if (ret <= 0) { 6 | console.log('can not startup alipay'); 7 | return; 8 | } 9 | ret = switchPage('txt:收付款', 'txt:我知道了', {failed: exitPopup}); 10 | if (ret.length > 0) { 11 | console.log('切换成功'); 12 | clickByTag('txt:我知道了', {click: true, afterWait:1000,failed: exitPopup}); 13 | ret = qrDecode(); 14 | console.log('qr:' + ret); 15 | if (ret) { 16 | // post qr给外界 17 | var data = {'fun': 'Paycode', 'data': ret, 'id':rsUUID}; 18 | var ret = httpPost('http://xxxx.com',data, 'json'); 19 | console.log('post ret:',ret); 20 | ret = findView('txt:完成', {maxStep: 50, failed: exitPopup}); 21 | if (ret.length > 0) { 22 | var data = {'fun': 'Paycomplete', 'data': '1', 'id':rsUUID}; 23 | var ret = httpPost('http://xxxx.com',data, 'json'); 24 | console.log('post ret:',ret); 25 | 26 | console.log('find 完成 finished'); 27 | click(ret.views[0], {click: true}); 28 | } else { 29 | console.log('find 完成 failed'); 30 | } 31 | 32 | back2Page('txt:我的', {backFirst: false}); 33 | } 34 | } else { 35 | console.log('切换到收款码失败'); 36 | } 37 | } 38 | 39 | function exitPopup() { 40 | var ret = findView('txt:稍后再说|txt:关闭@cn:android.widget.ImageView', {maxStep:1}); 41 | if (ret.length > 0) { 42 | click(ret.views[0], {click: true}); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /自动抢购医院专家号: -------------------------------------------------------------------------------- 1 | 2 | function main(name, date ='') { 3 | home(); 4 | clickByTag('txt:江苏省xxx医院', {click: false}); 5 | var ret = findView('txt:预约挂号', {maxStep: 30}); 6 | if (ret.length <= 0) { 7 | console.log('启动失败'); 8 | return; 9 | } 10 | 11 | var ret = switchPage('txt:预约挂号', 'txt:转到上一层级', {click: false, afterWait: 5000}); 12 | if (ret.length > 0) { 13 | console.log('进入预约'); 14 | 15 | var ret = switchPage('txt:预约类型', 'txt:去挂号', {family:[1,1], click: true, afterWait: 5000}); 16 | if (ret.length > 0) { 17 | console.log('进入选择院区'); 18 | var ret = switchPage('txt:去挂号', 'cn:android.widget.EditText', { click: true}); 19 | if (ret.length > 0) { 20 | console.log('进入挂号区'); 21 | clickByTag('txt:温馨提示', {family:[0, -1, 1], click: true, afterWait: 2000, maxStep: 8}); 22 | clickByTag('cn:android.widget.EditText', {click: true}); 23 | pasteByTag('cn:android.widget.EditText', name, {afterWait: 1000}); 24 | clickByTag('txt:查询', {click: true}); 25 | 26 | while (true) { 27 | // var name = '袁斌', date = '11-07'; 28 | var ret = switchPage('txt^:' + name + '@cn:android.view.View', 'txt:门诊排班', {click: true, maxStep: 8}); 29 | if (ret.length > 0) { 30 | console.log('找到专家了'); 31 | if (date != '') { 32 | clickByTag('txt:' + date, {click: true}); 33 | } 34 | 35 | var ret = findView('txt:预约|txt:停诊|txt:约满', {flag: 'traverse_invisible', maxStep: 8}); 36 | if (ret.length > 0) { 37 | console.log('ret.tag:', ret.tag); 38 | if (ret.tag == '预约') { 39 | console.log('find ==='); 40 | click(ret.views[0], {click: true}); 41 | pay(); 42 | break; 43 | } else { 44 | back(); 45 | } 46 | } else { 47 | console.log('not find ==='); 48 | } 49 | } else { 50 | console.log('进入专家失败'); 51 | } 52 | } 53 | } else { 54 | console.log('进入挂号区失败'); 55 | } 56 | } else { 57 | console.log('进入选择院区失败'); 58 | } 59 | } else { 60 | console.log('进入预约失败'); 61 | } 62 | } 63 | 64 | function pay() { 65 | var ret = findView('txt:挂号金额'); 66 | if (ret.length > 0) { 67 | console.log('进入挂号'); 68 | var ret = findView('txt:分时段号源', {maxStep: 8}); 69 | if (ret.length > 0) { 70 | var container = ret.views[0][0]; 71 | for (var item of container) { 72 | if (item.length > 1) { 73 | var text = item[-1].text; 74 | if (text.startsWith('剩余号源数')) { 75 | var a = text.substring('剩余号源数'.length).trim(); 76 | console.log('a:', a); 77 | if (a != '') { 78 | var r = parseInt(a); 79 | if (r > 0) { 80 | console.log('找到号源了'); 81 | click(item, {click: true}); 82 | var ret = findView('txt:我已阅读并同意'); 83 | if (ret.length > 0) { 84 | click(ret.views[0], {click: true}); 85 | } 86 | clickByTag('txt:确定预约', {maxStep:8}); 87 | 88 | clickByTag('txt:确定', {click: true}); 89 | 90 | var ret = switchPage('txt:去支付', 'txt:立即支付'); 91 | if (ret.length > 0) { 92 | console.log('进入支付'); 93 | } else { 94 | console.log('没进入支付'); 95 | } 96 | break; 97 | } 98 | } 99 | } 100 | } 101 | } 102 | } 103 | } else { 104 | console.log('进入挂号失败'); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /51cto自动养号: -------------------------------------------------------------------------------- 1 | 2 | var sShouldExit = false; 3 | 4 | function main() { 5 | var hours = new Date().getHours(); 6 | console.log('hours:' + hours); 7 | if (hours < 8 || hours > 23) { 8 | return; 9 | } 10 | 11 | var ret = launchApp('com.cto51.student', 'txt:博客|txt:我的', {failed: exitPopup, maxStep: 30, beforeWait: 3000}); 12 | if (1 == ret) { 13 | console.log('进入程序'); 14 | 15 | var __day checkIn = false; 16 | if (!checkIn) { 17 | ret = switchPage('txt:我的', 'txt:会员中心|txt:购物车|', {failed: exitPopup, click: true}); 18 | if (ret.length > 0) { 19 | clickByTag('txt:签到', {click: true, afterWait: 2000}); 20 | checkIn = true; 21 | } 22 | } 23 | 24 | ret = switchPage('txt:博客', 'txt:51CTO博客', {failed: exitPopup, click: true}); 25 | if (ret.length > 0) { 26 | var maxReadCount = parseInt(Math.random()*3+1); 27 | var index = 0; 28 | console.log('max read count:' + maxReadCount); 29 | while (index < maxReadCount) { 30 | var scrollCount = parseInt(Math.random()*5+2); 31 | console.log('scrollCount:' + scrollCount); 32 | for (var i = 0; i < scrollCount; ++i) { 33 | scroll('up', {distance: 0.9, afterWait:3000}); 34 | } 35 | 36 | ret = findView('cn:android.webkit.WebView', {failed:exitPopup}); 37 | if (ret.length > 0) { 38 | var container = ret.views[0]; 39 | 40 | var height = container.height - 200; 41 | 42 | var enter = false; 43 | var i = 0; 44 | while (!enter && i < 3) { 45 | var y = Math.random() * height + container.top + 100; 46 | gestureClick(rsScreenWidth/2, y, {afterWait: 3000}); 47 | ret = findView('txt^:写评论'); 48 | // ret = findView('txt^:写评论', {failed: exitPopup}); 49 | if (ret.length > 0) { 50 | enter = true; 51 | } 52 | ++i; 53 | } 54 | console.log('进入了文章'); 55 | // 关注 56 | if (prob(50)) { 57 | clickByTag('txt:关注', {failed: exitPopup, click: true, afterWait: 2000}); 58 | } 59 | 60 | var startTime = new Date().getTime(); 61 | while (new Date().getTime() - startTime < 120000) { 62 | ret = findView('txt:发布评论|txt:上一篇', {failed: exitPopup}); 63 | if (ret.length > 0) { 64 | console.log('find:' + ret.tag); 65 | break; 66 | } 67 | console.log('scroll---'); 68 | scroll('up', {root: container, distance: Math.random()*0.45 + 0.3, duration: parseInt(Math.random()*250+450), afterWait: parseInt(Math.random()*1500+1000)}); 69 | } 70 | 71 | // scroll('down', {distance: Math.random()*0.45 + 0.3, duration: parseInt(Math.random()*400+200), afterWait: 3000}); 72 | 73 | console.log('out--'); 74 | // 点赞 75 | if (prob(50)) { 76 | clickByTag('txt:点赞', {failed: exitPopup, afterWait: 2000}); 77 | } 78 | 79 | // 收藏 80 | if (prob(50)) { 81 | clickByTag('txt:收藏', {failed: exitPopup, afterWait: 2000}); 82 | } 83 | 84 | // 评论 85 | if (prob(50)) { 86 | ret = switchPage('txt^:写评论', 'cn:android.widget.EditText', {failed: exitPopup}); 87 | if (ret.length > 0) { 88 | console.log('粘贴'); 89 | 90 | var customData = getCustomData('comments'); 91 | if (customData) { 92 | console.log('customData:' + customData); 93 | var comments = customData.split('#'); 94 | console.log('comments:' + comments); 95 | var index = parseInt(Math.random() * comments.length); 96 | var text = comments[index]; 97 | console.log('paste text:' + text); 98 | paste(ret.views[0], text, {type: 'paste', afterWait: 3000}); 99 | 100 | clickByTag('txt:发布', {afterWait: 3000}); 101 | } 102 | } 103 | } 104 | 105 | back2Page('txt:推荐', {failed: exitPopup}); 106 | } 107 | 108 | ++index; 109 | } 110 | } 111 | 112 | console.log('finish'); 113 | } 114 | 115 | exitAppDeal(); 116 | console.log('end'); 117 | } 118 | 119 | function exitPopup() { 120 | if (sShouldExit) { 121 | return; 122 | } 123 | 124 | var ret = findView('txt:以后再说|txt:我知道了|txt:知道了|txt*:欢迎您使用搜索|txt:要吐槽', {maxStep: 1}); 125 | if (ret.length > 0) { 126 | console.log('text:' + ret.tag); 127 | if (ret.tag == '欢迎您使用搜索') { 128 | clickByTag('txt:退出', {click: true}); 129 | } else if (ret.tag == '要吐槽') { 130 | var view = ret.views[0].parent; 131 | gestureClick(rsScreenWidth / 2, view.bottom + 100); 132 | } else { 133 | click(ret.views[0]); 134 | } 135 | return true; 136 | } 137 | 138 | ret = findView('id:com.cto51.student:id/iv_close|id:com.cto51.student:id/update_cancel', {maxStep: 1}); 139 | if (ret.length > 0) { 140 | console.log('find:' + ret.tag); 141 | click(ret.views[0]); 142 | } 143 | 144 | return globalExitPopup(); 145 | } 146 | -------------------------------------------------------------------------------- /爬取美团app数据: -------------------------------------------------------------------------------- 1 | function main() { 2 | if (1 == launchApp('com.sankuai.meituan', 'txt:我的', {failed: exitPopup, maxStep: 30})) { 3 | var ret = switchPage('txt^:超市', 'txt:超市卖场', {failed: exitPopup, afterWait: 3000,click: true, maxStep: 15}); 4 | console.log('enter1'); 5 | if (ret.length > 0) { 6 | console.log('mark'); 7 | clickByTag('txt:超市卖场', {afterWait: 6000,click: true}); 8 | var scrollIndex = 0; 9 | while (scrollIndex < 2) { 10 | scroll('up', {type: 1,distance: 0.4,beforeWait: 1000,afterWait: 1000}); 11 | ++scrollIndex; 12 | } 13 | console.log('start==>'); 14 | var c = 0; 15 | while (c < 1) { 16 | ++c; 17 | console.log('xxx'); 18 | var index = 0; 19 | while (true) { 20 | var ret = findView('id:com.sankuai.meituan:id/fl_recycle_mach_container', {flag: 'find_all'}); 21 | 22 | if (ret.length <= 0) { 23 | break; 24 | } 25 | var viewContainer = ret.views; 26 | if (index >= viewContainer.length) { 27 | break; 28 | } 29 | var item = viewContainer[index]; 30 | click(item);click(item, {click: true, afterWait: 1000}); 31 | ret = findView('txt^:搜索店内商品', {maxStep: 8, afterWait: 3000}); 32 | if (ret.length > 0) { 33 | console.log('进入商店'); 34 | // 定位到指定商品列表 35 | var category = getCustomData('category'); 36 | console.log('category:' + category); 37 | if (category != '') { 38 | var exit = false; 39 | while (!exit) { 40 | var ret = findView('id:com.sankuai.meituan:id/txt_category_name_1', {flag: 'find_all'}); 41 | console.log('ret.views.length:' + ret.views.length); 42 | if (ret.length > 0) { 43 | var cc = 0; 44 | for (var item of ret.views) { 45 | console.log('item:' + item.text); 46 | if (item.text == category || cc == 1) { 47 | console.log('find category:' + category); 48 | click(item, {click: true}); 49 | exit = true; 50 | break; 51 | } 52 | ++cc; 53 | } 54 | } 55 | 56 | if (!exit) { 57 | console.log('scroll==='); 58 | scrollByTag('id:com.sankuai.meituan:id/poi_dish_categories', 'up', {type:2, afterWait: 3000}); 59 | } 60 | } 61 | } 62 | 63 | // 开始搜集商品信息 64 | var arr = []; 65 | while (true) { 66 | var ret = findView('id:com.sankuai.meituan:id/detail_content_layout', {flag:'find_all'}); 67 | if (ret.length > 0) { 68 | var i = 0; 69 | for (i = 0; i < ret.views.length; ++i) { 70 | var item = ret.views[i]; 71 | // console.log('index:' + i); 72 | if (item[0].text != '' && item.length >= 4){ 73 | if (arr.indexOf(item[0].text) < 0) { 74 | if (item[-1].length >= 3) { 75 | arr.push(item[0].text); 76 | console.log('title:' + item[0].text + ' ' + item[2][0].text + ' 价格:' + item[-1][1].text + ' 原价:' + item[-1][2].text); 77 | } else if (item[-1].length >= 2) { 78 | arr.push(item[0].text); 79 | console.log('title:' + item[0].text + ' ' + item[2][0].text + ' 价格:' + item[-1][1].text); 80 | } 81 | } 82 | } 83 | } 84 | } else { 85 | console.log('can not find item info'); 86 | } 87 | 88 | ret = findView('id:com.sankuai.meituan:id/txt_category_name'); 89 | if (ret.length > 0) { 90 | console.log('找到另外一个类目啦:' + ret.views[0].text); 91 | break; 92 | } 93 | 94 | scroll('up', {distance: '0.5', afterWait: 2000}); 95 | } 96 | } else { 97 | console.log('进入失败'); 98 | } 99 | ++index; 100 | } 101 | } 102 | 103 | console.log('end'); 104 | back2Page('txt:美团优选'); 105 | } 106 | console.log('end1'); 107 | } 108 | } 109 | // com.sankuai.waimai.store.manager.marketing.parser.inner.mach.a$a 110 | function exitPopup() { 111 | if (rsCurWindowClassName == 'com.sankuai.waimai.store.manager.marketing.parser.inner.mach.a$a') { 112 | back({afterWait: 3000}); 113 | } 114 | 115 | var ret = findView('txt:fef|id:ddd', {maxStep:1}); 116 | if (ret.length > 0) { 117 | clickByTag('txt:x'); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /cnblog博客园自动养号: -------------------------------------------------------------------------------- 1 | 2 | import 'sys_'+getManufacturer()+'_runtime'; 3 | 4 | var sShouldExit = false; 5 | 6 | function main() { 7 | var hours = new Date().getHours(); 8 | console.log('hours:' + hours); 9 | if (hours < 8 || hours > 23) { 10 | return; 11 | } 12 | 13 | if (!smartLaunchApp('com.cnblogs.xamarinandroid', false, false, 0)) { 14 | console.error('启动app失败'); 15 | return; 16 | } 17 | 18 | var ret = waitAppLaunched('txt:博客|txt:我的', {failed: exitPopup, maxStep: 30, beforeWait: 3000}); 19 | if (ret.length > 0) { 20 | console.log('进入程序'); 21 | 22 | var maxReadCount = parseInt(Math.random()*3+1); 23 | var index = 0; 24 | console.log('max read count:' + maxReadCount); 25 | while (index < maxReadCount) { 26 | var scrollCount = parseInt(Math.random()*5+1); 27 | console.log('scrollCount:' + scrollCount); 28 | for (var i = 0; i < scrollCount; ++i) { 29 | scroll('up', {distance: 0.9, afterWait:3000}); 30 | } 31 | 32 | ret = findView('cn:android.support.v7.widget.RecyclerView', {failed:exitPopup}); 33 | if (ret.length > 0) { 34 | var container = ret.views[0]; 35 | 36 | var i = parseInt(Math.random()*(container.length)); 37 | var item = container[i]; 38 | if (item && item.clickable) { 39 | click(item, {clickable: true, afterWait: 3000}); 40 | 41 | ret = findView('txt:首页'); 42 | if (ret.length <= 0) { 43 | if (rsCurWindowClassName.endsWith('BlogDetailActivity')) { 44 | console.log('进入了文章'); 45 | 46 | // 关注 47 | if (prob(50)) { 48 | var back = false; 49 | ret = switchPage('txt:作者主页', 'txt:加关注', {failed: exitPopup, click: true}); 50 | if (ret.length > 0) { 51 | click(ret.views[0], {click: true, afterWait: 1000}); 52 | back = true; 53 | } 54 | back2Page('txt:作者主页', {failed: exitPopup, backFirst: back}); 55 | } 56 | 57 | var startTime = new Date().getTime(); 58 | var maxTime = parseInt(Math.random() * 40000 + 40000); 59 | while (new Date().getTime() - startTime < maxTime) { 60 | ret = findView('txt:结束', {failed: exitPopup}); 61 | if (ret.length > 0) { 62 | break; 63 | } 64 | scroll('up', {distance: Math.random()*0.45 + 0.3, duration: parseInt(Math.random()*250+450), afterWait: parseInt(Math.random()*1500+1000)}); 65 | } 66 | 67 | scroll('down', {distance: Math.random()*0.45 + 0.3, duration: parseInt(Math.random()*400+200), afterWait: 3000}); 68 | 69 | // 点赞 70 | if (prob(50)) { 71 | ret = findView('id:com.cnblogs.xamarinandroid:id/btn_agree', {failed: exitPopup}); 72 | if (ret.length > 0) { 73 | click(ret.views[0], {click: true, afterWait: 1000}); 74 | } 75 | } 76 | 77 | // 收藏 78 | if (prob(30)) { 79 | ret = findView('id:com.cnblogs.xamarinandroid:id/action_collect', {failed: exitPopup}); 80 | if (ret.length > 0) { 81 | click(ret.views[0], {click: true, afterWait: 1000}); 82 | } 83 | } 84 | 85 | // 评论 86 | if (prob(50)) { 87 | ret = switchPage('txt^:我也来说两句', 'id:com.cnblogs.xamarinandroid:id/et_comment', {failed: exitPopup}); 88 | if (ret.length > 0) { 89 | console.log('粘贴'); 90 | 91 | var customData = getCustomData('comments'); 92 | if (customData) { 93 | console.log('customData:' + customData); 94 | var comments = customData.split('#'); 95 | console.log('comments:' + comments); 96 | var index = parseInt(Math.random() * comments.length); 97 | var text = comments[index]; 98 | console.log('paste text:' + text); 99 | paste(ret.views[0], text, {type: 'paste', afterWait: 3000}); 100 | 101 | clickByTag('txt:提交', {afterWait: 3000, click: true}); 102 | } 103 | } 104 | } 105 | 106 | back2Page('txt:首页', {failed: exitPopup}); 107 | } 108 | } else { 109 | back2Page('txt:首页', {failed: exitPopup, backFirst: false}); 110 | } 111 | } 112 | } 113 | 114 | ++index; 115 | } 116 | 117 | console.log('finish'); 118 | } 119 | 120 | exitAppDeal(); 121 | console.log('end'); 122 | } 123 | 124 | function exitPopup() { 125 | if (sShouldExit) { 126 | return; 127 | } 128 | 129 | var ret = findView('txt:以后再说|txt:我知道了|txt:知道了|txt*:欢迎您使用搜索|txt:要吐槽', {maxStep:1}); 130 | if (ret.length > 0) { 131 | console.log('text:' + ret.tag); 132 | if (ret.tag == '欢迎您使用搜索') { 133 | clickByTag('txt:退出', {click: true}); 134 | } else if (ret.tag == '要吐槽') { 135 | var view = ret.views[0].parent; 136 | gestureClick(rsScreenWidth / 2, view.bottom + 100); 137 | } else { 138 | click(ret.views[0]); 139 | } 140 | return true; 141 | } 142 | 143 | return globalExitPopup(); 144 | } 145 | -------------------------------------------------------------------------------- /抖音自动刷视频、做任务赚金币: -------------------------------------------------------------------------------- 1 | function main() { 2 | if (1 != launchApp('com.ss.android.ugc.aweme.lite', 'txt:关注|txt:首页', {maxStep: 50})) { 3 | console.log('进入app失败'); 4 | return; 5 | } 6 | 7 | 8 | back(); 9 | 10 | lookVideo(); 11 | 12 | var cc = 3; 13 | var ret; 14 | var x = rsScreenWidth/2, y = rsScreenHeight - 50; 15 | console.log('x:' + x + ' y:' + y, rsScreenWidth, rsScreenHeight); 16 | while (cc > 0) { 17 | gestureClick(x, y, {afterWait: 3000}); 18 | ret = findView('txt:赚钱任务|txt^:金币收益|txt^:立即签到', {click: true, fastCount: 3}); 19 | if (ret.length > 0) { 20 | break; 21 | } 22 | --cc; 23 | } 24 | // var ret = switchPage('id:com.ss.android.ugc.aweme.lite:id/f+n|com.ss.android.ugc.aweme.lite:id/gb=', 'txt:赚钱任务|txt^:金币收益|txt^:立即签到', {click: true, afterWait: 5000}); 25 | if (ret.length > 0) { 26 | console.log('enter task'); 27 | 28 | if (ret.tag == '立即签到') { 29 | clickByTag('txt^:立即签到', {afterWait: 2000}); 30 | } 31 | 32 | console.log('开始领取'); 33 | var target = 'txt:领取|txt:去领取|txt^:立即签到|txt^:签到奖励已翻倍|txt:开宝箱得金币|txt:去逛街|txt:jks'; 34 | var count = 1; 35 | while (true) { 36 | console.log('all tag:' + target); 37 | ret = findView(target, {failed: dealAD, fastCount: 4}); 38 | if (ret.length > 0) { 39 | console.log('xx:' + ret.tag); 40 | click(ret.views[0], {afterWait: 5000}); 41 | target = removeTag(target, ret.tag); 42 | 43 | if (ret.tag == '立即签到' || ret.tag == '签到奖励已翻倍') { 44 | console.log('立即签到'); 45 | clickByTag('txt^:看广告视频再赚'); 46 | } else { 47 | if (ret.tag =='领取') { 48 | clickByTag('txt:开始攒金币'); 49 | } else if (ret.tag =='开宝箱得金币') { 50 | var ret = findView('txt^:看广告视频再赚'); 51 | if (ret.length > 0) { 52 | console.log('确认开箱了,'); 53 | click(ret.views[0], {afterWait: 5000}); 54 | ret = findView('txt:赚钱任务|txt^:金币收益', {failed: exitAD}); 55 | } 56 | } else if (ret.tag == '去逛街') { 57 | ret = findView('txt:赚钱任务|txt^:金币收益', {fast:true}); 58 | if (ret.length <= 0) { 59 | console.log('进入了逛街'); 60 | var start = new Date().getTime(); 61 | while (new Date().getTime() - start < 1000 * 100) { 62 | scroll('up', {distance:Math.random()*0.82 + 0.5}); 63 | ret = findView('txt:已领取', {fast:true}); 64 | if (ret.length > 0) { 65 | break; 66 | } 67 | } 68 | 69 | back2Page('txt:赚钱任务|txt^:金币收益', {fast:true, failed: exitGJ}); 70 | } 71 | } 72 | } 73 | // ret = findView(target, {failed: dealAD, fast:true}); 74 | } else { 75 | if (count > 0) { 76 | console.log('开始滚动啦'); 77 | scroll('up', {distance: 0.8, afterWait: 5000}); 78 | count -= 1; 79 | } else { 80 | console.log('找不到,结束了'); 81 | break; 82 | } 83 | } 84 | } 85 | 86 | // ret = findView(''); 87 | console.log('任务完成啦'); 88 | } else { 89 | console.log('enter failed'); 90 | } 91 | 92 | console.log('end'); 93 | /* 94 | clickByTag('txt^:立即签到'); 95 | clickByTag('txt^:看广告视频再赚'); 96 | clickByTag('txt:去领取'); 97 | clickByTag('txt:去逛街'); 98 | clickByTag('txt:开宝箱得金币'); 99 | clickByTag('txt^:看广告视频再赚'); 100 | 101 | clickByTag('id:com.ss.android.ugc.aweme.lite:id/f+n', {random: false, click: true}); 102 | */ 103 | } 104 | 105 | function lookVideo() { 106 | scroll('up', {distance: 0.9 + Math.random() * 0.05}); 107 | 108 | var startTime = new Date().getTime(); 109 | // var maxTime = (10 + Math.random() * 2) * 60 * 1000; 110 | var maxTime = 1 * 60 * 1000; 111 | while (new Date().getTime() - startTime < maxTime ) { 112 | var s = new Date().getTime(); 113 | var doLikeTime = (3 + Math.random() * 2) * 1000; 114 | sleep(doLikeTime); 115 | clickByTag('txt^:未点赞', {afterWait: 2000, failed: ep}); 116 | // sleep(15 * 1000); 117 | scroll('up', {distance: 0.9 + Math.random() * 0.05}); 118 | } 119 | } 120 | 121 | function ep() { 122 | var ret = findView('txt:青少年模式', {maxStep: 1}); 123 | if (ret.length > 0) { 124 | clickByTag('txt:我知道了', {click: true}); 125 | } 126 | } 127 | 128 | function checkEnterAD() { 129 | if ('com.ss.android.excitingvideo.ExcitingVideoActivity'.includes(rsCurWindowClassName)) { 130 | return true; 131 | } 132 | var ret = findView('txt:关闭广告|txt^:奖励将于|txt*:获得奖励|txt$:后可领取奖励|txt$:后可领取金币|txt$:后可领金币|id:com.ss.android.ugc.aweme.adlynx:id/vangogh_video_view|id:com.ss.android.ugc.aweme.lite:id/video_view|id:com.ss.android.ugc.aweme.lite:id/mimo_reward_root_view|id:com.ss.android.ugc.aweme.lite:id/tt_reward_root', {maxStep:1,fast:true}); 133 | if (ret.length > 0) { 134 | if (!ret.tag.includes('邀请好友')) { 135 | console.log('force enter :' + ret.tag); 136 | return true; 137 | } 138 | } 139 | return false; 140 | } 141 | 142 | 143 | function exitGJ() { 144 | var ret = findView('txt:坚持退出', {maxStep:3}); 145 | if (ret.length > 0) { 146 | click(ret.views[0]); 147 | } 148 | } 149 | 150 | function dealAD() { 151 | if (checkEnterAD()) { 152 | console.log('enter ad'); 153 | var state = 1; 154 | var isFindClose = false; 155 | var startTime = new Date().getTime(); 156 | while (new Date().getTime() - startTime < 100000) { 157 | var ret = findView('txt^:金币收益|txt:赚钱任务|txt:领取奖励', {maxStep: 3}); 158 | if (ret.length > 0) { 159 | if (ret.tag == '领取奖励') { 160 | console.log('找到领取奖励'); 161 | clickByTag('txt:领取奖励', {afterWait: 3000,{maxStep: 3}}); 162 | startTime = new Date().getTime(); 163 | // 继续广告 164 | } else { 165 | console.log('找到标记,说明没有进入广告:' + ret.tag); 166 | break; 167 | } 168 | } 169 | 170 | if (rsCurWindowClassName=='com.ss.android.ugc.aweme.crossplatform.activity.CrossPlatformActivity' || (rsCurWindowClassName=='com.bytedance.ies.android.rifle.container.RifleContainerActivity')) { 171 | console.log('back'); 172 | back(); 173 | } 174 | 175 | if (rsCusPackageName != 'com.ss.android.ugc.aweme.lite') { 176 | refresh(); 177 | } 178 | 179 | ret = findView('txt^:参与互动|txt^:浏览页面|txt:禁止|txt:放弃奖励|txt*:要继续观看视频|txt:继续观看|txt^:再看一个获取|txt:继续观看,领取奖励|id:返回|txt:领取成功', {maxStep: 3}); 180 | if (ret.length > 0) { 181 | console.log('找到参与互动:' + ret.tag); 182 | if (ret.views[0].text.includes('浏览页面')) { 183 | if (ret.views[0].text.includes('领取奖励')) { 184 | click(ret.views[0]); 185 | } 186 | } else if (ret.tag == '要继续观看视频') { 187 | click(ret.views[0].parent[2], {afterWait:3000}); 188 | } else if (ret.tag == '领取成功') { 189 | var v = ret.views[0]; 190 | gestureClick(v.left + v.width + 50, v.top + 30); 191 | clickByTag('txt:关闭当前视频', {maxStep: 3}); 192 | console.log('找到 领取成功'); 193 | } else { 194 | click(ret.views[0]); 195 | } 196 | } 197 | 198 | // 关闭右上角广告 199 | console.log('sss'); 200 | ret = findView('txt:关闭,按钮', {maxStep:3}); 201 | if (ret.length > 0) { 202 | console.log('find:' + ret.tag); 203 | if (ret.tag == '关闭,按钮') { 204 | clickByTag('txt:关闭,按钮'); 205 | } 206 | } 207 | 208 | if (isFindClose) { 209 | console.log(' find close so break'); 210 | break; 211 | } 212 | } 213 | 214 | if (state == 1) { 215 | if (new Date().getTime() - startTime >= 30000) { 216 | console.log('refresh1==='); 217 | refresh(); 218 | ++state; 219 | } 220 | } else if (2 == state) { 221 | if (new Date().getTime() - startTime >= 40000) { 222 | console.log('refresh2==='); 223 | refresh(); 224 | ++state; 225 | } 226 | } else if (3 == state) { 227 | if (new Date().getTime() - startTime >= 50000) { 228 | console.log('refresh3==='); 229 | refresh(); 230 | ++state; 231 | } 232 | } 233 | 234 | if (new Date().getTime() - startTime >= 60000) { 235 | console.log('timeout'); 236 | if (checkEnterAD()) { 237 | // back(); 238 | console.log('网络太差卡住了'); 239 | sShouldExit = true; 240 | } 241 | 242 | refresh(); 243 | } else { 244 | if (new Date().getTime() - startTime < 10000) { 245 | if (checkEnterAD()) { 246 | console.log('广告时间太短,说明很有可能是广告的windowClass没有变更'); 247 | refresh(); 248 | } 249 | } 250 | } 251 | 252 | console.log('退出广告'); 253 | return true; 254 | } 255 | console.log('check ad, not enter ad'); 256 | } 257 | 258 | function removeTag(target, tag) { 259 | var index = target.indexOf(tag); 260 | if (index >= 0) { 261 | var start = target.lastIndexOf('|', index); 262 | var end = target.indexOf('|', index); 263 | if (start < 0) { 264 | start = -1; 265 | } 266 | if (end < 0) { 267 | end = target.length - 1; 268 | } 269 | var txt = target.substring(start + 1, end + 1); 270 | console.log('remove txt:' + txt); 271 | target = target.replace(txt, ''); 272 | } 273 | return target; 274 | } 275 | -------------------------------------------------------------------------------- /微信视频号自动点赞、收集视频信息: -------------------------------------------------------------------------------- 1 | var temp = null; 2 | var ret = null; 3 | var view = null; 4 | var viewContainer = null; 5 | var tag = null; 6 | var item = null; 7 | var index = null; 8 | var data = ''; 9 | var text = ''; 10 | var firstName = ''; 11 | var exit = true; 12 | var like = null; 13 | var title = ''; 14 | var comment = 'null'; 15 | var video = null; 16 | var confirmLook = null; 17 | var exitApp = null; 18 | var firstVideoName = null; 19 | var top = null; 20 | 21 | function main() { 22 | var ret = launchApp('com.tencent.mm', 'txt^:微信', {maxStep: 30}); 23 | if (1 != ret) { 24 | console.log('进入微信失败'); 25 | return; 26 | } 27 | 28 | var ret = switchPage('txt:我', 'txt:视频号', {click: true,duration: 500,maxStep: 5}); 29 | if (ret.length > 0) { 30 | console.log('进入我的'); 31 | var ret = switchPage('txt:视频号', 'txt*:人关注', {duration: 500,maxStep: 15}); 32 | if (ret.length > 0) { 33 | // 获取名称 34 | var username = ret.views[0].parent.parent.parent.parent[0][-1][-1][0][0].text; 35 | console.log('进入视频号:' + username); 36 | 37 | video = []; 38 | firstVideoName = ''; 39 | top = 0; 40 | while (true) { 41 | var indexR = 0; 42 | while (true) { 43 | var ret = findView('cn:androidx.recyclerview.widget.RecyclerView', {flag:'find_all'}); 44 | if (ret.length <= 0) { 45 | console.log('找不到recyclerview'); 46 | break; 47 | } 48 | var viewContainer = ret.views[-1]; 49 | if (indexR >= viewContainer.length) { 50 | console.log('len is invalide indexR:' + indexR); 51 | break; 52 | } 53 | var item = viewContainer[indexR]; 54 | click(item, {click: true, afterWait: 1000}); 55 | var ret = findView('txt:浮窗', {maxStep: 10, afterWait: 2000}); 56 | if (ret.length > 0) { 57 | console.log('进入了视频'); 58 | confirmLook = true; 59 | var ck = '', dz = '', zf = '', xh = '', hf = ''; 60 | var ret = findView('cn:androidx.recyclerview.widget.RecyclerView'); 61 | if (ret.length > 0) { 62 | var text = ret.views[0][0][-2][0][0][0][0].text; 63 | // var text = ret.views[0][0][3][0][0][0][0].text; 64 | console.log('找到文本:' + text); 65 | var arr = text.split('\n'); 66 | console.log('找到目标文本:' + arr[0]); 67 | title = arr[0]; 68 | 69 | ck = ret.views[0][0][-2][1][0][0][-1].text; 70 | dz = ret.views[0][0][-2][1][-1][0][-1].text; 71 | zf = ret.views[0][0][-2][1][-1][1][-1].text; 72 | xh = ret.views[0][0][-2][1][-1][2][-1].text; 73 | hf = ret.views[0][0][-2][1][-1][3][-1].text; 74 | 75 | /* 76 | ck = ret.views[0][0][3][1][0][0][-1].text; 77 | dz = ret.views[0][0][3][1][-1][0][-1].text; 78 | zf = ret.views[0][0][3][1][-1][1][-1].text; 79 | xh = ret.views[0][0][3][1][-1][2][-1].text; 80 | hf = ret.views[0][0][3][1][-1][3][-1].text;*/ 81 | console.log('ck:' + ck + ' dz:' + dz + ' zf:' + zf + ' xh:' + xh + ' hf:' + hf); 82 | } else { 83 | console.log('没找到recyclerview'); 84 | title = ''; 85 | } 86 | 87 | if (indexR == 0) { 88 | console.log('一页的第一个视频:' + title + ' top:' + item.top); 89 | if (firstVideoName == title) { 90 | var d = top - item.top; 91 | console.log('d:' + d); 92 | if ((d >= 0 && d < 20) || (d < 0 && d > -20)) { 93 | console.log('已经滚动到视频列表的最底部了,该结束啦'); 94 | exitApp = true; 95 | break; 96 | } 97 | } 98 | top = item.top; 99 | firstVideoName = title; 100 | } 101 | 102 | if (video.indexOf(title) < 0) { 103 | video.push(title); 104 | } else { 105 | console.log('已经看过该视频了,不再看啦'); 106 | confirmLook = false; 107 | } 108 | if (confirmLook) { 109 | // 点赞处理 110 | // click(ret.views[0][0][3][1][-1][0], {click: true, afterWait: 2000}); 111 | click(ret.views[0][0][-2][1][-1][0], {click: true, afterWait: 2000}); 112 | console.log('进入了点赞'); 113 | firstName = ''; 114 | exit = true; 115 | like = []; 116 | while (true) { 117 | var indexX = 0; 118 | var ret = findView('id:com.tencent.mm:id/n81', {flag: 'find_all'}); 119 | for (var item of ret.views) { 120 | if (indexX == 0) { 121 | if (item.text == firstName) { 122 | exit = true; 123 | console.log('退出循环'); 124 | break; 125 | } else { 126 | exit = false; 127 | firstName = item.text; 128 | console.log('set firstName:' +firstName); 129 | } 130 | } 131 | 132 | if (like.indexOf(item.text) < 0) { 133 | like.push(item.text); 134 | } 135 | 136 | ++indexX; 137 | } 138 | 139 | console.log('滚动页面'); 140 | scrollByTag('cn:androidx.recyclerview.widget.RecyclerView', 'up', {type: 2,afterWait: 2000}); 141 | if (exit) { 142 | break; 143 | } 144 | } 145 | console.log('点赞:' + like); 146 | clickByTag('txt$:人#|txt:喜欢过的人', {family:[0, 1],afterWait: 1000,click: true}); 147 | 148 | // 评论处理 149 | var ret = switchPage('id:com.tencent.mm:id/bjq', 'txt*:评论', { 150 | click: true,duration: 500,maxStep: 5}); 151 | if (ret.length > 0) { 152 | console.log('进入评论'); 153 | firstName = ''; 154 | exit = false; 155 | comment = []; 156 | while (true) { 157 | var ret = findView('cn:androidx.recyclerview.widget.RecyclerView', {afterWait: 1000}); 158 | if (ret.length > 0) { 159 | var container = ret.views[0]; 160 | var index = 0; 161 | for (var item of container) { 162 | if (item.className == 'android.widget.FrameLayout'){ 163 | if (item[0][0].className =='android.view.ViewGroup') { 164 | var name = item[0][0][1][0].text; 165 | var time = item[0][0][1][-1].text; 166 | var content = item[0][0][2][0].text; 167 | var t = name + '*#*' + content + '*#*' + time; 168 | if (index == 0) { 169 | if (firstName == t) { 170 | console.log('结束了'); 171 | exit = true; 172 | break; 173 | } else { 174 | firstName = t; 175 | console.log('set firstName:' +firstName); 176 | } 177 | } 178 | 179 | if (strIsNotEmpty(name) && strIsNotEmpty(content)) { 180 | if (comment.indexOf(t) < 0) { 181 | comment.push(t); 182 | } 183 | } else { 184 | console.log('content is empty:' + t); 185 | } 186 | } 187 | ++index; 188 | } 189 | } 190 | 191 | if (comment.length <= 0) { 192 | console.log('没有评论'); 193 | break; 194 | } 195 | } else { 196 | console.log('can not find container'); 197 | break; 198 | } 199 | 200 | console.log('开始滚动'); 201 | scrollByTag('cn:androidx.recyclerview.widget.RecyclerView', 'up', {type: 2,afterWait: 2000}); 202 | if (exit) { 203 | break; 204 | } 205 | } 206 | console.log('评论:' + comment); 207 | clickByTag('txt$:条评论', {family:[0, 1],afterWait: 1000,click: true}); 208 | } 209 | var obj = {ck:ck, dz:dz, zf:zf, xh:xh, hf:hf, title: title, like: like, comment: comment}; 210 | var ret = callWebService('http://pdd.9bang.net/shipinhao_api.aspx', obj); 211 | console.log('obj:' + obj + ' ret:' + ret); 212 | } 213 | 214 | back2Page('txt:' + username, {duration: 500,maxStep: 5}); 215 | // back2Page('txt*:人关注', {duration: 500,maxStep: 5}); 216 | } else { 217 | console.log('进入视频失败'); 218 | } 219 | ++indexR; 220 | } 221 | 222 | if (exitApp) { 223 | console.log('退出应用啦'); 224 | break; 225 | } 226 | console.log('开始滚动视频========》'); 227 | var ret = findView('cn:androidx.recyclerview.widget.RecyclerView', {flag:'find_all'}); 228 | if (ret.length > 0) { 229 | console.log('xxxx:' + ret.views[-1]); 230 | scroll('up', {type: 1, node:ret.views[-1],distance: 0.8, afterWait: 2000}); 231 | } else { 232 | console.log('滚动,没找到根,退出'); 233 | break; 234 | } 235 | } 236 | } 237 | } else { 238 | console.log('进入我的页面失败'); 239 | } 240 | 241 | back2Page('txt:微信|txt:我', {duration: 500,maxStep: 8}); 242 | } 243 | -------------------------------------------------------------------------------- /百度极速版自动阅读: -------------------------------------------------------------------------------- 1 | function main() { 2 | var ret = launchApp('com.baidu.searchbox.lite', 'txt:我的|id:android:id/tabs', {failed: exitPopup, maxStep: 30, beforeWait: 3000}); 3 | if (1 == ret) { 4 | console.log('进入程序'); 5 | 6 | var appStartTime = new Date().getTime(); 7 | var maxTime = parseInt((Math.random()*2+2)*60000); 8 | var doTaskTime = parseInt((Math.random()*1)*60000); 9 | console.log('maxTime:' + maxTime + ' doTaskTime:' + doTaskTime); 10 | 11 | var failedCount = 0; 12 | while ((new Date().getTime() - appStartTime) < maxTime) { 13 | scroll('up', {distance: Math.random()*0.05+0.95, duration: parseInt(Math.random()*200+300), afterWait: 1000}); 14 | if (prob(30)) { 15 | scroll('up', {distance: Math.random()*0.05+0.95, duration: parseInt(Math.random()*200+300), afterWait: 1000}); 16 | } 17 | console.log('滚动'); 18 | 19 | var doIndex = 1; 20 | while (true) { 21 | console.log('开始阅读了'); 22 | var ret = findView('id:com.baidu.searchbox.lite:id/c8', {failed: exitPopup}); 23 | if (ret.length <= 0) { 24 | console.log('没有找到容器'); 25 | back(); 26 | failedCount+=1; 27 | refresh(); 28 | switchPage('txt:百度', 'txt:推荐', {click:true, failed: exitPopup}); 29 | break; 30 | } else { 31 | console.log('找到容器了'); 32 | container = ret.views[0]; 33 | failedCount = 0; 34 | } 35 | 36 | var doCount = container.size - 1; 37 | 38 | console.log('doIndex:' + doIndex + ' doCount:' + doCount + ' size:' + container.size); 39 | if (doIndex >= doCount) { 40 | console.log('过大了--'); 41 | break; 42 | } 43 | 44 | var needBackFirst = true; 45 | var child = container[doIndex]; 46 | if (child) { 47 | ret = findView('txt:广告|id:com.baidu.searchbox.lite:id/aoh', {root: child}); 48 | if (ret.length > 0 && ret.tag == '广告') { 49 | console.log('是广告 跳过 id:' + child.id); 50 | needBackFirst = false; 51 | } else { 52 | var videoTime = 0; 53 | if (ret.length > 0) { 54 | // 视频 55 | videoTime = parseTime(ret.views[0].text); 56 | console.log('视频changdu:' + ret.views[0].text + ' time:' + videoTime); 57 | } 58 | click(child, {afterWait: 3000}); 59 | var ret = findView('id:com.baidu.searchbox.lite:id/dxg', {failed:exitPopup}); 60 | if (ret.length > 0) { 61 | if (rsCurWindowClassName == 'com.baidu.searchbox.feed.news.FeedDetailActivity') { 62 | var index = 0, scrollCount = parseInt(Math.random()*4+6); 63 | console.log('进入新闻 scrollCount:' + scrollCount); 64 | while (index < scrollCount) { 65 | scroll('up', {distance: Math.random()*0.25+0.1, duration: parseInt(Math.random()*200+300), afterWait: parseInt(Math.random()*1500+1000)}); 66 | ret = findView('cn:android.webkit.WebView', {failed: exitPopup}); 67 | if (ret.length > 0) { 68 | var fullTextView = findView('txt:不喜欢'); 69 | if (fullTextView.length > 0) { 70 | console.log('阅读到结尾了'); 71 | break; 72 | } 73 | } else { 74 | console.log('没有找到webview'); 75 | break; 76 | } 77 | 78 | index += 1; 79 | } 80 | 81 | } else if (rsCurWindowClassName == 'com.baidu.searchbox.video.feedflow.VideoFlowActivity') { 82 | console.log('进入视频'); 83 | var maxVideoTime = parseInt((Math.random()*0.3 + 0.4) * 60000), videoStartTime = new Date().getTime(); 84 | console.log('video time:' + (maxVideoTime / 1000)); 85 | if (maxVideoTime > maxTime * 1000) { 86 | maxVideoTime = maxTime * 1000; 87 | } 88 | while((new Date().getTime() - videoStartTime) < maxVideoTime) { 89 | var ret = findView('txt:上滑看更多视频|txt:视频播放结束', {failed:exitPopup, maxStep:1}); 90 | if (ret.length > 0) { 91 | console.log('播放完成'); 92 | break; 93 | } 94 | 95 | sleep(500); 96 | } 97 | } 98 | } else { 99 | console.log('进入其他页面,退出:' + rsCurWindowClassName); 100 | } 101 | } 102 | } else { 103 | console.log('item is null'); 104 | break; 105 | } 106 | 107 | back2Page('txt:我的|id:android:id/tabs', {failed: exitPopup, backFirst: needBackFirst}); 108 | 109 | if (new Date().getTime() - appStartTime >= doTaskTime) { 110 | console.log('start do task'); 111 | doTask(); 112 | doTaskTime = 99999999; 113 | } 114 | 115 | doIndex += 1; 116 | if (prob(60)) { 117 | doIndex += 1; 118 | if (prob(30)) { 119 | doIndex += 1; 120 | } 121 | } 122 | } 123 | 124 | if (failedCount > 3) { 125 | console.log('失败,找不到容器,所以退出'); 126 | break; 127 | } 128 | } 129 | 130 | console.log('finish run time:' + (new Date().getTime() - appStartTime)); 131 | } 132 | 133 | exitAppDeal(); 134 | console.log('end'); 135 | } 136 | 137 | function parseTime(str) { 138 | var arr = str.split(':'); 139 | if (arr.length == 2) { 140 | return parseInt(arr[0]) * 60 + parseInt(arr[1]); 141 | } 142 | return 0; 143 | } 144 | 145 | function doTask() { 146 | var ret = switchPage('id:com.baidu.searchbox.lite:id/a0j', 'txt:现金收益', {click:true, failed:exitPopup}); 147 | if (ret.length > 0) { 148 | console.log('进入任务'); 149 | 150 | // withdraw(); 151 | 152 | var target = 'txt:立即签到|txt:领取|txt:开心收下|txt^:观看视频再得|txt:提醒我领钱|txt:开宝箱得金币|txt:马上领取|txt$:完成今日任务'; 153 | ret = findView(target, {failed: exitPopup}); 154 | var index = 0; 155 | while (ret.length > 0 && index < 10) { 156 | console.log('找到任务:' + ret.tag + ' target:' + target); 157 | if (ret.tag == '提醒我领钱') { 158 | var root = ret.views[0].parent.parent.parent; 159 | for (var item of root) { 160 | if (item.clickable) { 161 | click(item, {click: true, afterWait: 1000}); 162 | break; 163 | } 164 | } 165 | target = target.replace('txt:提醒我领钱|', ''); 166 | } else if (ret.tag == '完成今日任务') { 167 | for (var item of ret.views[0].parent.parent) { 168 | if (item.clickable) { 169 | click(item, {click: true}); 170 | break; 171 | } 172 | } 173 | } else { 174 | if (ret.tag == '开宝箱得金币' || ret.tag == '立即签到' || ret.tag == '领取') { 175 | target = target.replace('txt:' + ret.tag + '|', ''); 176 | } 177 | 178 | click(ret.views[0], {afterWait: 1000}); 179 | click(ret.views[0], {click: true, afterWait: 3000}); 180 | } 181 | 182 | ret = findView(target, {failed: exitPopup}); 183 | ++index; 184 | } 185 | 186 | withdraw(); 187 | 188 | console.log('scroll'); 189 | scroll('up', {distance: Math.random() * 0.1 + 0.6, duration: parseInt(Math.random()*200+300), afterWait:1000}); 190 | 191 | ret = findView('txt:看广告赚钱', {failed: exitPopup}); 192 | index = 0; 193 | while (ret.length > 0 && index < 10) { 194 | var find = false; 195 | if (ret.tag == '开心收下') { 196 | find = true; 197 | click(item, {click: true, afterWait: 1000}); 198 | } else { 199 | for (var item of ret.views[0].parent) { 200 | if (item.clickable) { 201 | if (item.length == 2 && item[0].text == '去完成') { 202 | find = true; 203 | click(item, {click: true, afterWait: 3000}); 204 | } 205 | break; 206 | } 207 | } 208 | } 209 | 210 | if (find) { 211 | ret = findView('txt:看广告赚钱|txt:开心收下', {failed: exitPopup}); 212 | } else { 213 | break; 214 | } 215 | 216 | ++index; 217 | } 218 | 219 | console.log('离开看广告了'); 220 | // back2Page('id:cn.youth.news:id/a0w', {failed:exitPopup}); 221 | // 222 | scroll('down', {distance: Math.random()*0.1 + 0.9, duration: parseInt(Math.random()*200 + 300), afterWait:1000}); 223 | } else { 224 | console.log('进入任务失败'); 225 | } 226 | 227 | // 切换到首页 228 | switchPage('txt:百度', 'txt:推荐', {click: true, failed: exitPopup}); 229 | } 230 | 231 | function withdraw() { 232 | var __day needWithdraw = true; 233 | if (needWithdraw) { 234 | console.log('准备提现'); 235 | var ret = switchPage('txt^:元', 'txt:去提现'); 236 | if (ret.length > 0) { 237 | console.log('11'); 238 | var ret = switchPage('txt:去提现', 'txt^:总金额'); 239 | if (ret.length > 0) { 240 | console.log('22:' + ret.views[0].parent.parent[1].text); 241 | var money = parseFloat(ret.views[0].parent.parent[1].text); 242 | console.log('money:' + money); 243 | if (money >= 0.6) { 244 | ret = findView('txt:快速提现'); 245 | if (ret.length > 0) { 246 | console.log('33'); 247 | 248 | var index = 0; 249 | var curIndex = -1; 250 | for (var item of ret.views[0].parent.parent) { 251 | if (item.size == 1) { 252 | var txt = ''; 253 | if (item[0].size == 0) { 254 | txt = item[0].text; 255 | } else { 256 | txt = item[0][0].text; 257 | } 258 | var arr = txt.fetchNumber(); 259 | if (arr.length == 1) { 260 | console.log('find :' + arr[0]); 261 | if (arr[0] <= money && arr[0] <= 1) { 262 | curIndex = index; 263 | } else { 264 | break; 265 | } 266 | } 267 | } 268 | ++index; 269 | } 270 | 271 | if (curIndex > -1) { 272 | click(ret.views[0].parent.parent[curIndex], {afterWait: 2000}); 273 | ret = findView('txt:提现到微信'); 274 | if (ret.length > 0) { 275 | click(ret.views[0], {click: true, afterWait: 3000}); 276 | needWithdraw = false; 277 | } else { 278 | console.error('找不到提现到微信'); 279 | } 280 | } else { 281 | console.error('没找到合适的价格'); 282 | } 283 | } 284 | } 285 | } else { 286 | console.error('总金额失败'); 287 | } 288 | 289 | back2Page('txt:我的|id:android:id/tabs'); 290 | } else { 291 | console.error('进入提现失败'); 292 | } 293 | } 294 | } 295 | 296 | function checkEnterAD() { 297 | if ('com.baidu.searchbox.ad.lp.reward.AdVideoRewardActivity'.includes(rsCurWindowClassName)) { 298 | return true; 299 | } 300 | return false; 301 | } 302 | 303 | function dealAD() { 304 | if (checkEnterAD()) { 305 | console.log('enter ad'); 306 | var startTime = new Date().getTime(); 307 | 308 | if (rsCurWindowClassName == 'com.baidu.searchbox.lightbrowser.ImmerseBrowserActivity') { 309 | while (new Date().getTime() - startTime < 30000) { 310 | var ret = findView('txt:恭喜已得金币|', {maxStep:1}); 311 | if (ret.length > 0) { 312 | back2Page('txt:我的|id:android:id/tabs', {failed: exitPopup}); 313 | break; 314 | } 315 | } 316 | } else if (rsCurWindowClassName == 'com.baidu.searchbox.ad.lp.reward.AdVideoRewardActivity') { 317 | // id:com.baidu.searchbox.lite:id/progress_bar 318 | 319 | sleep(18000); 320 | var ret = findView('id:com.baidu.searchbox.lite:id/mk'); 321 | if (ret.length > 0) { 322 | for (var item of ret.views[0]) { 323 | if (item.className == 'android.widget.ImageView' && item.clickable) { 324 | click(item, {click: true}); 325 | break; 326 | } 327 | } 328 | } 329 | } 330 | 331 | console.log('退出了广告'); 332 | return true; 333 | } 334 | } 335 | 336 | function exitPopup() { 337 | var ret = findView('txt^:百度极速版将使用|txt:去看看别的任务|txt:今日任务已完成,明天再来吧~|txt:忽略|txt:开心收下|txt:下次再说|txt:继续赚钱|txt^:再看一个领取', {maxStep: 1}); 338 | if (ret.length > 0) { 339 | console.log('找到:' + ret.tag); 340 | if (ret.tag == '百度极速版将使用') { 341 | clickByTag('txt:关闭', {click: true}); 342 | } else if (ret.tag == '今日任务已完成,明天再来吧~' || ret.tag == '去看看别的任务') { 343 | back({afterWait: 2000}); 344 | } else { 345 | click(ret.views[0], {click: true, afterWait: 3000}); 346 | } 347 | return true; 348 | } 349 | 350 | ret = findView('txt^:看视频领|txt^:看视频翻|txt^:看视频再赚|txt:知道了', {maxStep: 1}); 351 | if (ret.length > 0) { 352 | console.log('找到:' + ret.tag); 353 | click(ret.views[0], {click:true, afterWait:4000}); 354 | return true; 355 | } 356 | 357 | ret = findView('id^:com.android.contacts:id', {maxStep: 1}); 358 | if (ret.length > 0) { 359 | console.log('contact'); 360 | refresh(); 361 | return true; 362 | } 363 | 364 | if (!globalExitPopup()) { 365 | return dealAD(); 366 | } 367 | 368 | return false; 369 | } 370 | 371 | function cbWindowChange(textList, className, packageName, event) { 372 | if (className=='com.bytedance.sdk.openadsdk.core.widget.a') { 373 | console.log('放弃奖励---'); 374 | clickByTag('txt:放弃奖励', {click:true}); 375 | } else if(className=='com.baidu.mobads.AppActivity') { 376 | console.log('为您推荐---'); 377 | 378 | var ret = findView('txt:为您推荐'); 379 | if (ret.length > 0) { 380 | click(ret.views[0].parent[0], {click:true}); 381 | } 382 | } else if(className=='android.app.Dialog' || className=='com.xiaomi.market.ui.detail.AppDetailActivityInner' || className=='cn.youth.news.ui.homearticle.dialog.HomePromptDialog' || className=='android.app.AlertDialog' || className=='cn.youth.news.ui.homearticle.dialog.VideoDetailsEnterDialog' || className=='cn.youth.news.ui.homearticle.dialog.HomePushDialog' || className=='cn.youth.news.ui.homearticle.dialog.HomeTaskCenter7DayBottomDialog') { 383 | console.log('跳过---'); 384 | back({beforeWait:1000}); 385 | } else if(className=='cn.youth.news.ui.splash.SplashAdActivity') { 386 | console.log('跳过广告---'); 387 | clickByTag('id:cn.youth.news:id/tt_splash_skip_btn', {click:true}); 388 | } else if(className=='com.tencent.mm.plugin.webview.ui.tools.SDKOAuthUI') { 389 | console.log('同意微信登录---'); 390 | clickByTag('txt:同意'); 391 | } else { 392 | return false; 393 | } 394 | return true; 395 | } 396 | 397 | function cbNotification(textList, className, packageName, event) { 398 | console.log('Notification textList:' + textList + ' className:' + className + ' packageName:' + packageName); 399 | for (var item of textList) { 400 | if (item.includes('您的验证码为')) { 401 | console.log('进入通知处理:' + item); 402 | var subText = item.substring(item.indexOf('验证码为') + '验证码为'.length, item.indexOf(',')); 403 | console.log('验证码为:' + subText); 404 | pasteById('cn.youth.news:id/i4', subText.substring(0, 1), {afterWait:1000}); 405 | pasteById('cn.youth.news:id/i5', subText.substring(1, 2), {afterWait:1000}); 406 | pasteById('cn.youth.news:id/i6', subText.substring(2, 3), {afterWait:1000}); 407 | pasteById('cn.youth.news:id/i7', subText.substring(3, 4), {afterWait:1000}); 408 | return true; 409 | } 410 | } 411 | return false; 412 | } 413 | -------------------------------------------------------------------------------- /映客直播薅羊毛: -------------------------------------------------------------------------------- 1 | var sShouldExit = false; 2 | var sPreADTimeout = false; 3 | 4 | function main() { 5 | var ret = launchApp('com.ingkee.lite', 'id:com.ingkee.lite:id/c61', {failed: skipAD, maxStep: 30}); 6 | if (ret.length <= 0) { 7 | console.log('找不到容器,退出'); 8 | return; 9 | } 10 | 11 | doTask(); 12 | 13 | ret = smartFindView('id:com.ingkee.lite:id/b0p', {flag: 'find_all', failed: exitPopup}); 14 | if (ret.length > 0) { 15 | var index = parseInt(Math.random()*ret.views.length); 16 | click(ret.views[index], {click: true, afterWait: 6000}); 17 | if (rsCurWindowClassName=='com.meelive.ingkee.business.room.ui.activity.RoomActivity') { 18 | console.log('进入直播间'); 19 | var index = 0, zbCount = 2; 20 | while (index < zbCount) { 21 | var sTime = new Date().getTime(), maxTime = parseInt(Math.random()*20000+50000); 22 | while (new Date().getTime() - sTime < maxTime) { 23 | ret = smartFindView('txt:赚钱任务|txt:直播已结束'); 24 | if (ret.length <= 0) { 25 | console.log('没找到赚钱任务,换一个'); 26 | break; 27 | } 28 | } 29 | 30 | scroll('up', {distance: Math.random()*0.05+0.95, duration: parseInt(Math.random()*300+300)}); 31 | ++index; 32 | } 33 | 34 | back(); 35 | console.log('离开直播间'); 36 | } else { 37 | console.log('进入直播间失败'); 38 | } 39 | } 40 | 41 | doTask(); 42 | 43 | console.log('finish'); 44 | 45 | exitAppDeal(); 46 | console.log('end'); 47 | } 48 | 49 | function skipAD() { 50 | var ret = findView('id:com.dragon.read:id/ari', {maxStep: 1}); 51 | if (ret.length > 0) { 52 | back({afterWait: 2000}); 53 | return; 54 | } 55 | 56 | exitPopup(); 57 | } 58 | 59 | function doTask() { 60 | console.log('start task'); 61 | var ret = switchPage('id:com.ingkee.lite:id/amy', 'txt:来赚钱', {maxStep:10, failed: exitPopup}); 62 | if (ret.length > 0) { 63 | console.log('进入 task'); 64 | // withdraw(); 65 | 66 | var __day dNeedShare = true; 67 | var __day dNeedCheckIn = true; 68 | var target = 'id:sign-btn|txt:去分享|id:can-open-box|txt:领金币|txt:服务器开小差了,请稍后再试'; 69 | if (dNeedShare) { 70 | target += 'txt:分享映客极速版|'; 71 | } 72 | if (dNeedCheckIn) { 73 | target += 'txt:签到领金币|'; 74 | } 75 | var count = 0, scrollCount = 0; 76 | 77 | while (scrollCount <=3 && target != '' && count < 20) { 78 | ret = smartFindView(target, {flag:'traverse_invisible', failed: exitPopup}); 79 | console.log('target:' + target); 80 | 81 | if (ret.length <= 0) { 82 | console.log('not find dNeedShare:' + dNeedShare + ' dNeedCheckIn:' + dNeedCheckIn); 83 | if (dNeedShare || dNeedCheckIn) { 84 | scroll('up', {distance: 0.9, afterWait: 2000}); 85 | } else { 86 | console.log('不需要scroll,直接退出'); 87 | break; 88 | } 89 | ++scrollCount; 90 | } else { 91 | console.log('tag:' + ret.tag); 92 | if (ret.tag == 'can-open-box') { 93 | click(ret.views[0], {afterWait: 4000}); 94 | } else if (ret.tag == '领金币') { 95 | if (ret.views[0].top 0) { 118 | click(ret.views[0], {afterWait: 1000}); 119 | click(ret.views[0], {click: true, afterWait: 1000}); 120 | console.log('签到成功'); 121 | } else { 122 | console.log('签到失败'); 123 | } 124 | } else { 125 | dNeedCheckIn = false; 126 | } 127 | target = target.replace('txt:签到领金币|', ''); 128 | } else if (ret.tag == '去分享') { 129 | gestureClick(sScreenWidth/2, 200, {afterWait:2000}); 130 | } else if (ret.tag == '服务器开小差了,请稍后再试') { 131 | clickByTag('txt:确定', {afterWait:2000}); 132 | } else if (ret.tag == '立即签到') { 133 | click(ret.views[0], {click: true}); 134 | } 135 | 136 | ++count; 137 | } 138 | } 139 | 140 | back2Page('txt:推荐', {failed: exitPopup}); 141 | console.log('任务结束'); 142 | } else { 143 | console.log('进入任务失败'); 144 | } 145 | } 146 | 147 | function share() { 148 | switchPage('txt:朋友圈', 'txt:发表', {click: true, failed: exitPopup}); 149 | back2Page('txt:来赚钱', {failed: exitPopup}); 150 | } 151 | 152 | function checkEnterAD() { 153 | if ('com.meelive.ingkee.adcomponent.impl.dialog.NativeAdDialog|com.sigmob.sdk.base.common.AdActivity|com.bytedance.sdk.openadsdk.activity.base.TTPlayableWebPageActivity|com.bytedance.sdk.openadsdk.activity.base.TTWebPageActivity|com.qq.e.ads.PortraitADActivity|com.qq.e.ads.RewardvideoPortraitADActivity|com.bytedance.sdk.openadsdk.activity.base.TTRewardExpressVideoActivity|com.miui.zeus.mimo.sdk.ad.reward.RewardVideoAdActivity'.includes(rsCurWindowClassName)) { 154 | return true; 155 | } 156 | var ret = findView('txt*:后发放|腾讯社交联盟广告|txt^:奖励将于|txt*:获得奖励|txt$:后可领取奖励|txt$:后可领取金币|txt$:后可领金币|id:com.ingkee.lite/video_view|id:com.ingkee.lite:id/mimo_reward_root_view|id:com.ingkee.lite:id/tt_reward_root', {maxStep:1}); 157 | if (ret.length > 0) { 158 | console.log('force enter :' + ret.tag); 159 | return true; 160 | } 161 | 162 | ret = findView('关闭广告|txt^:奖励将于|txt*:获得奖励|txt$:后可领取奖励|txt$:后可领取金币|txt$:后可领金币', {maxStep: 1}); 163 | if (ret.length > 0) { 164 | if (!ret.views[0].text.includes('浏览分类') && !ret.views[0].text.includes('完成阅读')) { 165 | console.log('force enter:' + ret.tag); 166 | return true; 167 | } 168 | } 169 | return false; 170 | } 171 | 172 | function dealAD() { 173 | if (checkEnterAD()) { 174 | console.log('enter ad'); 175 | sleep(3000); 176 | var isFindClose = false; 177 | var startTime = new Date().getTime(); 178 | while (new Date().getTime() - startTime < 60000) { 179 | var ret = findView('txt:来赚钱|txt:赚更多金币|txt:恭喜获得|txt:天天领红包|txt:继续赚钱|txt:提现|id:com.ingkee.lite:id/brj', {flag:'traverse_invisible', maxStep:1}); 180 | if (ret.length > 0) { 181 | console.log('找到标记,说明没有进入广告:' + ret.tag); 182 | if (ret.tag == '赚更多金币') { 183 | back(); 184 | } 185 | break; 186 | } 187 | 188 | ret = findView('txt^:参与互动|txt^:浏览页面|txt:放弃奖励|txt:继续浏览|txt^:完成观看|txt:恭喜获得奖励', {maxStep: 1}); 189 | if (ret.length > 0) { 190 | console.log('tag:' + ret.tag); 191 | if (ret.views[0].text.includes('浏览页面')) { 192 | if (ret.views[0].text.includes('领取奖励')) { 193 | click(ret.views[0]); 194 | } 195 | } else if (ret.tag = '完成观看') { 196 | clickByTag('id:com.ingkee.lite:id/gh'); 197 | } else if (ret.tag = '恭喜获得奖励') { 198 | sleep(2000); 199 | var find = false; 200 | for (var item of ret.views[0].parent) { 201 | if (item.clickable) { 202 | click(item, {click: true}); 203 | find = true; 204 | break; 205 | } 206 | } 207 | 208 | if (!find) { 209 | back(); 210 | } 211 | break; 212 | } else { 213 | click(ret.views[0]); 214 | } 215 | } 216 | 217 | ret = findView('cn:android.widget.ImageView', {flag:'find_all', maxStep:1}); 218 | if (ret.length > 0) { 219 | for (var item of ret.views) { 220 | if (!item.clickable) { 221 | if (item.width == item.height && item.width > 10 * rsDensity && item.width < 20 * rsDensity && item.left > 8 * rsScreenWidth / 9 && item.top < 25 * rsDensity) { 222 | click(item); 223 | break; 224 | } 225 | } else { 226 | if (item.width == item.height) { 227 | if (item.width>25*rsDensity && item.width<45*rsDensity) { 228 | if ((item.left<25*rsDensity) &&(item.top<75*rsDensity)) { 229 | click(item); 230 | break; 231 | } else if (item.parent.size==2) { 232 | click(item); 233 | break; 234 | } 235 | } 236 | } else { 237 | if ((item.right>rsScreenWidth-40) && (item.parent.size==4) && (item.width<35*rsDensity) && (item.height<40*rsDensity)) { 238 | click(item); 239 | break; 240 | } 241 | } 242 | } 243 | } 244 | } 245 | 246 | ret = findView('cn:android.view.View', {flag:'clickable|find_all', maxStep: 1}); 247 | if (ret.length > 0) { 248 | for (var item of ret.views) { 249 | if (item.parent && item.parent.parent && (item.parent.parent.size==2) && (item.width<35*rsDensity)&& (item.height<45*rsDensity) &&(item.left<25*rsDensity) &&(item.top<40*rsDensity)) { 250 | console.log('find 左上角箭头'); 251 | click(item, {click: true}); 252 | } 253 | } 254 | } 255 | 256 | 257 | ret = findView('id:com.ingkee.lite:id/mimo_reward_close_img|id:com.ingkee.lite:id/img_close|id:com.ingkee.lite:id/tt_video_ad_close_layout|id:com.ingkee.lite:id/tt_titlebar_back', {maxStep: 1}); 258 | if (ret.length > 0) { 259 | console.log('找到右上角x'); 260 | click(ret.views[0], {click: true}); 261 | } 262 | 263 | globalDealAD(); 264 | } 265 | 266 | if (new Date().getTime() - startTime >= 60000) { 267 | console.log('timeout'); 268 | if (checkEnterAD() && sPreADTimeout) { 269 | back(); 270 | console.log('网络太差卡住了'); 271 | sShouldExit = true; 272 | } 273 | 274 | back(); 275 | refresh(); 276 | sPreADTimeout = true; 277 | } else { 278 | sPreADTimeout = false; 279 | 280 | if (new Date().getTime() - startTime < 10000) { 281 | if (checkEnterAD()) { 282 | console.log('广告时间太短,说明很有可能是广告的windowClass没有变更'); 283 | refresh(); 284 | } 285 | } 286 | } 287 | 288 | console.log('退出广告'); 289 | return true; 290 | } 291 | } 292 | 293 | function skipAD() { 294 | var ret = findView('txt*:跳过', {maxStep: 1}); 295 | if (ret.length > 0) { 296 | click(ret.views[0], {click: true}); 297 | return true; 298 | } 299 | 300 | exitPopup(); 301 | } 302 | 303 | function exitPopup() { 304 | if (sShouldExit) { 305 | return; 306 | } 307 | 308 | var ret = findView('txt:我知道了|txt:去点金豆赚钱|txt:关注并回戳|txt:继续浏览|txt:看视频金币翻倍|txt*:完成观看|txt:网页无法打开|txt:恭喜获得奖励', {maxStep:1}); 309 | if (ret.length > 0) { 310 | console.log('text:' + ret.tag + ' phoneNumber:' + rsPhoneNumber); 311 | if (ret.tag == '我知道了' || ret.tag == '去点金豆赚钱' || ret.tag == '关注并回戳' || ret.tag == '继续浏览' || ret.tag == '看视频金币翻倍') { 312 | click(ret.views[0], {click: true, afterWait: 2000}); 313 | } else if (ret.tag == '完成观看') { 314 | clickByTag('id:com.ingkee.lite:id/gj', {click: true}); 315 | } else if (ret.tag == '网页无法打开' || ret.tag == '恭喜获得奖励') { 316 | back({afterWait: 2000}); 317 | } else { 318 | click(ret.views[0]); 319 | } 320 | return true; 321 | } 322 | 323 | 324 | ret = findView('cn:android.widget.ImageView|cn:android.widget.Image', {flag:'clickable|find_all', maxStep: 1}); 325 | if (ret.length > 0) { 326 | if (ret.tag == 'android.widget.ImageView') { 327 | for (var item of ret.views) { 328 | if (item.width==item.height && item.height<=45*rsDensity && item.height>=25*rsDensity && item.top<50*rsDensity && item.parent.size==2) { 329 | click(item, {click: true}); 330 | return true; 331 | } 332 | } 333 | } else { 334 | for (var item of ret.views) { 335 | if ((item.parent.size==3) && (item.width>300*rsDensity)) { 336 | var ok = true; 337 | for (var child of item.parent) { 338 | if (!child.clickable) { 339 | ok = false; 340 | } 341 | } 342 | if (ok) { 343 | console.log('找到垃圾的一比弹出框,点击右上角的x'); 344 | gestureClick(item.right-25*rsDensity, item.top+25*rsDensity); 345 | return true; 346 | } 347 | } 348 | } 349 | } 350 | } 351 | 352 | ret = findView('id:com.ingkee.lite:id/tt_bu_close|id:com.ingkee.lite:id/tt_insert_dislike_icon_img|id:com.ingkee.lite:id/brj|id:com.miui.contentcatcher:id/user_suggestion_item', {maxStep: 1}); 353 | if (ret.length > 0) { 354 | console.log('tag:' + ret.tag); 355 | if (ret.tag == 'com.miui.contentcatcher:id/user_suggestion_item') { 356 | console.log('第二认证了'); 357 | click(ret.views[0].parent); 358 | ret = findView('txt:认证'); 359 | if (ret.length > 0) { 360 | console.log('点击认证'); 361 | click(ret.views[0]); 362 | } else { 363 | console.log('找不到输入验证码的框'); 364 | } 365 | } else if (ret.tag == 'com.ingkee.lite:id/brj') { 366 | var t = findView('txt:看视频金币翻倍'); 367 | if (t.length > 0) { 368 | click(t.views[0], {click: true, afterWait: 4000}); 369 | } else { 370 | click(ret.views[0], {click: true}); 371 | } 372 | } else { 373 | click(ret.views[0], {click: true}); 374 | } 375 | return true; 376 | } 377 | 378 | ret = findView('txt:微信登录|txt:仅在使用中允许|txt:始终允许|txt:个人信息保护指引|txt:你的微信头像、昵称、地区和性别信息|txt:设置独特的身份', {maxStep: 1}); 379 | if (ret.length > 0) { 380 | console.log('tag:' + ret.tag); 381 | if (ret.tag == '个人信息保护指引' || ret.tag =='你的微信头像、昵称、地区和性别信息') { 382 | clickByTag('txt:同意', {click: true}); 383 | } else if (ret.tag == '微信登录') { 384 | clickByTag('id:com.ingkee.lite:id/bin', {click: true, afterWait: 500}); 385 | click(ret.views[0], {click: true}); 386 | } else if (ret.tag == '设置独特的身份') { 387 | if (prob(50)) { 388 | clickByTag('id:com.ingkee.lite:id/bxj', {click: true}); 389 | } else { 390 | clickByTag('id:com.ingkee.lite:id/bxi', {click: true}); 391 | } 392 | clickByTag('txt:确定', {click: true}); 393 | } else { 394 | click(ret.views[0], {click: true}); 395 | } 396 | return true; 397 | } 398 | 399 | if (!globalExitPopup()) { 400 | return dealAD(); 401 | } 402 | 403 | return false; 404 | } 405 | 406 | function cbWindowChange(textList, className, packageName, event) { 407 | if ('com.meelive.ingkee.adcomponent.impl.dialog.CustomNativeAdPage|com.meelive.ingkee.webkit.ui.InKeWebDialog|com.meelive.ingkee.adcomponent.impl.thaw_concurrency.HallGiftBoxDialog|com.meelive.ingkee.business.room.poke.PokeCallBackDialog'.includes(className)) { 408 | back(); 409 | } else if(className=='com.bytedance.news.components.ug.push.permission.c.f' || className=='com.ss.android.newmedia.activity.browser.BrowserActivity' || className=='com.ss.android.article.a.b.a') { 410 | back({beforeWait: 1000}); 411 | } else if(className=='com.meelive.ingkee.business.me.dialog.MineUploadInfoDialog') { 412 | clickByTag('txt:狠心离开', {click: true, beforeWait: 1000}); 413 | } else { 414 | return false; 415 | } 416 | return true; 417 | } 418 | 419 | function cbNotification(textList, className, packageName, event) { 420 | console.log('Notification textList:' + textList + ' className:' + className + ' packageName:' + packageName); 421 | for (var item of textList) { 422 | if (item.includes('验证码')) { 423 | console.log('进入通知处理:' + item); 424 | var arr = item.fetchInteger(); 425 | if (arr.length > 0) { 426 | var subText = arr[0] + ''; 427 | console.log('验证码为:' + subText); 428 | var ret = findView('txt:请输入验证码'); 429 | if (ret.length > 0) { 430 | paste(ret.views[0], subText, {afterWait: 1000}); 431 | clickByTag('txt:认证', {click: true}); 432 | } else { 433 | console.log('找不到输入验证码的框'); 434 | } 435 | return true; 436 | } 437 | } 438 | } 439 | return false; 440 | } 441 | 442 | -------------------------------------------------------------------------------- /趣看天下自动阅读、看视频、做任务: -------------------------------------------------------------------------------- 1 | 2 | import 'sys_'+getManufacturer()+'_runtime'; 3 | 4 | var sShouldExit = false, sPreADTimeout = false, sContainer; 5 | 6 | function main() { 7 | return; 8 | if (!smartLaunchApp('com.yanhui.qktx', false, false, 0)) { 9 | console.error('启动app失败'); 10 | return; 11 | } 12 | 13 | var ret = waitAppLaunched('id:com.yanhui.qktx:id/news_recycler', {failed: skipAD, maxStep: 30, beforeWait: 3000}); 14 | if (ret.length <= 0) { 15 | console.log('找不到容器'); 16 | return; 17 | } else { 18 | sContainer = ret.views[0]; 19 | } 20 | 21 | var appStartTime = new Date().getTime(); 22 | // ret = switchPage('txt:我的', 'txt:我的金币', {filed: exitPopup, click: true}); 23 | // if (ret.length > 0) { 24 | // 25 | // } 26 | ret = switchPage('txt:首页', 'txt:热点', {failed: exitPopup, descendant: [-1]}); 27 | if (ret.length <= 0) { 28 | console.log('进入首页失败'); 29 | return; 30 | } 31 | 32 | clickByTag('txt:首页', {click: true}); 33 | 34 | var failedCount = 0, maxTime = parseInt((Math.random()*5+8)*60000), doTaskTime = parseInt((Math.random()*5+1)*60000); 35 | while (new Date().getTime() - appStartTime < maxTime && failedCount < 3) { 36 | scroll('up', {distance: Math.random()*0.05 + 0.95, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 37 | if (prob(50)) { 38 | scroll('up', {distance: Math.random()*0.05 + 0.95, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 39 | } 40 | if (prob(30)) { 41 | scroll('up', {distance: Math.random()*0.05 + 0.95, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 42 | } 43 | 44 | var doIndex = 1; 45 | while (!sShouldExit) { 46 | var ret = smartFindView('id:com.yanhui.qktx:id/news_recycler', {failed: readExitPopup}); 47 | if (ret.length <= 0) { 48 | console.log('找不到容器'); 49 | back(); 50 | refresh(); 51 | switchPage('txt:首页', 'txt:热点', {failed: exitPopup, descendant: [-1]}); 52 | failedCount++; 53 | break; 54 | } else { 55 | failedCount = 0; 56 | sContainer = ret.views[0]; 57 | } 58 | 59 | var doCount = sContainer.length - 1; 60 | if (doIndex >= doCount) { 61 | break; 62 | } 63 | 64 | var needBackFirst = true, child = sContainer[doIndex]; 65 | if (child) { 66 | ret = smartFindView('txt:广告', {root: child, failed: readExitPopup, maxStep: 2}); 67 | if (ret.length > 0) { 68 | console.log('广告,跳过'); 69 | needBackFirst = false; 70 | } else { 71 | click(child); 72 | ret = smartFindView('id:com.yanhui.qktx:id/linear_loading_view|id:com.yanhui.qktx:id/video', {failed: readExitPopup}); 73 | if (ret.length > 0) { 74 | if (ret.tag == 'com.yanhui.qktx:id/linear_loading_view') { 75 | // 新闻 76 | var maxHeight = 0, index = 0, scrollCount = parseInt(Math.random()*4+6); 77 | if (prob(10)) { 78 | scrollCount = 14; 79 | } 80 | 81 | while (index < scrollCount) { 82 | scroll('up', {distance: Math.random()*0.3 + 0.5, duration: parseInt(Math.random()*200 + 200), afterWait: parseInt(Math.random()*500)}); 83 | 84 | ret = smartFindView('id:com.yanhui.qktx:id/netset_scroll_view', {failed: readExitPopup}); 85 | if (ret.length > 0) { 86 | var container = ret.views[0]; 87 | if (container.height < maxHeight) { 88 | ret = findView('id:com.yanhui.qktx:id/iv_unfold_reading'); 89 | if (ret.length <= 0) { 90 | break; 91 | } else { 92 | console.log('点击 查看更多---'); 93 | click(ret.views[0], {click: true, afterWait: 1000}); 94 | } 95 | } else { 96 | maxHeight = container.height; 97 | } 98 | 99 | ret = smartFindView('txt:看视频领红包', {failed:readExitPopup, maxStep: 1}); 100 | if (ret.length > 0) { 101 | click(ret.views[0], {click: true}); 102 | } 103 | } else { 104 | console.log('没有找到 内容容器'); 105 | } 106 | 107 | ++index; 108 | } 109 | 110 | if (prob(20)) { 111 | shareArticle(); 112 | } 113 | } else { 114 | // 视频 115 | var videoStartTime = new Date().getTime(), maxVideoTime = parseInt((Math.random()*0.3+0.4)*60000); 116 | while (new Date().getTime() - videoStartTime < maxVideoTime) { 117 | ret = smartFindView('txt:重播', {failed: readExitPopup, maxStep: 1}); 118 | if (ret.length > 0) { 119 | console.log('视频播放完成'); 120 | break; 121 | } 122 | sleep(500); 123 | } 124 | } 125 | } else { 126 | console.log('进入其他页面,退出:' + rsCurWindowClassName); 127 | } 128 | } 129 | } else { 130 | console.log('item is null'); 131 | break; 132 | } 133 | 134 | back2Page('txt:首页', {failed: readExitPopup, backFirst: needBackFirst}); 135 | 136 | ret = smartFindView('txt^:点击领取|txt:领金币', {failed: readExitPopup, maxStep: 1}); 137 | if (ret.length > 0) { 138 | console.log('tag:' + ret.tag); 139 | click(ret.views[0], {afterWait: 4000}); 140 | } 141 | 142 | ret = smartFindView('id:com.yanhui.qktx:id/tv_time', {failed: readExitPopup, maxStep: 1}); 143 | if (ret.length > 0) { 144 | console.log('tag:' + ret.tag + ' txt:' + ret.views[0].text); 145 | if (!ret.views[0].text.includes(':')) { 146 | click(ret.views[0], {afterWait: 4000}); 147 | } 148 | } 149 | 150 | if (new Date().getTime() - appStartTime >= doTaskTime) { 151 | doTask(); 152 | doTaskTime=99999999; 153 | } 154 | 155 | doIndex++; 156 | if (prob(60)) { 157 | doIndex++; 158 | } 159 | } 160 | } 161 | 162 | exitAppDeal(); 163 | console.log('end'); 164 | } 165 | 166 | function shareArticle() { 167 | var __day dShareCount = 0; 168 | if (dShareCount < 6) { 169 | var ret = smartFindView('id:com.yanhui.qktx:id/img_news_bottom_right_img_share', {failed:readExitPopup}); 170 | if (ret.length > 0) { 171 | click(ret.views[0], {click: true, afterWait: 3000}); 172 | ret = switchPage('txt:微信好友', 'txt*:多选', {click: true, failed: readExitPopup}); 173 | if (ret.length > 0) { 174 | dShareCount++; 175 | back(); 176 | } else { 177 | console.log('没有找到 微信好友'); 178 | } 179 | } else { 180 | console.log('没有找到 分享内容'); 181 | } 182 | } 183 | } 184 | 185 | function doTask() { 186 | console.log('enter task'); 187 | 188 | var ret = switchPage('txt:赚金币', 'txt*:已连续签到', {click: true, failed: exitPopup, maxStep: 8}); 189 | if (ret.length > 0) { 190 | console.log('enter task'); 191 | var __day dNeedWithdraw = true; 192 | 193 | var target = 'txt:立即签到|txt:知道了|txt*:5元直接提|txt*:新手任务|'; 194 | if (dNeedWithdraw) { 195 | target += 'txt:账户余额|'; 196 | } 197 | ret = smartFindView(target, {failed: exitPopup, duration: 500, maxStep: 4, before: noPopup}); 198 | var count = 0; 199 | while (ret.length > 0 && count < 10) { 200 | console.log('tag:' + ret.tag); 201 | if (ret.tag == '5元直接提') { 202 | fiveWithdraw(); 203 | target = target.replace('txt*:5元直接提|', ''); 204 | } else if (ret.tag == '账户余额') { 205 | withdraw(); 206 | } else if (ret.tag == '新手任务') { 207 | freshmanTask(); 208 | target = target.replace('txt*:新手任务|', ''); 209 | } else { 210 | click(ret.views[0], {afterWait: 1000}); 211 | } 212 | 213 | ret = smartFindView(target, {failed: exitPopup, maxStep: 4, before: noPopup}); 214 | ++count; 215 | } 216 | 217 | var __day dWardShare = 0; 218 | if (dWardShare < 6) { 219 | ret = smartFindView('txt*:有奖分享', {failed: exitPopup, maxStep: 3, before: noPopup}); 220 | if (ret.length > 0) { 221 | for (var item of ret.views[0].parent) { 222 | if (item.clickable) { 223 | click(item, {afterWait: 3000}); 224 | console.log('进入有奖分享'); 225 | var tryCount = 0; 226 | ret = smartFindView('txt:立即分享', {failed: exitPopup}); 227 | while (tryCount < 10 && dWardShare < 6 && ret.length > 0) { 228 | click(ret.views[0], {click: true}); 229 | ret = switchPage('txt:微信好友', 'txt:选择|txt:多选', {failed: exitPopup, click: true}); 230 | if (ret.length > 0) { 231 | ++dWardShare; 232 | back2Page('txt:有奖分享', {failed: exitPopup, afterWait: 2000}); 233 | gestureClick(rsScreenWidth/2, rsScreenHeight/2, {afterWait: 1000}); 234 | } 235 | 236 | scroll('up', {distance: 0.99, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 237 | ret = smartFindView('txt:立即分享', {failed: exitPopup}); 238 | ++tryCount; 239 | } 240 | break; 241 | } 242 | } 243 | } else { 244 | console.log('找不到 有奖分享:' + dWardShare); 245 | if (dWardShare >= 3) { 246 | dWardShare = 6; 247 | } 248 | } 249 | } else { 250 | console.log('不需要做有奖分享'); 251 | } 252 | 253 | count = 0; 254 | ret = smartFindView('txt:今日可领|txt:领奖励', {filed: exitPopup, maxStep: 3, before: noPopup}); 255 | while (ret.length > 0 && count < 8) { 256 | console.log('新人任务,今日可领'); 257 | click(ret.views[0], {click: true, afterWait: 2000}); 258 | ret = smartFindView('txt:今日可领|txt:领奖励', {filed: exitPopup, maxStep: 3, before: noPopup}); 259 | ++count; 260 | } 261 | 262 | back2Page('txt:我的', {failed: exitPopup}); 263 | 264 | scroll('up', {distance: 0.99, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 265 | scroll('up', {distance: 0.99, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 266 | scroll('up', {distance: 0.99, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 267 | 268 | ret = switchPage('txt:开宝箱', 'txt:开启宝箱', {click: true, failed: exitPopup}); 269 | if (ret.length > 0) { 270 | click(ret.views[0], {click: true, afterWait: 1000}); 271 | ret = switchPage('txt:分享到微信群赚更多金币', 'txt:选择', {click: true, failed: exitPopup}); 272 | if (ret.length > 0) { 273 | console.log('进入开宝箱'); 274 | back({beforeWait: 2000}); 275 | clickByTag('txt:金币翻倍', {click: true, afterWait: 4000}); 276 | } 277 | } else { 278 | console.log('没找到开宝箱'); 279 | } 280 | 281 | back2Page('txt:我的', {failed: exitPopup}); 282 | 283 | scroll('down', {distance: 0.99, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 284 | scroll('down', {distance: 0.99, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 285 | } else { 286 | console.log('not find 任务'); 287 | } 288 | switchPage('txt:首页', 'txt:热点', {failed: exitPopup, descendant: [-1]}); 289 | console.log('leave task'); 290 | } 291 | 292 | function freshmanTask() { 293 | console.log('找到新手任务'); 294 | scroll('up', {distance: 0.4, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 295 | var count = 0; 296 | var ret = smartFindView('txt:去领取|txt:待领取', {failed: exitPopup, before: noPopup}); 297 | while (ret.length > 0 && count < 4) { 298 | click(ret.views[0], {click: true, afterWait: 2000}); 299 | ret = smartFindView('txt:去领取|txt:待领取', {failed: exitPopup, before: noPopup}); 300 | ++count; 301 | } 302 | } 303 | 304 | function fiveWithdraw() { 305 | console.log('找到5元直接提'); 306 | var ret = smartFindView('txt*:有奖分享', {failed: exitPopup, maxStep: 4, before: noPopup}); 307 | if (ret.length > 0) { 308 | for (var item of ret.views[0].parent) { 309 | if (item.clickable) { 310 | if (item.text == '去完成') { 311 | click(item, {click: true, afterWait: 3000}); 312 | var success = false; 313 | ret = switchPage('txt:立即分享','txt:微信好友', {click: true, maxStep: 8}); 314 | if (ret.length > 0) { 315 | ret = switchPage('txt:微信好友','id:com.tencent.mm:id/hhi', {click: true, maxStep: 8}); 316 | if (ret.length > 0) { 317 | ret = switchPage('id:com.tencent.mm:id/hhi', 'txt:分享', {descendant:[3], click: true, maxStep: 8}); 318 | if (ret.length > 0) { 319 | ret = switchPage('txt:分享', 'txt*:返回', {click: true, maxStep: 8}); 320 | if (ret.length > 0) { 321 | click(ret.views[0], {click: true}); 322 | success = true; 323 | console.log('分享成功'); 324 | } else { 325 | console.log('没找到 返回'); 326 | } 327 | } else { 328 | console.log('没找到 分享'); 329 | } 330 | } else { 331 | console.log('没找到 好友列表'); 332 | } 333 | } else { 334 | console.log('没找到 微信好友'); 335 | } 336 | if (!success) { 337 | back(); 338 | } 339 | } else if (item.text.includes('提现')){ 340 | console.log('有奖分享提现'); 341 | click(item, {click: true}); 342 | } 343 | break; 344 | } 345 | } 346 | } 347 | 348 | var target = 'txt:激励视频|txt:阅读文章|txt:转发文章|'; 349 | ret = smartFindView(target, {failed: exitPopup, maxStep: 4, before: noPopup}); 350 | while (ret.length > 0) { 351 | console.log('tag:' + ret.tag); 352 | if (ret.tag == '转发文章') { 353 | for (var item of ret.views[0].parent.parent) { 354 | if (item.clickable && item.text.includes('提现')) { 355 | console.log('转发文章'); 356 | click(item, {click: true}); 357 | break; 358 | } 359 | } 360 | } else { 361 | for (var item of ret.views[0].parent.parent) { 362 | if (item.clickable && item.text!='已完成') { 363 | console.log('看激励视频'); 364 | click(item, {click: true, afterWait: 3000}); 365 | break; 366 | } 367 | } 368 | } 369 | 370 | target = target.replace('txt:' + ret.tag + '|', ''); 371 | ret = smartFindView(target, {failed: exitPopup, maxStep: 4, before: noPopup}); 372 | } 373 | 374 | scroll('up', {distance: 0.5, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 375 | } 376 | 377 | function withdraw() { 378 | if (dNeedWithdraw) { 379 | var ret = smartFindView('txt*:账户余额', {failed: exitPopup, maxStep: 3}); 380 | if (ret.length > 0) { 381 | var txt = ret.vews[0].text.fetchInteger(1, 7); 382 | console.log('txt money:' + txt); 383 | if (txt) { 384 | var money = parseInt(txt); 385 | if (money >= 3000) { 386 | var backFirst = false; 387 | ret = switchPage('txt*:账户余额', 'txt:兑换提现', {filed: exitPopup, descendant:[-1]}); 388 | if (ret.length > 0) { 389 | if (money >= 100000) { 390 | ret = switchPage('txt:10元', 'txt*:还需获得0金币|txt*:立即提现', {filed: exitPopup, descendant:[-1]}); 391 | if (ret.length > 0) { 392 | ret = switchPage('txt:立即提现', 'txt*:提现成功', {filed: exitPopup, descendant:[-1]}); 393 | } 394 | } else { 395 | ret = switchPage('txt:0.3元', 'txt*:提现0.3元到微信', {filed: exitPopup, descendant: [-1]}); 396 | if (ret.length > 0) { 397 | ret = switchPage('txt:提现0.3元到微信', 'txt*:提现成功', {filed: exitPopup, descendant: [-1]}); 398 | } 399 | } 400 | backFirst = true; 401 | } 402 | 403 | back2Page('txt:我的', {failed: exitPopup, backFirst: backFirst}); 404 | } 405 | } 406 | } 407 | } 408 | } 409 | 410 | function checkEnterAD() { 411 | if ('com.qq.e.ads.PortraitADActivity|com.bytedance.sdk.openadsdk.activity.base.TTRewardExpressVideoActivity|com.qq.e.ads.ADActivity|com.bytedance.sdk.openadsdk.activity.TTRewardExpressVideoActivity'.includes(rsCurWindowClassName)) { 412 | return true; 413 | } 414 | 415 | var ret = findView('id:com.yanhui.qktx:id/tt_reward_root|txt:腾讯社交联盟广告|txt*:奖励将于|txt*:获得奖励|txt$:后可领取奖励|txt$:后可领取金币|txt$:后可领金币', {maxStep:1}); 416 | if (ret.length > 0) { 417 | console.log('force enter:' + ret.tag); 418 | return true; 419 | } 420 | return false; 421 | } 422 | 423 | function dealAD() { 424 | if (checkEnterAD()) { 425 | console.log('enter ad'); 426 | var startTime = new Date().getTime(), isFindClose = false; 427 | while (new Date().getTime() - startTime < 60000) { 428 | var ret = findView('id:com.yanhui.qktx:id/linear_loading_view|txt:我的|txt:我的金币|txt:邀请', {maxStep:1}); 429 | if (ret.length > 0) { 430 | console.log('找到标记,退出广告:' + ret.tag); 431 | break; 432 | } 433 | 434 | ret = findView('txt^:参与互动|txt^:浏览页面|txt:放弃奖励', {maxStep:1}); 435 | if (ret.length > 0) { 436 | console.log('tag:' + ret.tag); 437 | if (ret.views[0].text.includes('浏览页面')) { 438 | if (ret.views[0].text.includes('领取奖励')) { 439 | click(ret.views[0]); 440 | } 441 | } else { 442 | click(ret.views[0]); 443 | } 444 | } 445 | 446 | ret = findView('cn:android.widget.ImageView', {flag:'clickable|find_all', maxStep: 1}); 447 | if (ret.length > 0) { 448 | for (var item of ret.views) { 449 | if ((item.width==item.height) && (item.width>25*rsDensity)&& (item.width<35*rsDensity) &&(item.left<25*rsDensity) &&(item.top<75*rsDensity)) { 450 | click(item); 451 | break; 452 | } 453 | } 454 | } 455 | 456 | ret = findView('id:com.yanhui.qktx:id/img_close|id:com.yanhui.qktx:id/img_close_see_ad', {maxStep: 1}); 457 | if (ret.length > 0) { 458 | if (ret.tag == 'com.yanhui.qktx:id/img_close_see_ad') { 459 | click(ret.views[0]); 460 | } else { 461 | click(ret.views[0], {click: true}); 462 | } 463 | } 464 | 465 | ret = findView('id:com.yanhui.qktx:id/tt_video_ad_close_layout', {maxStep: 1}); 466 | if (ret.length > 0) { 467 | click(ret.views[0], {click: true}); 468 | } else { 469 | ret = findView('cn:com.tencent.tbs.core.webkit.WebView', {maxStep: 1}); 470 | if (ret.length > 0) { 471 | if (ret.views[0].parent.length == 2) { 472 | click(ret.views[0].parent[1], {click: true}); 473 | } 474 | } 475 | } 476 | 477 | globalDealAD(); 478 | } 479 | 480 | if (new Date().getTime() - startTime >= 65000) { 481 | console.log('timeout'); 482 | if (checkEnterAD()) { 483 | if (sPreADTimeout) { 484 | console.log('网络太差广告卡住了,需要退出程序'); 485 | sShouldExit = true; 486 | } 487 | } 488 | 489 | back(); 490 | refresh(); 491 | sPreADTimeout = true; 492 | } else { 493 | sPreADTimeout = false; 494 | if (new Date().getTime() - startTime < 10000) { 495 | if (checkEnterAD()) { 496 | console.log('网络太差广告卡住了,需要退出程序'); 497 | refresh(); 498 | } 499 | } 500 | } 501 | 502 | console.log('退出了广告'); 503 | return true; 504 | } 505 | } 506 | 507 | function noPopup() { 508 | var ret = findView('txt*:明日签到可得|txt*:提现成功|txt:立即绑定', {maxStep: 1}); 509 | if (ret.length > 0) { 510 | console.log('tag:' + ret.tag); 511 | if (ret.tag == '立即绑定') { 512 | click(ret.views[0], {click: true}); 513 | } else { 514 | for (var item of ret.views[0].parent) { 515 | if (item.clickable) { 516 | click(item); 517 | break; 518 | } 519 | } 520 | } 521 | } 522 | } 523 | 524 | function skipAD() { 525 | var ret = findView('txt*:点击跳过|txt:仅在使用中允许', {maxStep: 1}); 526 | if (ret.length > 0) { 527 | click(ret.views[0], {click: true}); 528 | return true; 529 | } 530 | readExitPopup(); 531 | } 532 | 533 | function readExitPopup() { 534 | var ret = findView('id:com.yanhui.qktx:id/login_wechat_login_bt|txt:请输入手机号|txt:你的微信头像、昵称、地区和性别信息|txt:仅在使用中允许|txt:始终允许|txt^:请先阅读一篇文章达到|txt^:点击领取', {maxStep: 1}); 535 | if (ret.length > 0) { 536 | console.log('tagx:' + ret.tag); 537 | if (ret.tag == '请输入手机号') { 538 | paste(ret.views[0], rsPhoneNumber, {afterWait: 500}); 539 | clickByTag('txt*:下一步'); 540 | } else if (ret.tag == '你的微信头像、昵称、地区和性别信息') { 541 | clickByTag('txt:同意', {click: true}); 542 | } else if (ret.tag == '请先阅读一篇文章达到') { 543 | clickByTag('txt:去阅读', {click: true}); 544 | } else if (ret.tag == '点击领取') { 545 | click(ret.views[0], {afterWait: 2000}); 546 | } else { 547 | console.log('coming--'); 548 | var t = findView('id:com.yanhui.qktx:id/ck_login_wx_xieyi_image'); 549 | if (t.length > 0) { 550 | console.log('t.views[0].checked:' + t.views[0].checked); 551 | if (!t.views[0].checked) { 552 | click(t.views[0], {click: true, afterWait:1000}); 553 | } 554 | } 555 | click(ret.views[0], {click: true, afterWait: 4000}); 556 | } 557 | return true; 558 | } 559 | 560 | return exitPopup(); 561 | } 562 | 563 | function exitPopup() { 564 | if (sShouldExit) { 565 | return true; 566 | } 567 | 568 | var ret = findView('txt*:金币翻倍|txt*:知道了|txt:确定|txt:忽略|txt:开心收下|txt:以后再说|txt:开启推送可获得大量金币|', {maxStep:1}); 569 | if (ret.length > 0) { 570 | console.log('tag:' + ret.tag); 571 | if (ret.tag == '开启推送可获得大量金币') { 572 | clickByTag('txt:取消', {click: true}); 573 | } else { 574 | click(ret.views[0], {click:true, afterWait: 3000}); 575 | } 576 | return true; 577 | } 578 | 579 | ret = findView('id:com.yanhui.qktx:id/lin_close_see_ad|id:com.yanhui.qktx:id/img_close|id:com.yanhui.qktx:id/image_svg_home_read_package|id:com.yanhui.qktx:id/iv_more_money|com.yanhui.qktx:id/close', {maxStep: 1}); 580 | if (ret.length > 0) { 581 | if (ret.tag == 'com.yanhui.qktx:id/lin_close_see_ad') { 582 | click(ret.views[0]); 583 | } else { 584 | click(ret.views[0], {click: true}); 585 | } 586 | return true; 587 | } 588 | 589 | if (!globalExitPopup()) { 590 | return dealAD(); 591 | } 592 | 593 | return true; 594 | } 595 | 596 | function cbWindowChange(textList, className, packageName, event) { 597 | if (className=='com.tencent.mm.plugin.webview.ui.tools.SDKOAuthUI' || className == 'com.yanhui.qktx.view.dialog.ProtocolDialog') { 598 | clickByTag('txt:同意', {click: true}); 599 | } else if(className=='com.bytedance.sdk.openadsdk.core.widget.a') { 600 | clickByTag('txt:放弃奖励', {click: true}); 601 | } else if(className=='com.baidu.mobads.AppActivity') { 602 | var ret = findView('txt:为您推荐'); 603 | if (ret.length > 0) { 604 | click(ret.views[0].parent[0], {click: true}); 605 | } 606 | } else if(className=='android.app.Dialog' || className == 'com.mdad.sdk.mduisdk.AsoWebViewActivity') { 607 | back(); 608 | } else { 609 | return false; 610 | } 611 | return true; 612 | } 613 | 614 | function cbNotification(textList, className, packageName, event) { 615 | console.log('Notification textList:' + textList + ' className:' + className + ' packageName:' + packageName); 616 | for (var item of textList) { 617 | if (item.includes('验证码')) { 618 | console.log('进入通知处理:' + item); 619 | var subText = item.fetchInteger(); 620 | console.log('验证码为:' + subText); 621 | var ret = findView('id:com.yanhui.qktx:id/verification_code_msg'); 622 | if (ret.length > 0) { 623 | paste(ret.views[0][0], subText.substring(0, 1), {afterWait: 1000}); 624 | paste(ret.views[0][1], subText.substring(1, 2), {afterWait: 1000}); 625 | paste(ret.views[0][2], subText.substring(2, 3), {afterWait: 1000}); 626 | paste(ret.views[0][3], subText.substring(3, 4), {afterWait: 1000}); 627 | } else { 628 | console.log('找不到输入验证码的框'); 629 | } 630 | return true; 631 | } 632 | } 633 | return false; 634 | } 635 | -------------------------------------------------------------------------------- /趣头条自动阅读、刷金币: -------------------------------------------------------------------------------- 1 | 2 | import 'sys_'+getManufacturer()+'_runtime'; 3 | 4 | var sShouldExit = false, sPreADTimeout = false, sContainer, sEnterApp = false; 5 | 6 | function main() { 7 | if (1!=launchApp('com.jifen.qukan', 'txt:关注', {failed: skipAD})) { 8 | console.error('启动app失败'); 9 | return; 10 | } 11 | 12 | /* 13 | if (!smartLaunchApp('com.jifen.qukan')) { 14 | console.error('启动app失败'); 15 | return; 16 | } 17 | 18 | var ret = waitAppLaunched('id:com.jifen.qukan:id/m2', {failed: skipAD, maxStep: 30, beforeWait: 3000}); 19 | if (ret.length <= 0) { 20 | console.log('找不到容器'); 21 | return; 22 | } else { 23 | sContainer = ret.views[0]; 24 | } 25 | */ 26 | sEnterApp = true; 27 | 28 | doTask(); 29 | 30 | var appStartTime = new Date().getTime(); 31 | if (prob(70)) { 32 | readNews(); 33 | lookVideo(); 34 | } else { 35 | lookVideo(); 36 | readNews(); 37 | } 38 | 39 | exitAppDeal(); 40 | console.log('end'); 41 | } 42 | 43 | function readNews() { 44 | back2Page('txt:我的|txt:推荐|id:com.jifen.qukan:id/nf', {failed: exitPopup, backFirst: false}); 45 | var maxCheckTaskTime = parseInt((Math.random()*3+1)*60000), doMaxTime = parseInt((Math.random()*5+8)*60000); 46 | var startTime = new Date().getTime(); 47 | switchPage('txt:头条|txt:刷新', 'txt:推荐', {failed: exitPopup, descendant:[-1, -1], click: true}); 48 | while (new Date().getTime() - startTime < doMaxTime && !sShouldExit) { 49 | back2Page('txt:我的|txt:推荐|id:com.jifen.qukan:id/nf', {failed: exitPopup, backFirst: false}); 50 | 51 | scroll('up', {distance: Math.random()*0.05 + 0.95, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 52 | if (prob(50)) { 53 | scroll('up', {distance: Math.random()*0.09 + 0.8, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 54 | } 55 | if (prob(30)) { 56 | scroll('up', {distance: Math.random()*0.09 + 0.8, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 57 | } 58 | 59 | var doIndex = 1, failedCount = 0; 60 | while (!sShouldExit) { 61 | var ret = smartFindView('id:com.jifen.qukan:id/m2', {failed: exitPopup, maxStep: 8}); 62 | if (ret.length <= 0) { 63 | console.log('没有找到容器'); 64 | if (failedCount > 3) { 65 | sShouldExit = true; 66 | break; 67 | } else { 68 | back({afterWait: 1000}); 69 | failedCount++; 70 | refresh(); 71 | switchPage('txt:头条|txt:刷新', 'txt:推荐', {failed: exitPopup, descendant:[-1, -1], click: true}); 72 | continue; 73 | } 74 | } else { 75 | sContainer = ret.views[0]; 76 | failedCount = 0; 77 | } 78 | 79 | var doCount = sContainer.length - 1; 80 | if (doIndex >= doCount) { 81 | break; 82 | } 83 | 84 | console.log('doIndex:' + doIndex); 85 | var needBack = false, child = sContainer[doIndex]; 86 | if (child) { 87 | if (child.className == 'android.widget.RelativeLayout') { 88 | click(child, {afterWait: 3000}); 89 | needBack = true; 90 | 91 | if (rsCurWindowClassName=='com.jifen.qukan.content.newsdetail.news.NewsDetailNewActivity') { 92 | ret = smartFindView('cn:android.webkit.WebView', {failed: exitPopup}); 93 | if (ret.length > 0) { 94 | var wvHeight = ret.views[0].height; 95 | // 是否存在圈 96 | ret = smartFindView('id:com.jifen.qukan:id/a3j|id:com.jifen.qukan:id/b0r', {failed: exitPopup}); 97 | if (ret.length > 0) { 98 | var curTime = new Date().getTime(), maxTime = parseInt((Math.random()*0.5 + 0.2) * 60000); 99 | while (new Date().getTime() - curTime < maxTime && !sShouldExit) { 100 | scroll('up', {distance: Math.random()*0.25 + 0.1, duration: parseInt(Math.random()*250+450), afterWait: parseInt(Math.random()*1500+1000)}); 101 | ret = smartFindView('cn:android.webkit.WebView', {failed: exitPopup}); 102 | if (ret.length <= 0 || ret.views[0].height < wvHeight) { 103 | break; 104 | } 105 | 106 | // 阅读奖励 107 | clickByTag('id:com.jifen.qukan:id/b0r', {afterWait: 4000, maxStep: 2}); 108 | } 109 | } else { 110 | console.log('没有找到赚钱圈, 跳过一个,不看'); 111 | doIndex++; 112 | } 113 | } 114 | } else if (rsCurWindowClassName=='com.jifen.qukan.content.videodetail.VideoDetailsActivity') { 115 | console.log('视频'); 116 | var curTime = new Date().getTime(), maxTime = parseInt((Math.random()*0.4+0.2)*60000); 117 | while (new Date().getTime() - curTime < maxTime && !sShouldExit) { 118 | // 阅读奖励 119 | clickByTag('id:com.jifen.qukan:id/b0r', {afterWait: 4000, maxStep: 2}); 120 | 121 | var ret = findView('txt:关闭广告'); 122 | if (ret.length > 0) { 123 | break; 124 | } 125 | } 126 | } else { 127 | console.log('进入其他页面:' + rsCurWindowClassName); 128 | } 129 | } else { 130 | console.log('广告,跳过'); 131 | } 132 | } else { 133 | break; 134 | } 135 | 136 | back2Page('txt:我的|txt:推荐|id:com.jifen.qukan:id/nf', {failed: exitPopup, backFirst: needBack}); 137 | getPeriodAward(); 138 | if (new Date().getTime() - startTime >= maxCheckTaskTime) { 139 | doTask(); 140 | maxCheckTaskTime = 9999999; 141 | } 142 | 143 | ++doIndex; 144 | if (prob(60)) { 145 | ++doIndex; 146 | } 147 | } 148 | 149 | sleep(500); 150 | } 151 | } 152 | 153 | function lookVideo() { 154 | back2Page('txt:我的|txt:推荐|id:com.jifen.qukan:id/nf', {failed: exitPopup, backFirst: false}); 155 | var ret = switchPage('id:com.jifen.qukan:id/nf', 'txt:推荐', {descendant:[1], click: true, failed: exitPopup}); 156 | if (ret.length > 0) { 157 | console.log('进入视频'); 158 | var index = 0, count = parseInt(Math.random()*3+1); 159 | while (index < count) { 160 | // 播放按钮 161 | ret = smartFindView('id:com.jifen.qukan.content.shell:id/ct', {flag: 'find_all', failed: exitPopup}); 162 | if (ret.length > 0) { 163 | var size = ret.views.length; 164 | var i = parseInt(Math.random()*size); 165 | click(ret.views[i], {click: true, afterWait: 3000}); 166 | ret = smartFindView('id:com.jifen.qukan.content.shell:id/ct', {flag: 'find_all', failed: exitPopup}); 167 | if (ret.views.length < size) { 168 | console.log('成功播放视频'); 169 | var sTime = new Date().getTime(); 170 | while (new Date().getTime() - sTime < 32000) { 171 | // 阅读奖励 172 | clickByTag('id:com.jifen.qukan:id/b0r', {afterWait: 4000, maxStep: 2}); 173 | } 174 | } else { 175 | console.log('播放视频失败'); 176 | } 177 | } 178 | 179 | scroll('up', {distance: 0.9, duration: parseInt(Math.random()*200+300), afterWait:1000}); 180 | ++index; 181 | } 182 | 183 | console.log('看视频 结束'); 184 | } 185 | } 186 | 187 | function getPeriodAward() { 188 | var ret = smartFindView('txt:领取|txt*:再领', {failed: exitPopup, maxStep: 1}); 189 | if (ret.length > 0) { 190 | var view = ret.views[0]; 191 | click(view); 192 | gestureClick((view.left+view.right)/2,(view.top+view.bottom)/2, {beforeWait: 4000}); 193 | } 194 | } 195 | 196 | function doTask() { 197 | var ret = switchPage('txt:任务', 'txt:任务中心|txt:我的金币', {descendant:[-1, -1], click: true, failed: exitPopup}); 198 | if (ret.length <= 0) { 199 | ret = switchPage('id:com.jifen.qukan:id/nf', 'txt:任务中心|txt:我的金币', {descendant:[3], click: true, failed: exitPopup}); 200 | } 201 | if (ret.length > 0) { 202 | console.log('enter task'); 203 | var __day dIsDoLookVideo = true; 204 | 205 | withdraw(); 206 | 207 | var isFreshman = false, target = 'txt:最高|txt:领取奖励|txt:新手任务|txt:看小视频|txt^:立即领取|#find_all#txt:体验领金币|'; 208 | if (dIsDoLookVideo) { 209 | target += 'txt:看视频领金币|'; 210 | } 211 | 212 | ret = smartFindView(target, {flag: 'traverse_one_by_one', failed: exitPopup}); 213 | var index = 0; 214 | while (ret.length > 0 && index < 10) { 215 | console.log('tag:' + ret.tag); 216 | if (ret.tag == '最高') { 217 | click(ret.views[0], {afterWait: 4000}); 218 | } else if (ret.tag == '新手任务') { 219 | isFreshman = true; 220 | ret = findView('id:com.jifen.qukan:id/a4'); 221 | if (ret.length > 0) { 222 | console.log('找到新手红包'); 223 | click(ret.views[0][0], {click:true, afterWait:2000}); 224 | ret = findView('id:com.jifen.qukan:id/ag9'); 225 | if (ret.length > 0) { 226 | console.log('领取新手红包'); 227 | click(ret.views[0], {click: true}); 228 | } 229 | 230 | back2Page('txt:我的|txt:任务中心|id:com.jifen.qukan:id/nf', {failed: exitPopup, backFirst: false}); 231 | } 232 | } else if (ret.tag == '立即领取') { 233 | click(ret.views[0], {click: true, afterWait: 2000}); 234 | if (ret.views[0].text == '立即领取') { 235 | back({afterWait: 2000}); 236 | } 237 | } else if (ret.tag == '看小视频') { 238 | if (ret.views[0].parent[2].text == '去观看') { 239 | click(ret.views[0].parent[2], {click: true, afterWait:2000}); 240 | } 241 | } else if (ret.tag == '领取奖励') { 242 | click(ret.views[ret.views.length - 1].parent, {click: true}); 243 | ret = smartFindView('id:com.jifen.qukan:id/b_0', {flag: 'find_all', failed: exitPopup}); 244 | if (ret.length > 0) { 245 | console.log('领取任务奖励'); 246 | click(ret.views[ret.views.length-1], {click: true, afterWait: 4000}); 247 | } 248 | } else if (ret.tag == '体验领金币') { 249 | var index = 0; 250 | while (ret.views.length > 1 && index < 5) { 251 | var find = false; 252 | for (var item of ret.views) { 253 | if (item.parent[0].length == 4) { 254 | for (var child of item.parent[0]) { 255 | if (child.className == 'android.widget.TextView') { 256 | console.log('child text:' + child.text); 257 | var arr = child.text.fetchInteger(1); 258 | if (arr.length > 0 && arr[0] > 10) { 259 | find = true; 260 | click(ret.views[1], {click: true, afterWait: 20000}); 261 | back2Page('txt:我的|txt:任务中心|id:com.jifen.qukan:id/nf', {failed: exitPopup}); 262 | } 263 | break; 264 | } 265 | } 266 | } 267 | if (find) { 268 | break; 269 | } 270 | } 271 | 272 | if (find) { 273 | ret = findView('txt:体验领金币', {flag:'find_all', failed: exitPopup}); 274 | } else { 275 | break; 276 | } 277 | ++index; 278 | } 279 | 280 | target = target.replace('#find_all#txt:体验领金币|', ''); 281 | } else if (ret.tag == '看视频领金币') { 282 | var minCount = 0, maxCount = 0; 283 | while (ret.length > 0 && maxCount < 5) { 284 | var txt = ret.views[0].parent[1].text.trim(); 285 | if (txt && parseInt(txt) >= 20) { 286 | console.log('开始做视频任务'); 287 | click(ret.views[0], {click: true, afterWait: 4000}); 288 | } else { 289 | minCount++; 290 | if (minCount >= 3) { 291 | console.log('太小了,今天都不看了:' + txt); 292 | dIsDoLookVideo = false; 293 | break; 294 | } 295 | } 296 | 297 | ret = findView('txt:看视频领金币', {failed: exitPopup}); 298 | maxCount++; 299 | } 300 | } 301 | 302 | if (ret.tag == '立即领取') { 303 | target = target.replace('txt^:立即领取|', ''); 304 | } else { 305 | target = target.replace('txt:' + ret.tag + '|', ''); 306 | } 307 | 308 | console.log('target:' + target); 309 | ret = smartFindView(target, {flag: 'traverse_one_by_one', failed: exitPopup}); 310 | index++; 311 | } 312 | 313 | if (isFreshman) { 314 | console.log('进入新手任务了'); 315 | scroll('up', {distance: 0.9, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 316 | ret = smartFindView('txt*:看广告视频拿金币', {failed: exitPopup, maxStep: 3}); 317 | if (ret.length > 0) { 318 | for (var item of ret.views[0].parent) { 319 | if (item.text == '立即观看') { 320 | console.log('观看广告视频拿金币'); 321 | click(ret.views[0], {click: true, afterWait: 4000}); 322 | ret = smartFindView('txt*:看广告视频拿金币', {failed: exitPopup, maxStep: 3}); 323 | break; 324 | } 325 | } 326 | } 327 | 328 | var __day dDoNewGift = false; 329 | if (!dDoNewGift) { 330 | scroll('up', {distance: 0.9, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 331 | ret = smartFindView('txt*:立即领取', {failed: exitPopup, maxStep: 3}); 332 | if (ret.length > 0) { 333 | console.log('领取新人 福利'); 334 | click(ret.views[0], {click: true, afterWait: 3000}); 335 | dDoNewGift = true; 336 | } 337 | } 338 | } 339 | 340 | scroll('up', {distance: 0.7, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 341 | ret = findView('txt:点击展开更多'); 342 | if (ret.length > 0) { 343 | console.log('找到 点击展开更多'); 344 | click(ret.views[0], {click: true}); 345 | } 346 | 347 | var __day dNeedMoneyTree = true; 348 | if (dNeedMoneyTree) { 349 | target = 'txt:睡觉赚金币|txt:走路赚金币|txt:摇钱树领金币|'; 350 | } else { 351 | target = 'txt:睡觉赚金币|txt:走路赚金币|'; 352 | } 353 | ret = smartFindView(target, {failed: exitPopup}); 354 | while (ret.length > 0) { 355 | console.log('tag:' + ret.tag); 356 | click(ret.views[0], {afterWait: 4000}); 357 | target = target.replace('txt:' + ret.tag + '|', ''); 358 | if (ret.tag == '睡觉赚金币') { 359 | ret = findView('txt:累计睡觉'); 360 | if (ret.length > 0) { 361 | var t = 'txt^:看视频|id:app|', count = 0; 362 | ret = smartFindView(t, {failed: exitPopup}); 363 | while (ret.length > 0 && count < 10) { 364 | if (ret.tag == '看视频') { 365 | click(ret.views[0], {afterWait: 2000}); 366 | } else { 367 | var find = false; 368 | for (var item of ret.views[0].parent[1]) { 369 | if (item.text != '?') { 370 | click(item, {afterWait: 2000}); 371 | 372 | ret = smartFindView('txt:看视频兑换|txt:看视频再领', {failed: exitPopup}); 373 | if (ret.length > 0) { 374 | click(ret.views[0], {afterWait:3000}); 375 | } 376 | find = true; 377 | break; 378 | } 379 | } 380 | 381 | if (!find) { 382 | console.log('没有找到了'); 383 | break; 384 | } 385 | } 386 | ++count; 387 | ret = smartFindView(t, {failed: exitPopup}); 388 | } 389 | 390 | back2Pge('txt:我的', {failed: exitPopup}); 391 | } else { 392 | console.log('找不到 累计睡觉'); 393 | back2Pge('txt:我的', {failed: exitPopup, backFirst: false}); 394 | } 395 | } else if (ret.tag == '走路赚金币') { 396 | ret = findView('txt^:今日步数', {maxStep: 8}); 397 | if (ret.length > 0) { 398 | var count = 0, t = 'txt^:点击兑换|txt^:再领|txt:走路赚金币@cn:android.webkit.WebView'; 399 | ret = smartFindView(t, {failed: exitPopup}); 400 | while (ret.length > 0 && count < 10) { 401 | if (ret.tag == '点击兑换') { 402 | click(ret.views[0], {afterWait:2000}); 403 | var r = smartFindView('txt:看激励视频翻倍', {failed: exitPopup}); 404 | if (r.length > 0) { 405 | click(r.views[0], {afterWait: 3000}); 406 | } 407 | } else if (ret.tag == '再领') { 408 | click(ret.views[0], {afterWait: 2000}); 409 | } else { 410 | var find = false; 411 | for (var item of ret.views[ret.views.length - 1]) { 412 | if (item.text !='?') { 413 | click(item, {afterWait: 2000}); 414 | var r = smartFindView('txt:看视频兑换|txt:看视频再领', {failed: exitPopup}); 415 | if (r.length > 0) { 416 | click(r.views[0], {afterWait: 3000}); 417 | } 418 | find = true; 419 | break; 420 | } 421 | } 422 | 423 | if (!find) { 424 | console.log('没有找到了'); 425 | break; 426 | } 427 | } 428 | 429 | ++count; 430 | ret = smartFindView(t, {failed: exitPopup}); 431 | } 432 | 433 | back2Page('txt:我的|txt:任务中心|id:com.jifen.qukan:id/nf', {failed: exitPopup}); 434 | } else { 435 | console.log('找不到 今日步数'); 436 | back2Page('txt:我的|txt:任务中心|id:com.jifen.qukan:id/nf', {failed: exitPopup, backFirst: false}); 437 | } 438 | } else if (ret.tag == '摇钱树领金币') { 439 | target = target.replace('txt:摇钱树领金币|', ''); 440 | ret = findView('txt:摇钱树'); 441 | if (ret.length > 0) { 442 | var count = 0; 443 | ret = smartFindView('txt^:机会用完|txt^:领', {failed: exitPopup}); 444 | while (ret.length > 0 && count < 10) { 445 | if (ret.tag == '领') { 446 | click(ret.views[0], {click: true, afterWait: 4000}); 447 | ret = smartFindView('txt^:机会用完|txt^:领', {failed: exitPopup}); 448 | } else { 449 | console.log('摇钱树完成了'); 450 | dNeedMoneyTree = false; 451 | break; 452 | } 453 | ++count; 454 | } 455 | 456 | back2Page('txt:我的|txt:任务中心|id:com.jifen.qukan:id/nf', {failed: exitPopup}); 457 | } else { 458 | console.log('找不到 摇钱树'); 459 | back2Page('txt:我的|txt:任务中心|id:com.jifen.qukan:id/nf', {failed: exitPopup, backFirst: false}); 460 | } 461 | } 462 | 463 | if (target!= '') { 464 | ret = smartFindView(target, {failed: exitPopup}); 465 | } else { 466 | break; 467 | } 468 | } 469 | 470 | scroll('up', {distance: 0.6, duration: parseInt(Math.random()*200 + 300), afterWait: 1000}); 471 | var count = 0, doIndex = 0; 472 | ret = smartFindView('txt:福利专区', {failed: exitPopup}); 473 | while (ret.length > 0 && count < 10) { 474 | var find = false, index = 0; 475 | for (var item of ret.views[0].parent.parent[1]) { 476 | if (item.className == 'android.widget.LinearLayout') { 477 | index++; 478 | if (index > doIndex && item[0][0][2][0][0].length==0) { 479 | doIndex = index; 480 | console.log('点击广告'); 481 | click(item, {afterWait: 20000}); 482 | refresh(); 483 | find = true; 484 | back2Page('txt:我的|txt:任务中心|id:com.jifen.qukan:id/nf', {failed: exitPopup, backFirst: false}); 485 | break; 486 | } 487 | } 488 | } 489 | 490 | if (!find) { 491 | break; 492 | } 493 | ++count; 494 | ret = smartFindView('txt:福利专区', {failed: exitPopup}); 495 | } 496 | 497 | console.log('click back to 推荐头条'); 498 | back2Page('txt:我的|txt:任务中心|id:com.jifen.qukan:id/nf', {failed: exitPopup, backFirst: false}); 499 | switchPage('txt:头条|txt:刷新', 'txt:推荐', {click: true, failed: exitPopup, descendant:[-1, -1]}); 500 | } else { 501 | console.log('not find 任务'); 502 | } 503 | console.log('leave task'); 504 | } 505 | 506 | function noPopup() { 507 | var ret = findView('id:signDialog', {maxStep: 1}); 508 | if (ret.length > 0) { 509 | console.log('找到提现广告,去掉'); 510 | for (var item of ret.views[0][0]) { 511 | if (item.clickable) { 512 | click(item, {click: true}); 513 | break; 514 | } 515 | } 516 | } 517 | } 518 | 519 | function fetchCorn() { 520 | if (dNeedFetchCorn) { 521 | var ret = smartFindView('txt:当前金币', {failed: exitPopup}); 522 | if (ret.length > 0) { 523 | for (var item of ret.views[0].parent.parent) { 524 | if (item.length == 0) { 525 | console.log('找到 item, 点击'); 526 | click(item, {afterWait: 1000}); 527 | var container, count = 0; 528 | ret = smartFindView('txt:天降好礼|txt:红包等你拿|id:hudong-dialog|', {flag:'traverse_one_by_one', failed: exitPopup}); 529 | while (ret.length > 0 && count < 10) { 530 | if (ret.tag == 'hudong-dialog') { 531 | if (ret.views[0].height > 10) { 532 | console.log('点击广告'); 533 | click(ret.views[0][0][0], {click: true, afterWait: 2000}); 534 | } else { 535 | break; 536 | } 537 | } else { 538 | container=ret.views[0].parent.parent.parent; 539 | break; 540 | } 541 | ++count; 542 | ret = smartFindView('txt:天降好礼|txt:红包等你拿|id:hudong-dialog|', {flag:'traverse_one_by_one', failed: exitPopup}); 543 | } 544 | 545 | if (container) { 546 | sleep(3000); 547 | var continueDo = hasFreeCount(), index = 0; 548 | while(continueDo && index < 20) { 549 | for (var item of container) { 550 | if (item[0].length == 0) { 551 | click(item, {click: true, afterWait: 4000}); 552 | ret = smartFindView('id:hudong-dialog', {failed: exitPopup}); 553 | if (ret.length > 0) { 554 | click(ret.views[0][0][0], {click: true}); 555 | } else { 556 | console.log('没找到 对话框'); 557 | } 558 | break; 559 | } 560 | } 561 | 562 | continueDo = hasFreeCount(); 563 | ++index; 564 | } 565 | 566 | back2Page('txt:提现兑换', {failed: exitPopup}); 567 | } else { 568 | console.log('没找到容器'); 569 | back2Page('txt:提现兑换', {failed: exitPopup, backFirst: false}); 570 | } 571 | 572 | break; 573 | } 574 | } 575 | } 576 | } 577 | } 578 | 579 | function hasFreeCount() { 580 | var result = false; 581 | var ret = smartFindView('txt^:今日免费', {failed: exitPopup}); 582 | if (ret.length > 0) { 583 | var arr = ret.views[0].text.fetchInteger(1); 584 | // var text = ret.views[0].text.fetchInteger(1); 585 | if (arr.length > 0) { 586 | if (arr[0] > 0) { 587 | result = true; 588 | } else { 589 | dNeedFetchCorn = false; 590 | } 591 | } 592 | } 593 | return result; 594 | } 595 | 596 | function withdraw() { 597 | var __day dNeedWithdraw = true; 598 | if ((dNeedFetchCorn || dNeedWithdraw) && new Date().getHours()>=8) { 599 | var ret = findView('id:com.jifen.qukan:id/xe', {failed: exitPopup}); 600 | if (ret.length > 0) { 601 | var money = parseInt(ret.views[0].text); 602 | if (money >= 10000 || dNeedFetchCorn) { 603 | ret = switchPage('id:com.jifen.qukan:id/be2', 'txt:我的钱包', {failed: exitPopup, maxStep: 5, before: noPopup}); 604 | if (ret.length > 0) { 605 | ret = switchPage('txt:提现', 'txt:提现兑换', {failed: exitPopup, maxStep: 5, before: noPopup}); 606 | if (ret.length > 0) { 607 | fetchCorn(); 608 | if (money >= 10000) { 609 | var moneyText = 'txt*:10000金币'; 610 | if (mondy >= 50000) { 611 | moneyText = 'txt*:50000金币'; 612 | } 613 | 614 | ret = switchPage(moneyText, 'txt:立即提现|txt:做任务,立即解锁提现', {failed: exitPopup, maxStep: 5, before: noPopup}); 615 | if (ret.length > 0) { 616 | if (ret.tag == '做任务,立即解锁提现') { 617 | dNeedWithdraw = false; 618 | console.log('提现失败,不在尝试'); 619 | } else { 620 | ret = switchPage('txt:立即提现', 'txt*:提现成功|txt:请绑定提现手机号|txt*:您还需连续参与', {failed: exitPopup, maxStep: 5, before: noPopup}); 621 | if (ret.length > 0) { 622 | console.log('text:' + ret.tag); 623 | if (ret.tag == '您还需连续参与') { 624 | dNeedWithdraw = false; 625 | } else if (ret.tag == '请绑定提现手机号') { 626 | click(ret.views[0].parent[1][0], {afterWait: 1000}); 627 | paste(ret.views[0].parent[1][0], rsPhoneNumber, {afterWait: 1000}); 628 | clickByTag('txt:获取验证码'); 629 | 630 | var s = new Date().getTime(); 631 | ret = findView('txt*:绑定成功'); 632 | while (ret.length <= 0 && (new Date().getTime() - s) < 30000) { 633 | ret = findView('txt*:绑定成功'); 634 | } 635 | } else { 636 | console.log('提现成功'); 637 | dNeedWithdraw = false; 638 | back({afterWait: 1000}); 639 | } 640 | } else { 641 | console.log('提现失败,不在尝试'); 642 | dNeedWithdraw = false; 643 | } 644 | } 645 | } 646 | } 647 | 648 | back({afterWait: 1000}); 649 | 650 | } 651 | } 652 | 653 | back2Page('txt:任务|id:com.jifen.qukan:id/nf', {failed: exitPopup}); 654 | } else { 655 | console.log('余额不足'); 656 | dNeedWithdraw = false; 657 | } 658 | } else { 659 | console.log('not find '); 660 | } 661 | } else { 662 | console.log('no need withdraw'); 663 | } 664 | } 665 | 666 | 667 | function checkEnterAD() { 668 | if ('com.qq.e.ads.PortraitADActivity|com.kwad.sdk.api.proxy.app.KsRewardVideoActivity|com.bykv.vk.openvk.activity.TTRdEpVdActivity|com.iclicash.advlib.ui.front.InciteADActivity'.includes(rsCurWindowClassName)) { 669 | return true; 670 | } 671 | 672 | var ret = findView('id:com.jifen.qukan:id/gm|txt:腾讯社交联盟广告|txt^:奖励将于|txt*:获得奖励|txt$:后可领取奖励|txt$:后可领取金币|txt$:后可领金币', {maxStep:1}); 673 | if (ret.length > 0) { 674 | console.log('force enter:' + ret.tag); 675 | return true; 676 | } 677 | return false; 678 | } 679 | 680 | function dealAD() { 681 | if (checkEnterAD()) { 682 | console.log('enter ad'); 683 | var startTime = new Date().getTime(), isFindClose = false; 684 | while (new Date().getTime() - startTime < 65000) { 685 | var ret = findView('id:com.jifen.qukan.content.shell:id/fe|txt:我的|txt:活动规则|txt:摇钱树|txt^:看视频再领', {maxStep:1}); 686 | if (ret.length > 0) { 687 | console.log('找到标记,退出广告:' + ret.tag); 688 | break; 689 | } 690 | 691 | ret = findView('id:com.jifen.qukan:id/tt_video_ad_close_layout', {maxStep: 1}); 692 | if (ret.length > 0) { 693 | console.log('找到 tt_video_ad_close_layout 并点击'); 694 | click(ret.views[0], {click: true}); 695 | break; 696 | } 697 | 698 | ret = findView('cn:android.widget.ImageView', {flag:'clickable|find_all', maxStep: 1}); 699 | if (ret.length > 0) { 700 | for (var item of ret.views) { 701 | if ((item.parent.length==2) && (item.width==item.height) && (item.width<40*rsDensity) &&(item.top<80*rsDensity)&& (item.left<30*rsDensity)) { 702 | click(item, {click: true, beforeWait: 1000, afterWait: 1000}); 703 | isFindClose = true; 704 | break; 705 | } 706 | } 707 | } 708 | 709 | if (isFindClose) { 710 | break; 711 | } 712 | 713 | ret = findView('txt:点击重播|txt:点击取消|txt:关闭|txt:继续观看|id:com.jifen.qukan:id/ksad_end_close_btn', {maxStep: 1}); 714 | if (ret.length > 0) { 715 | if (ret.tag == 'com.jifen.qukan:id/ksad_end_close_btn') { 716 | if (ret.views[0].parent.length==2) { 717 | click(ret.views[0], {click: true}); 718 | isFindClose = true; 719 | break; 720 | } 721 | } else if (ret.tag == '继续观看') { 722 | click(ret.views[0], {click: true}); 723 | } else { 724 | back(); 725 | } 726 | } 727 | 728 | globalDealAD(); 729 | } 730 | 731 | if (new Date().getTime() - startTime >= 65000) { 732 | if (checkEnterAD()) { 733 | if (sPreADTimeout) { 734 | sShouldExit = true; 735 | } 736 | } 737 | 738 | refresh(); 739 | sPreADTimeout = true; 740 | } else { 741 | sPreADTimeout = false; 742 | if (new Date().getTime() - startTime < 10000) { 743 | if (checkEnterAD()) { 744 | refresh(); 745 | } 746 | } 747 | } 748 | 749 | console.log('退出了广告'); 750 | return true; 751 | } 752 | } 753 | 754 | function exitPopup() { 755 | if (sShouldExit) { 756 | return true; 757 | } 758 | 759 | var ret = findView('txt^:看视频再领|txt^:再看1个领|txt:退出逛逛|id:com.jifen.qukan.content.shell:id/iw|id:com.jifen.qukan:id/bxb|id:com.xiaomi.market:id/iv_close|id:com.jifen.qukan:id/agt|id:com.jifen.qukan:id/afx|id:com.jifen.qukan:id/b6s|id:com.jifen.qukan:id/b71|id:com.jifen.qukan:id/a4p', {maxStep:1}); 760 | if (ret.length > 0) { 761 | click(ret.views[0], {click:true, afterWait: 3000}); 762 | return true; 763 | } 764 | 765 | ret = findView('txt:点击重播', {maxStep: 1}); 766 | if (ret.length > 0) { 767 | back(); 768 | return true; 769 | } 770 | 771 | ret = findView('txt:我知道了|txt:个人隐私保护指引|txt:微信一键登录|txt:拒绝|txt:点击领钱', {maxStep:1}); 772 | if (ret.length > 0) { 773 | var b = true; 774 | console.log('找到:' + ret.tag); 775 | if (ret.tag == '个人隐私保护指引') { 776 | clickByTag('txt:同意'); 777 | } else if (ret.tag == '微信一键登录') { 778 | clickByTag('txt:阅读并同意「用户协议」和「隐私政策」', {click: true, afterWait: 1000}); 779 | clickByTag('txt:微信一键登录', {click: true, afterWait: 2000}); 780 | } else if (ret.tag == '拒绝') { 781 | var t = findView('txt^:你的微信头像|txt:同意去开启|txt:始终允许', {maxStep: 2}); 782 | if (t.length <= 0) { 783 | if (sEnterApp) { 784 | click(ret.views[0]); 785 | } else { 786 | b = false; 787 | } 788 | } else { 789 | clickByTag('txt:同意|txt:同意去开启|txt:始终允许', {click: true}); 790 | } 791 | } else { 792 | click(ret.views[0], {click:true, afterWait:4000}); 793 | } 794 | 795 | if (b) { 796 | return true; 797 | } 798 | } 799 | 800 | if (!globalExitPopup()) { 801 | return dealAD(); 802 | } 803 | 804 | return false; 805 | } 806 | 807 | function skipAD() { 808 | var ret = findView('txt:跳过广告|txt:头条', {maxStep: 1}); 809 | if (ret.length > 0) { 810 | if (ret.tag == '头条') { 811 | click(ret.views[0], {click: true}); 812 | } else { 813 | click(ret.views[0]); 814 | } 815 | } 816 | exitPopup(); 817 | } 818 | 819 | function cbWindowChange(textList, className, packageName, event) { 820 | if (className=='com.jifen.qukan.content.title.treasurebox.dialog.November11Dialog') { 821 | clickByTag('id:com.jifen.qukan:id/lq', {click: true, afterWait: 1000}); 822 | } else if(className=='android.widget.FrameLayout') { 823 | clickByTag('id:com.jifen.qukan:id/afx', {click: true, afterWait: 1000}); 824 | } else if(className=='com.iclicash.advlib.__remote__.ui.incite.video.ClosePromptDialog') { 825 | clickByTag('txt:放弃金币', {click: true, afterWait: 1000}); 826 | } else if (className == 'com.iclicash.advlib.__remote__.ui.banner.json2view.view.view.dialog.InciteDownloadSuperviseDialog' || className =='com.iclicash.advlib.__remote__.ui.banner.json2view.view.view.dialog.DownloadSuperviseDialog' || className=='com.jifen.qkui.dialog.QkContentWrapDialog') { 827 | back({beforeWait: 1000}); 828 | } else if(className=='com.jifen.qukan.ad.splash.SplashMultiDialog') { 829 | clickByTag('txt:跳过广告', {maxStep:2}); 830 | } else if(className=='com.jifen.qkbase.main.dialog.CloseDialog') { 831 | clickByTag('id:com.jifen.qukan:id/a76'); 832 | } else if(className=='com.jifen.qkbase.adreward.CoinsDialog') { 833 | var ret = findView('恭喜获得'); 834 | if (ret.length <= 0) { 835 | back({beforeWait: 1000}); 836 | } 837 | } else if(className=='com.jifen.qukan.growth.card.dialog.ActivityCardDialog') { 838 | clickByTag('id:com.jifen.qukan:id/afx', {click: true}); 839 | } else if(className=='com.jifen.qukan.content.title.treasurebox.dialog.TreasureboxCountdownDialog') { 840 | clickByTag('id:com.jifen.qukan.content.shell:id/bh'); 841 | } else { 842 | return false; 843 | } 844 | return true; 845 | } 846 | 847 | function cbNotification(textList, className, packageName, event) { 848 | console.log('Notification textList:' + textList + ' className:' + className + ' packageName:' + packageName); 849 | for (var item of textList) { 850 | if (item.includes('验证码')) { 851 | console.log('进入通知处理:' + item); 852 | var arr = item.fetchInteger(); 853 | if (arr.length > 0) { 854 | var subText = arr[0] + ''; 855 | console.log('验证码为:' + subText); 856 | var ret = findView('txt:后重新发送'); 857 | if (ret.length > 0) { 858 | paste(ret.views[0].parent[1], subText, {afterWait: 1000}); 859 | clickByTag('txt:立即验证', {click: true}); 860 | } else { 861 | console.log('找不到输入验证码的框'); 862 | } 863 | return true; 864 | } 865 | } 866 | } 867 | return false; 868 | } 869 | --------------------------------------------------------------------------------