├── 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 | APP名称 |
34 | 日均收益 |
35 | 最低提取金额下限 |
36 |
37 |
38 | 快手极速版 |
39 | 1.5 |
40 | 3 |
41 |
42 |
43 | 火山极速版 |
44 | 0.5 |
45 | 0.2 |
46 |
47 |
48 | 抖音极速版 |
49 | 0.4 |
50 | 1 |
51 |
52 |
53 | 刷宝短视频 |
54 | 2 |
55 | 100 |
56 |
57 |
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