├── README.md ├── 刷宝短视频.js ├── 快手极速版.js ├── 抖呱呱极速版.js ├── 抖音极速版.js ├── 火山极速版.js ├── 网赚-总.js ├── 聚看点.js └── 趣头条.js /README.md: -------------------------------------------------------------------------------- 1 | # 自动刷小视频和新闻类有收益类的APP 2 | 3 | ## 序言 4 | 5 | 6 | - 本代码基于国产自动化插件Auto.js实现,仅支持Android平台。 7 | - 手机安装AutoJs并联网后,即可自动运行收益类的App获得收益,无需其他插件设备,无需ROOT。 8 | - 由于各大收益类APP平均每周更新一次,本代码不一定能够及时匹配。 9 | - 目前支持快手极速版、火山极速版、抖音极速版、抖呱呱极速版、刷宝短视频、聚看点、趣头条 10 | 11 | ## 使用方法 12 | ### 安装Auto.js 13 | #### 手机安装 14 | 下载AUtoJs的APK文件并安装 15 | 16 | 链接:https://pan.baidu.com/s/1erT5Du2P83LT4YZ15QkiCg 17 | 18 | 提取码:dudy 19 | #### pc安装开发环境 20 | 首先在pc上安装任意版本的VSCode 21 | 然后参考一下文档进行安装并连接手机 22 | https://github.com/hyb1996/Auto.js-VSCode-Extension 23 | ### 运行 24 | 若想依次运行所有脚本 直接运行“网赚-总.js” 25 | 若只运行单个脚本,编辑单个脚本,找到 26 | 27 | // onlyRun() 28 | 将其代码前的“//”删除,取消注释,然后运行单个脚本即可 29 | ### 收益评估 30 | 单机收益目前确实很低,收益估计也就能够抵消网费和电费,各大APP平均收益粗略统计如下: 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 |
APP名称日均收益最低提取金额下限
快手极速版1.53
火山极速版0.50.2
抖音极速版0.41
刷宝短视频2100
58 | app的每个账户会随着使用时间的变长收益会不断下降,一般新用户的收益都会很高且提现最低限都很低。 59 | 60 | 可能还有一些高收益的app没能发现,如果有的话欢迎大家私信我 61 | -------------------------------------------------------------------------------- /刷宝短视频.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | const perVideoWatchTime=10//每隔视频观看10秒 4 | const halfDeviceHeight=device.height/2 5 | const halfDeviceWidth=device.width/2 6 | const videoSwipeDistance=halfDeviceHeight-100//视频下滑的长度 px 7 | 8 | // test() 9 | // onlyRun() 10 | //只允许本脚本时,将上行解除注释 11 | function onlyRun(){ 12 | auto(); 13 | console.show() 14 | log("开始刷宝短视频") 15 | images.requestScreenCapture(false) 16 | log("已获得截屏权限") 17 | let totalTime=2*60*60 //刷2小时 18 | run(totalTime) 19 | } 20 | 21 | function test(){ 22 | auto(); 23 | console.show() 24 | log("开始刷宝短视频") 25 | images.requestScreenCapture(false) 26 | log("已获得截屏权限") 27 | 28 | swipeVideoIndexDirection("up") 29 | exit(); 30 | 31 | } 32 | var app = {}; 33 | app.main = function (totalTime) { 34 | run(totalTime) 35 | }; 36 | 37 | module.exports = app; 38 | 39 | function run(totalTime){ 40 | launchApp() 41 | log("刷宝短视频需用时:"+totalTime) 42 | let watchTime=0; 43 | for(let i=1;iwatchTime;i++){ 44 | if(text("拖动滑块").findOnce()){ 45 | log("出现验证码,结束") 46 | runOver() 47 | break; 48 | } 49 | let waitTime=perVideoWatchTime+random(-4,4) 50 | log("本视频观看时长"+waitTime) 51 | sleep(waitTime/2*1000); 52 | likeAndfollow(7) 53 | sleep(waitTime/2*1000); 54 | watchTime+=waitTime 55 | log("已看:"+i+"个视频 "+watchTime+"秒") 56 | swipeVideo(i) 57 | 58 | } 59 | } 60 | 61 | function launchApp(){ 62 | let isLauchApp=false 63 | while(!isLauchApp){ 64 | log("尝试启动") 65 | launchPackage("com.kuaishou.nebula") 66 | sleep(10000) 67 | let mesbox=id("com.kuaishou.nebula:id/a4v").findOnce() 68 | if(mesbox){ 69 | mesbox.click() 70 | } 71 | mesbox=id("com.kuaishou.nebula:id/close").findOnce() 72 | if(mesbox){ 73 | mesbox.click() 74 | } 75 | 76 | mesbox=text("我知道了").findOnce() 77 | if(mesbox){ 78 | mesbox.click() 79 | } 80 | isLauchApp=id("com.kuaishou.nebula:id/circular_progress_bar").findOnce() 81 | } 82 | 83 | log("已启动") 84 | } 85 | //swipeCount,滑动视频的次数 86 | function swipeVideo(swipeCount){ 87 | let offset=random(-100,0) 88 | if(swipeCount%6==0){ 89 | // 双数的第6次下滑 90 | swipe(halfDeviceWidth-random(-50,50), halfDeviceHeight+offset+(videoSwipeDistance/2), 91 | halfDeviceWidth+random(-50,50), halfDeviceHeight+offset-(videoSwipeDistance/2), 30); 92 | }else if(swipeCount%2==0){ 93 | //双数次上滑 94 | swipe(halfDeviceWidth+random(-50,50), halfDeviceHeight+offset, 95 | halfDeviceWidth+random(-50,50), halfDeviceHeight+offset+(videoSwipeDistance/2), 30); 96 | 97 | }else { 98 | //单数下滑 99 | swipe(halfDeviceWidth-random(-50,50), halfDeviceHeight+offset+(videoSwipeDistance/2), 100 | halfDeviceWidth+random(-50,50), halfDeviceHeight+offset-(videoSwipeDistance/2), 30); 101 | } 102 | 103 | } 104 | //有range*2+1分之一的概率点喜欢,range*4+1分之一的概率点关注,关注必定喜欢 105 | function likeAndfollow(range){ 106 | let isLike=random(-1*range,range) 107 | if(isLike==0){ 108 | click(halfDeviceWidth,halfDeviceHeight) 109 | sleep(50) 110 | click(halfDeviceWidth,halfDeviceHeight) 111 | log("双击喜欢") 112 | let isFollow=random(-1*range,range) 113 | if(isFollow==0){ 114 | text("关注").click() 115 | log("点了关注") 116 | }else{ 117 | // log("不是点关注的概率:"+isFollow) 118 | } 119 | 120 | }else{ 121 | // log("不是点喜欢的概率:"+isLike) 122 | } 123 | 124 | } 125 | //是否已经不再有收益了 126 | function isNoIncome(){ 127 | let isIncome=findIncomeIcon() 128 | if(!isIncome){ 129 | sleep(6000) 130 | isIncome=findIncomeIcon() 131 | if(!isIncome){ 132 | log("等待6秒,不见收益红包") 133 | return false 134 | } 135 | } 136 | log("正在收益中") 137 | return true; 138 | } 139 | //查找收入红包的图标,是收益中的返回true 否则返回false 140 | function findIncomeIcon(){ 141 | let redBag=id(" com.kuaishou.nebula:id/circular_progress_bar").findOnce() 142 | if(redBag){ 143 | let redBagBounds=redBag.bounds() 144 | let screen=images.captureScreen(); 145 | // log(redBagBounds) 146 | let p=images.findColorEquals(screen,"#f85050",redBagBounds.left,redBagBounds.top,redBagBounds.width(),redBagBounds.height()) 147 | return p?true:false; 148 | } 149 | return false; 150 | } 151 | function runOver(){ 152 | home() 153 | } 154 | 155 | -------------------------------------------------------------------------------- /抖呱呱极速版.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 每次约23个金币左右 3 | */ 4 | 5 | const perVideoWatchTime=15//每隔视频观看10秒 6 | const halfDeviceHeight=device.height/2 7 | const halfDeviceWidth=device.width/2 8 | const videoSwipeDistance=halfDeviceHeight-100//视频下滑的长度 px 9 | 10 | // runOver() 11 | // exit(); 12 | 13 | // onlyRun() 14 | //只允许本脚本时,将上行解除注释 15 | function onlyRun(){ 16 | 17 | auto(); 18 | console.show() 19 | log("开始抖呱呱极速版") 20 | let totalTime=2*60*60 //刷2小时 21 | run(totalTime) 22 | } 23 | 24 | var app = {}; 25 | app.main = function (totalTime) { 26 | run(totalTime) 27 | }; 28 | 29 | module.exports = app; 30 | 31 | 32 | 33 | 34 | 35 | function run(totalTime){ 36 | launchApp() 37 | let watchTime=0; 38 | for(let i=1;i40){ 93 | //有时候软件问题 94 | log("app出现问题,观看广告数量超过40个了") 95 | break; 96 | } 97 | } 98 | log("没有观看广告的按钮了") 99 | } 100 | /** 101 | * 等待广告结束并返回 102 | */ 103 | function waitAdOverAndBack(){ 104 | sleep(5000) 105 | let isLoad=id("com.ss.android.ugc.livelite:id/o").findOnce() 106 | if(!isLoad){ 107 | log("未加载成功,可能是因为“网络繁忙”") 108 | return 109 | } 110 | let closeAdBtn=undefined 111 | while(!closeAdBtn){ 112 | sleep(3000) 113 | log("等待广告结束") 114 | closeAdBtn=text("关闭广告").findOnce() 115 | let continueBack=text("继续退出").findOnce() 116 | if(continueBack){ 117 | continueBack.click() 118 | } 119 | 120 | } 121 | log("广告已结束") 122 | closeAdBtn.click() 123 | sleep(3000) 124 | log("广告已结束") 125 | 126 | let isBack=text("继续退出").findOnce() 127 | while(isBack){ 128 | log("还是有继续退出按钮") 129 | click("继续退出") 130 | sleep(1000) 131 | isBack=text("继续退出").findOnce() 132 | } 133 | isBack=text("红包").findOnce() 134 | while(!isBack){ 135 | log("等待返回") 136 | click("关闭广告") 137 | click("继续退出") 138 | sleep(2000) 139 | isBack=text("红包").findOnce() 140 | } 141 | } 142 | function goWatchVideoPage(){ 143 | let buttonA=text("视频").findOnce() 144 | if(!buttonA){ 145 | log("不在启动页面") 146 | //TODO可以做完全退出,再启动一次 147 | return 148 | } 149 | let buttonAA=findClickParentt(buttonA) 150 | buttonAA.click(); 151 | sleep(2000) 152 | } 153 | /** 154 | * 观看小视频 155 | */ 156 | function watchVideo(totalTime){ 157 | goWatchVideoPage() 158 | let videoBtn=id("com.ss.android.ugc.livelite:id/pt").findOnce() 159 | videoBtnBounds=videoBtn.bounds() 160 | click(videoBtnBounds.centerX(), videoBtnBounds.centerY()); 161 | sleep(2000) 162 | log("进入视频页") 163 | let watchTime=0; 164 | for(let i=1;ireadResule.readTime||readTotalNum>readResule.readCount){ 91 | let thisReadResule=readCurrentScreenNews() 92 | readResule.readTime+=thisReadResule.readTime 93 | readResule.readCount+=thisReadResule.readCount 94 | swipe(deviceWidth/2, deviceHeight-300, deviceWidth/2, deviceHeight-(deviceHeight-70), 1500)//上滑x 95 | sleep(3000) 96 | log("累计阅读文章数量"+readResule.readCount+"阅读时间"+readResule.readTime) 97 | } 98 | 99 | } 100 | // 阅读当前屏幕显示的新闻,返回阅读时长和数量 101 | function readCurrentScreenNews(){ 102 | let readResule={ 103 | readTime:0, 104 | readCount:0 105 | } 106 | let newsTitleArray=getCurrentScreenNews() 107 | log("当前页面新闻数量:"+newsTitleArray.length) 108 | for(let i=0;i<=newsTitleArray.length;i++){ 109 | if(newsTitleArray[i]==undefined){ 110 | log("当前屏幕文章已经阅读完") 111 | return readResule 112 | } 113 | 114 | let NewsIndexFrame=getNewsFrameIndexTitleUi(newsTitleArray[i]) 115 | if(NewsIndexFrame==null)continue 116 | let newsReadResule=readNewsIndexTitleUi(NewsIndexFrame) 117 | readResule.readTime+=newsReadResule.readTime 118 | readResule.readCount+=newsReadResule.readCount 119 | log("当前屏幕阅读文章数量"+readResule.readCount+"阅读时间"+readResule.readTime) 120 | isHanveQiandaoBox() 121 | } 122 | return readResule 123 | } 124 | function readVideo(){ 125 | 126 | } 127 | //找出当前页面所有文章的标题 128 | function getCurrentScreenNews(){ 129 | let newsTitleArray= id("com.xiangzi.jukandian:id/item_artical_three_title_tv").find() 130 | return newsTitleArray; 131 | } 132 | //阅读一篇文章,传入文章的title的控件对象 133 | function readNewsIndexTitleUi(NewsIndexFrame){ 134 | NewsIndexFrame.click(); 135 | sleep(1000) 136 | // let isRead=id("com.cashtoutiao:id/confirm").findOnce() 137 | // if(isRead){ 138 | // log("这篇已经看过5次了") 139 | // isRead.click() 140 | // sleep(1000) 141 | // newsBack() 142 | // return{ 143 | // readTime:0, 144 | // readCount:0 145 | // } 146 | // } 147 | 148 | // let isHanveIncome=className("android.view.View").clickable(false).drawingOrder(12).depth(7).findOnce()//是否有收益图标 149 | // if(!isHanveIncome){ 150 | // log("这篇是广告") 151 | // newsBack() 152 | // return{ 153 | // readTime:0, 154 | // readCount:0 155 | // } 156 | // } 157 | text("评论得金币").waitFor() 158 | sleep(1000) 159 | randomSwipeIndexDirection(1)//先往下滑1下,启动计时 160 | randomSwipe(perNewsReadTime) 161 | //有时候文章中会出现消息框 162 | let mesbox=id("com.xiangzi.jukandian:id/dismisstv").findOnce() 163 | if(mesbox){ 164 | mesbox.click() 165 | } 166 | newsBack() 167 | return{ 168 | readTime:perNewsReadTime, 169 | readCount:1 170 | } 171 | } 172 | function newsBack(){ 173 | let isHomePage=null 174 | while(!isHomePage){ 175 | log("尝试返回") 176 | back() 177 | sleep(2000) 178 | isHomePage=id("com.xiangzi.jukandian:id/ll_tab1_layout").findOnce() 179 | } 180 | log("返回成功") 181 | } 182 | //传入文章的title的控件对象,返回文章的可点击对象frame 183 | function getNewsFrameIndexTitleUi(titleUi){ 184 | let frame=titleUi 185 | while(!frame.clickable()){ 186 | frame=frame.parent() 187 | if(frame==null){ 188 | log("没有可点击的框架"+titleUi.text()) 189 | return null 190 | } 191 | } 192 | // log("找到了") 193 | return frame 194 | } 195 | //随机滑动指定的时间 196 | function randomSwipe(indexTime){ 197 | let intervalTime=6//5秒 198 | for(let useTime=0;useTimereadResule.readTime||readTotalNum>readResule.readCount){ 65 | let thisReadResule=readCurrentScreenNews() 66 | readResule.readTime+=thisReadResule.readTime 67 | readResule.readCount+=thisReadResule.readCount 68 | swipe(deviceWidth/2, deviceHeight-300, deviceWidth/2, deviceHeight-(deviceHeight-70), 1500)//上滑x 69 | sleep(3000) 70 | log("累计阅读文章数量"+readResule.readCount+"阅读时间"+readResule.readTime) 71 | } 72 | 73 | } 74 | // 阅读当前屏幕显示的新闻,返回阅读时长和数量 75 | function readCurrentScreenNews(){ 76 | let readResule={ 77 | readTime:0, 78 | readCount:0 79 | } 80 | let newsTitleArray=getCurrentScreenNews() 81 | log("当前页面新闻数量:"+newsTitleArray.length) 82 | for(let i=0;i<=newsTitleArray.length;i++){ 83 | if(newsTitleArray[i]==undefined){ 84 | log("当前屏幕文章已经阅读完") 85 | return readResule 86 | } 87 | 88 | let NewsIndexFrame=getNewsFrameIndexTitleUi(newsTitleArray[i]) 89 | if(NewsIndexFrame==null)continue 90 | let newsReadResule=readNewsIndexTitleUi(NewsIndexFrame) 91 | readResule.readTime+=newsReadResule.readTime 92 | readResule.readCount+=newsReadResule.readCount 93 | log("当前屏幕阅读文章数量"+readResule.readCount+"阅读时间"+readResule.readTime) 94 | // isHanveQiandaoBox() 95 | } 96 | return readResule 97 | } 98 | function readVideo(){ 99 | 100 | } 101 | //找出当前页面所有文章的标题 102 | function getCurrentScreenNews(){ 103 | // let newsTitleArray= id("com.jifen.qukan:id/amd").find() 104 | let newsTitleArray= id("com.jifen.qukan:id/an2").find() 105 | return newsTitleArray; 106 | } 107 | //阅读一篇文章,传入文章的title的控件对象 108 | function readNewsIndexTitleUi(NewsIndexFrame){ 109 | NewsIndexFrame.click(); 110 | sleep(1000) 111 | 112 | text("我来说两句...").waitFor() 113 | 114 | // let isHanveIncome=id("com.jifen.qukan:id/bnj").findOnce()//是否有收益图标 115 | // if(!isHanveIncome){ 116 | // log("没有收益图标") 117 | // sleep(1000) 118 | // newsBack() 119 | // return{ 120 | // readTime:0, 121 | // readCount:0 122 | // } 123 | // } 124 | sleep(1000) 125 | randomSwipeIndexDirection(1)//先往下滑1下,启动计时 126 | let readTime=randomSwipe(perNewsReadTime) 127 | newsBack() 128 | return{ 129 | readTime:readTime, 130 | readCount:1 131 | } 132 | } 133 | function newsBack(){ 134 | let isHomePage=null 135 | while(!isHomePage){ 136 | log("尝试返回") 137 | back() 138 | sleep(2000) 139 | isHomePage=text("小视频").findOnce() 140 | } 141 | log("返回成功") 142 | } 143 | //传入文章的title的控件对象,返回文章的可点击对象frame 144 | function getNewsFrameIndexTitleUi(titleUi){ 145 | let frame=titleUi 146 | while(!frame.clickable()){ 147 | frame=frame.parent() 148 | if(frame==null){ 149 | log("没有可点击的框架"+titleUi.text()) 150 | return null 151 | } 152 | } 153 | // log("找到了") 154 | return frame 155 | } 156 | //随机滑动指定的时间 157 | function randomSwipe(indexTime){ 158 | let intervalTime=6//5秒 159 | for(let useTime=0;useTime