forked from gzhjic/LearnChinaHelper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AutoLearnChina.js
1062 lines (1028 loc) · 42.2 KB
/
AutoLearnChina.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
"ui";
var form = {
isLongRead: false,
isLongWatch: false
}
ui.layout(
<vertical>
<appbar>
<toolbar id="toolbar" title="强国助手 V1.0.5"/>
</appbar>
<Switch id="autoService" text="无障碍服务" checked="{{auto.service != null}}" padding="8 8 8 8" textSize="15sp"/>
<ScrollView>
<vertical>
<frame height="40" gravity="center">
<text text="*注意*" gravity="center" textSize="18sp" textColor="red" textStyle="bold"/>
</frame>
<card w="*" h="*" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<ScrollView>
<vertical padding="18 8" h="auto">
<text text="项目说明文档: (请留意新版本的发布)" textColor="#222222" textSize="14sp"/>
<text autoLink="web" text="https://github.com/XiangyuTang/LearnChinaHelper "/>
</vertical>
</ScrollView>
<View bg="#f44336" h="*" w="10"/>
</card>
<card w="*" h="*" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<ScrollView>
<vertical padding="18 8" h="auto">
<text text="1.首次安装请先开启无障碍服务和截图与允许通知权限" textColor="#222222" textSize="14sp"/>
<text text="2.若未开启通知权限,首次使用建议打开↗的悬浮窗权限" textColor="#222222" textSize="14sp"/>
<text text="3.开始运行前请先关闭学习强国,由脚本运行后自动启动" textColor="#222222" textSize="14sp"/>
<text text="4.脚本执行过程中请勿操作手机" textColor="#222222" textSize="14sp"/>
</vertical>
</ScrollView>
<View bg="#f44336" h="*" w="10"/>
</card>
<card w="*" h="*" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<ScrollView>
<vertical padding="18 8" h="auto">
<text text="当前版本强国助手支持的功能包括:(以下任务预计花费7分钟)" textColor="#222222" textSize="14sp"/>
<text text="阅读文章、视听学习、收藏、分享、订阅、评论、本地频道" textColor="#999999" textSize="14sp"/>
</vertical>
</ScrollView>
<View bg="#4caf50" h="*" w="10"/>
</card>
<card w="*" h="*" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<ScrollView>
<vertical padding="18 8" h="auto">
<text text="坚持把学习贯彻习近平总书记系列重要讲话精神作为重大政治任务,认真学习党的先进理论与指导思想,请勿利用本软件投机取巧." textColor="#222222"/>
</vertical>
</ScrollView>
<View bg="#4caf50" h="*" w="10"/>
</card>
<card w="*" h="*" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<ScrollView>
<vertical padding="18 8" h="auto">
<text text="是否执行文章学习时长任务:(预计最多花费12分钟)" textColor="#222222"/>
<radiogroup id="long_read">
<radio id="yes_read" text="是"></radio>
<radio id="no_read" text="否" checked = "true"></radio>
</radiogroup>
</vertical>
</ScrollView>
<View bg="#2196f3" h="*" w="10"/>
</card>
<card w="*" h="*" margin="10 5" cardCornerRadius="2dp"
cardElevation="1dp" gravity="center_vertical">
<ScrollView>
<vertical padding="18 8" h="auto">
<text text="是否执行视听学习时长任务:(建议在wifi环境下执行,预计最多花费18分钟)" textColor="#222222"/>
<radiogroup id="long_watch">
<radio id="yes_watch" text="是"></radio>
<radio id="no_watch" text="否" checked = "true"></radio>
</radiogroup>
</vertical>
</ScrollView>
<View bg="#2196f3" h="*" w="10"/>
</card>
<linear gravity="center">
<button id="start" text="开始运行" style="Widget.AppCompat.Button.Colored" w="auto"/>
<button id="stop" text="停止运行" w="auto"/>
</linear>
<frame height="20" gravity="center">
<text text="---------------------------------------------------------------------------------------------------------------------------------" gravity="center"/>
</frame>
<frame height="50" gravity="center">
<text text="Copyright©2020 by Txy 一岸流年1998" gravity="center"/>
</frame>
</vertical>
</ScrollView>
</vertical>
);
//创建选项菜单(右上角)
ui.emitter.on("create_options_menu", menu=>{
menu.add("启动悬浮窗");
menu.add("运行日志");
menu.add("关于");
});
//监听选项菜单点击
ui.emitter.on("options_item_selected", (e, item)=>{
switch(item.getTitle()){
case "启动悬浮窗":
var intent = new Intent();
intent.setAction("android.settings.action.MANAGE_OVERLAY_PERMISSION");
app.startActivity(intent);
break;
case "运行日志":
app.startActivity('console');
break;
case "关于":
alert("关于", "强国助手 v1.0.5\n1.新增悬浮窗日志显示功能\n2.解决阅读时长任务的bug\n3.新增选项菜单");
break;
}
e.consumed = true;
});
activity.setSupportActionBar(ui.toolbar);
ui.yes_read.on("check",function(check){
if(check){
form.isLongRead= true;
}
});
ui.no_read.on("check",function(check){
if(check){
form.isLongRead= false;
}
});
ui.yes_watch.on("check",function(check){
if(check){
form.isLongWatch= true;
}
});
ui.no_watch.on("check",function(check){
if(check){
form.isLongWatch= false;
}
});
ui.autoService.on("check", function(checked) {
// 用户勾选无障碍服务的选项时,跳转到页面让用户去开启
if(checked && auto.service == null) {
app.startActivity({
action: "android.settings.ACCESSIBILITY_SETTINGS"
});
}
if(!checked && auto.service != null){
auto.service.disableSelf();
}
});
// 当用户回到本界面时,resume事件会被触发
ui.emitter.on("resume", function() {
// 此时根据无障碍服务的开启情况,同步开关的状态
ui.autoService.checked = auto.service != null;
});
ui.start.on("click", function(){
//程序开始运行之前判断无障碍服务
if(auto.service == null) {
toastLog("请先开启无障碍服务!");
return;
}
main();
});
ui.stop.on("click",function(){
threads.shutDownAll();
engines.stopAll();
exit();
toast("已终止执行脚本");
});
function main() {
// 这里写脚本的主逻辑
threads.start(function () {
if(!requestScreenCapture()){
toastLog("请先开启截图权限,以执行收藏任务!");
return;
}
try {
//启动悬浮窗日志
console.show();
launchApp("学习强国");
toastLog("主程序开始运行");
waitForPackage("cn.xuexi.android");
sleep(3000);
toast("开始执行脚本!")
getTaskList(); // 获取任务列表
doUnfinishedTask(); //执行当日未完成的任务
getTaskList(); // 重新获取任务列表,装载最新的阅读和视听时长剩余次数
doExtraTask();
back();//回到手机主页
sleep(2000);
} catch (error) {
log(error)
toast("出现异常,请关闭应用重新执行脚本!");
exit(); // 有异常退出,结束脚本
}
toastLog("运行结束,脚本自动退出...");
threads.shutDownAll();
console.hide();
engines.stopAll();
exit();
});
}
var taskInfoList = []; // 装任务列表
function getTaskList() {
// 从主页到我的主页
className("android.widget.TextView").id('comm_head_xuexi_mine').findOne().click();
sleep(2000);
// 点击事件在我的积分父控件上
id("user_item_name").text("学习积分").findOne().parent().click()
// waitForPackage("cn.xuexi.android")
//waitForActivity("com.alibaba.lightapp.runtime.activity.CommonWebViewActivity")
toastLog("尝试获取任务列表...")
//等待缓冲符号消失
sleep(2000);
while(className("android.widget.ImageView").exists())
{
sleep(1000);
toastLog("等待加载...")
}
// sleep(8000);
// 获取任务列表
taskInfoList = []; // 重置
className("android.widget.ListView").findOne().children().forEach(function (child) {
var list = child.find(className('android.view.View'));
// log(list)
if (list.length > 5) {
var title = list.get(2).contentDescription;
var content = list.get(4).contentDescription;
if (title && content) {
var integralContent = content.split('/');
var getIntegral = parseInt(integralContent[0].replace(/[^0-9]/ig, ""));
var targetIntegral = parseInt(integralContent[1].replace(/[^0-9]/ig, ""));
taskInfoList.push({
title: title,
getIntegral: getIntegral,
targetIntegral: targetIntegral,
})
}
}
});
if (!taskInfoList.length) {
toastLog('网络不稳定,获取任务失败!请关闭应用并重启脚本...');
threads.shutDownAll();
engines.stopAll();
exit(); // 有异常退出,结束脚本
} else {
toastLog("成功获取任务列表,退到首页");
log(taskInfoList);
back();//从“积分”页跳转到“我的”
sleep(2000);
back();//从“我的”跳转到“首页”
sleep(2000);
}
};
function doUnfinishedTask(){
var flag = 0;//判断是否完成所有任务满分的标志
var read_article_flag = 2 //判断阅读文章任务是否已完成,作为参数传入视听学习任务的new_vedio_list用于控件寻找
for(i=0;i<taskInfoList.length;i++){
var task = taskInfoList[i];
// log(task);
//如果当日获得积分<当日上限积分
if(task.getIntegral < task.targetIntegral){
flag = 1;
// log('未达成满分的任务有:'+task.title)
if(task.title=='阅读文章'){
rest_num = task.targetIntegral-task.getIntegral;
read_article_flag = 2;
readArticle(rest_num,8,false);//默认阅读8s,执行短时阅读任务
continue;
}
else if(task.title=='视听学习'){
rest_num = task.targetIntegral-task.getIntegral;
learnVideo(rest_num,read_article_flag,8,false);//默认观看8s,执行短时视听任务
continue;
}
else if(task.title=='每日答题'){
sleep(2000)
toastLog('开始执行每日答题任务(暂未开发)')
continue;
}
else if(task.title=='每周答题'){
toastLog('开始执行每周答题任务(暂未开发)')
sleep(2000)
continue;
}
else if(task.title=='专项答题'){
toastLog('开始执行专项答题任务(暂未开发)')
sleep(2000)
continue;
}
else if(task.title=='订阅'){
rest_num = task.targetIntegral-task.getIntegral;
subscribe(rest_num);
continue;
}
else if(task.title=='分享'){
share();
continue;
}
else if(task.title=='收藏'){
collect();
continue;
}
else if(task.title=='发表观点'){
comment();
continue;
}
else if(task.title=='本地频道'){
localChannel();
continue;
}
}
}
if(!flag)
{
toastLog('已完成当日所有脚本任务!d=====( ̄▽ ̄*)b')
}
};
function doExtraTask(){
toastLog('执行额外脚本任务....')
sleep(1000);
var read_article_flag = 2;
if(form.isLongRead)
{
read_article_flag = 2;
toastLog("开始执行文章学习时长任务...")
sleep(1000);
//读rest_num篇文章,每篇文章阅读125s
for(i=0;i<taskInfoList.length;i++){
var task = taskInfoList[i];
if(task.getIntegral < task.targetIntegral&&task.title=='文章学习时长'){
rest_num = task.targetIntegral-task.getIntegral;
readArticle1(rest_num,125,true);
}
}
}
if(form.isLongWatch)
{
toastLog("开始执行视听学习时长任务...");
sleep(1000);
//看rest_num个视频,每个视频观看185s
for(i=0;i<taskInfoList.length;i++){
var task = taskInfoList[i];
if(task.getIntegral < task.targetIntegral&&task.title=='视听学习时长'){
rest_num = task.targetIntegral-task.getIntegral;
learnVideo(rest_num,read_article_flag,185,true);
}
}
}
toastLog('额外任务执行完成!d=====( ̄▽ ̄*)b')
}
/**
* @function readArticle 阅读时长任务(短时)
* @param num 待完成任务的数量。
* @param time 阅读文章的时间(s)。
* @param isLong 是否执行长时任务。
*/
function readArticle(num,time,isLong){
sleep(1000);
toastLog('开始执行阅读文章任务...')
//点击学习控件
id("home_bottom_tab_button_work").findOne().click();
sleep(1500);
//点击要闻
className("android.widget.TextView").text("要闻").findOne().parent().click();
sleep(1500);
//先看右上角总积分,如果看完某文章,积分没变,说明该文章以前看过,不算有效文章,num不减
var origin_score = id("comm_head_xuexi_score").findOne().getText();
sleep(1500);
log("origin_score:"+origin_score)
var newListView = className("android.widget.ListView").depth(20).findOnce(1);
//阅读文章
while(num>0){
newListView = className("android.widget.ListView").depth(20).findOnce(1);
log('newListView:'+newListView)
sleep(1000);
if(newListView!=null)
{
// log('newListView:'+newListView)
var newslist = newListView.children();
// log('list.length:'+newslist.length);
if (newslist.length > 0)
{
newslist.forEach(function(item,index){
if(index&&num>0){//index==0时是linearLayout控件,无法点击,也不是子项要闻
sleep(1000);
isClick = item.click()//进入新闻内容页
sleep(1500);
if(isClick)
{
num--;
toastLog("进行模拟阅读"+time+"s...剩余阅读篇数:"+num);
// waitForPackage("cn.xuexi.android");
for(var t=1;t<=time;t++)
{
sleep(1000);
left_time = time-t;
if(left_time%5==0)
{
toastLog("还剩"+left_time+"s阅读时间...");
//未防止息屏的唤醒屏幕操作
device.wakeUp();
}
}
back();
// className("android.widget.ImageView").depth(11).findOne().click();
sleep(2000);
//返回之后看积分是否变化,若未变化,num++
var new_score = id("comm_head_xuexi_score").findOne().getText();
if(new_score==origin_score)
{
if(isLong)//如果是阅读时长任务
{
num++;
toastLog("检测积分未发生变化...向下翻页并进行长时阅读");
pn = random(3,8);
for(var p=1;p<=pn;p++)//往下多滑动几次
{
newListView.scrollDown();
sleep(1000);
}
}
else
{
num++;
toastLog("检测积分未发生变化...向下翻页并重置剩余阅读篇数:"+num);
}
newListView.scrollDown();
}
else
{
origin_score = new_score;
}
}
}
});
}
newListView.scrollDown();
}
}
toastLog('阅读文章任务执行结束!d==( ̄▽ ̄*)b')
//点击学习控件回到新闻首页
id("home_bottom_tab_button_work").findOne().click();
sleep(1000);
};
/**
* @function readArticle1 由于控件会谜之变化的原因,无可奈何为阅读时长任务特别写的方法
* @param num 待完成任务的数量。
* @param time 阅读文章的时间(s)。
* @param isLong 是否执行长时任务。
*/
function readArticle1(num,time,isLong){
sleep(1000);
toastLog('开始执行阅读时长任务...')
//点击学习控件
id("home_bottom_tab_button_work").findOne().click();
sleep(1500);
//点击要闻
className("android.widget.TextView").text("要闻").findOne().parent().click();
//先看右上角总积分,如果看完某文章,积分没变,说明该文章以前看过,不算有效文章,num不减
var origin_score = id("comm_head_xuexi_score").findOne().getText();
log("origin_score:"+origin_score)
var newListView = className("android.widget.ListView").depth(20).findOne();
//阅读文章
//为长时阅读设定积分未变化停止机制,如果检测到积分未变化2次,停止阅读
var stop_flag = 0;
while(num>0){
if(stop_flag==2)
{
break;
}
if(newListView.bounds().right==0)//正常的listView控件范围应该是Rect(0, 357 - 1080, 2195)
{
//如果进入这个条件,说明控件找成了Rect(0, 357 - 0, 2195),是错的
log("检测到newListView控件不对,自动修改...")
listViewFlag = 1;
newListView = className("android.widget.ListView").depth(20).findOnce(1);
}
else{
newListView = className("android.widget.ListView").depth(20).findOne();
}
log('newListView:'+newListView)
if(newListView!=null)
{
// log('newListView:'+newListView)
var newslist = newListView.children();
// log('list.length:'+newslist.length);
if (newslist.length > 0)
{
newslist.forEach(function(item,index){
if(index&&num>0){//index==0时是linearLayout控件,无法点击,也不是子项要闻
sleep(2000);
isClick = item.click()//进入新闻内容页
if(isClick)
{
num--;
toastLog("进行模拟阅读"+time+"s...剩余阅读篇数:"+num);
// waitForPackage("cn.xuexi.android");
for(var t=1;t<=time;t++)
{
sleep(1000);
left_time = time-t;
if(left_time%5==0)
{
toastLog("还剩"+left_time+"s阅读时间...");
//未防止息屏的唤醒屏幕操作
device.wakeUp();
}
}
back();
// className("android.widget.ImageView").depth(11).findOne().click();
sleep(2000);
//返回之后看积分是否变化,若未变化,num++
var new_score = id("comm_head_xuexi_score").findOne().getText();
if(new_score==origin_score)
{
if(isLong)//如果是阅读时长任务
{
num++;
toastLog("检测积分未发生变化...向下翻页并进行长时阅读");
stop_flag++;
pn = random(3,8);
for(var p=1;p<=pn;p++)//往下多滑动几次
{
newListView.scrollDown();
sleep(1000);
}
}
else
{
num++;
toastLog("检测积分未发生变化...向下翻页并重置剩余阅读篇数:"+num);
}
newListView.scrollDown();
}
else
{
origin_score = new_score;
}
}
}
});
// break;
}
newListView.scrollDown();
}
}
toastLog('阅读文章任务执行结束!d==( ̄▽ ̄*)b')
//点击学习控件回到新闻首页
id("home_bottom_tab_button_work").findOne().click();
sleep(1000);
};
/**
* @function learnVideo 由于控件会谜之变化的原因,无可奈何为阅读时长任务特别写的方法
* @param num 待完成任务的数量。
* @param read_article_flag 主要用于判断阅读文章任务是否做过,如果做过,会影响new_vedio_list寻找控件
* @param time 阅读文章的时间(s)。
* @param isLong 是否执行长时任务。
*/
function learnVideo(num,read_article_flag,time,isLong){
log("read_article_flag:"+read_article_flag);
sleep(1000);
toastLog('开始执行视听学习任务...');
//进入电视台频道
desc("电视台").id("home_bottom_tab_button_contact").findOne().click();
//先看右上角总积分,如果看完某视频,积分没变,说明该视频以前看过,不算有效视频,num不减
var origin_score = id("comm_head_xuexi_score").findOne().getText();
log("origin_score:"+origin_score)
//进入第一频道
className("android.widget.TextView").text("第一频道").findOne().parent().click();
var new_vedio_list = className("android.widget.ListView").depth(20).findOnce(read_article_flag);
while(num>0){
new_vedio_list = className("android.widget.ListView").depth(20).findOnce(read_article_flag);
log('new_vedio_list:'+new_vedio_list)
if(new_vedio_list!=null)
{
var newslist = new_vedio_list.children();
if (newslist.length > 0)
{
newslist.forEach(function(item,index){
if(index&&num>0){//index==0时是linearLayout控件,无法点击,也不是子项要闻
sleep(1000);
isClick = item.click()//进入视频内容页
sleep(2000);
if(isClick)
{
num--;
//如果用户用的流量观看视频
if(text("继续播放").exists()){
toastLog("自动点击继续播放,将消耗用户流量...");
className("android.widget.TextView").text("继续播放").findOne().click();
sleep(1000);
}
else{
toastLog("自动播放...");
sleep(1000);
}
toastLog("进行模拟观看"+time+"s...剩余视听:"+num+"次");
for(var t=1;t<=time;t++)
{
sleep(1000);
left_time = time-t;
if(left_time%5==0)
{
toastLog("还剩"+left_time+"s视听时间...");
//未防止息屏的唤醒屏幕操作
device.wakeUp();
}
}
//点击返回
// className("android.widget.ImageView").depth(13).findOne().click()
back();
sleep(2000);
//返回之后看积分是否变化,若未变化,num++
var new_score = id("comm_head_xuexi_score").findOne().getText();
if(new_score==origin_score)
{
if(isLong)//如果是视听时长任务
{
num++;
toastLog("检测积分未发生变化...向下翻页并继续进行长时视听");
pn = random(3,8);
log("pn:"+pn);
for(var p=1;p<=pn;p++)//往下多滑动几次
{
new_vedio_list.scrollDown();
sleep(1000);
}
}
else
{
num++;
toastLog("检测积分未发生变化...向下翻页并重置剩余视听次数:"+num);
}
new_vedio_list.scrollDown();
}
else
{
origin_score = new_score;
}
}
}
});
}
}
else
{
if(read_article_flag==2)
{
read_article_flag = 1;
new_vedio_list = className("android.widget.ListView").depth(20).findOnce(read_article_flag);
log("read_article_flag = 1的new_vedio_list:"+new_vedio_list)
}
else
{
read_article_flag = 2;
new_vedio_list = className("android.widget.ListView").depth(20).findOnce(read_article_flag);
log("read_article_flag = 2的new_vedio_list:"+new_vedio_list)
}
new_vedio_list.scrollDown();
}
}
toastLog('视听学习任务执行结束!d==( ̄▽ ̄*)b')
//点击学习控件回到新闻首页
id("home_bottom_tab_button_work").findOne().click();
sleep(1000);
};
/**
* @function collect 收藏任务
*/
function collect(){
toastLog('开始执行收藏任务');
sleep(1000);
//点击要闻
className("android.widget.TextView").text("要闻").findOne().parent().click();
sleep(1000);
//阅读文章
var newListView = className("android.widget.ListView").depth(20).findOnce(1);
// log('newListView:'+newListView)
var num = 2;//待收藏文章数
while(newListView!=null&&num>0)
{
// log('newListView:'+newListView)
var newslist = newListView.children();
// log('list.length:'+newslist.length);
if (newslist.length > 0)
{
newslist.forEach(function(item,index){
if(index>0&&num>0){//index==0时是linearLayout控件,无法点击,也不是子项要闻
sleep(2000);
isClick = item.click()//进入新闻内容页
if(isClick)
{
toastLog("检测该文章是否收藏...");
sleep(2000);
//找到小星星控件
collect_star = className("android.widget.ImageView").depth(10).findOne();
log("collect_star:"+collect_star);
//检测小星星是否点亮
//截图取小星星控件的坐标范围
var img = captureScreen();
var star_bounds = collect_star.bounds();
//获取小星星中心的x,y坐标像素
var star_x = star_bounds.centerX();
var star_y = star_bounds.centerY();
// 小星星的中心RGB(255,196,61)
var collected_color = colors.rgb(255, 196, 61)
var color = images.pixel(img, star_x, star_y);
//如果颜色不匹配,说明未收藏
if(!colors.isSimilar(color,collected_color))
{
//收藏
toastLog("收藏该文章...");
sleep(1000);
collect_star.click();
num--;
sleep(1000);
}
//返回
back();
sleep(2000);
}
}
});
}
newListView.scrollDown();
sleep(2000);
newListView = className("android.widget.ListView").depth(20).findOnce(1);
}
toastLog('收藏任务执行结束!d==( ̄▽ ̄*)b')
//点击学习控件回到新闻首页
id("home_bottom_tab_button_work").findOne().click();
sleep(1000);
};
/**
* @function share 分享任务
*/
function share(){
toastLog('开始执行分享任务...');
sleep(1000);
//点击要闻
className("android.widget.TextView").text("要闻").findOne().parent().click();
//阅读文章
var newListView = className("android.widget.ListView").depth(20).findOnce(1);
if(newListView!=null)
{
var newslist = newListView.children();
if (newslist.length > 0)
{
newslist.forEach(function(item,index){
if(index>0&&index<=2){//index==0时是linearLayout控件,无法点击,也不是子项要闻
sleep(2000);
isClick = item.click()//进入新闻内容页
if(isClick)
{
sleep(1000);
toastLog("正在分享该文章...");
//找到分享控件
var share_icon = className("android.widget.ImageView").depth(10).drawingOrder(4).findOne();
// log("share_icon:"+share_icon);
share_icon.click();
sleep(2000);
var share_choice = text("分享到学习强国").id("txt_gv_item").findOne().parent();
// log("share_choice:"+share_choice);
sleep(2000);
//点击分享
share_choice.click();
//停留5秒
sleep(5000);
//返回新闻主体内容界面
back();
sleep(2000);
// 返回要闻主页
back();
}
}
});
}
newListView.scrollDown();
}
toastLog('分享任务执行结束!d==( ̄▽ ̄*)b')
//点击学习控件回到新闻首页
id("home_bottom_tab_button_work").findOne().click();
sleep(1000);
};
/**
* @function comment 评论任务
*/
function comment(){
toastLog('开始执行发表观点任务...');
sleep(1000);
//点击要闻
className("android.widget.TextView").text("要闻").findOne().parent().click();
//阅读文章
var newListView = className("android.widget.ListView").depth(20).findOnce(1);
if(newListView!=null)
{
var newslist = newListView.children();
if (newslist.length > 0)
{
newslist.forEach(function(item,index){
if(index>0&&index<=2){//index==0时是linearLayout控件,无法点击,也不是子项要闻
sleep(2000);
isClick = item.click()//进入新闻内容页
if(isClick)
{
sleep(1000);
toastLog("正在发表观点...");
//找到Text文本框控件
var comment_icon = className("android.widget.TextView").text("欢迎发表你的观点").findOne();
// 点击发表观点
comment_icon.click();
sleep(2000);
//键入观点内容
className("android.widget.EditText").findOne().setText("中国加油!祝福祖国的未来更加繁荣昌盛!");
sleep(2000);
//点击发布
className("android.widget.TextView").text("发布").findOne().click();
toastLog("评论发布成功,等候10s回到主页...")
sleep(10000);
//回到新闻list页
back();
}
}
});
}
newListView.scrollDown();
}
toastLog('发表观点任务执行结束!d==( ̄▽ ̄*)b')
//点击学习控件回到新闻首页
id("home_bottom_tab_button_work").findOne().click();
sleep(1000);
};
/**
* @function localChannel 本地频道任务
*/
function localChannel(){
toastLog('开始执行本地频道任务');
sleep(1000);
//找到推荐、要闻、本地频道等的父控件
avv = className("android.view.ViewGroup").depth(14).findOnce(2);
// log(avv)
var address = ""
avv.children().forEach(function(item,index){
// log(item);
if(index==3){//找到本地频道的入口控件,并点击
address = item.child(0).getText();
log(address);
item.click();
}
});
//找到第一个本地频道入口
channel = className("android.widget.TextView").depth(26).textContains(address).findOne().parent();
// log(channel)
//点击进入
channel.click();
sleep(5000);
back();
sleep(2000);
toastLog('本地频道任务执行结束!d==( ̄▽ ̄*)b')
//点击学习控件回到新闻首页
id("home_bottom_tab_button_work").findOne().click();
sleep(1000);
};
/**
* @function dailyQuiz 每日答题任务
*/
function dailyQuiz(){
};
/**
* @function weeklyQuiz 每周答题任务
*/
function weeklyQuiz(){
};
/**
* @function specialQuiz 专项答题任务
*/
function specialQuiz(){
};
/**
* @function challengeQuiz 挑战答题任务
*/
function challengeQuiz(){
};
/**
* @function subscribe 订阅任务
*/
function subscribe(num){
sleep(1000);
toastLog('开始执行订阅任务');
// 从主页到我的主页
id("comm_head_xuexi_mine").text("我的").findOne().click();
sleep(2000);
//点击订阅控件
id("my_subscribe_tv").text("订阅").findOne().click();
// waitForActivity("android.widget.FrameLayout",200);
// log('过来了');
sleep(3000);
//在我的订阅里面找到所有订阅号,存起来
var subscribed_accounts = [];
//如果没有订阅任何订阅号,那直接点击添加
if(id("no_content_text").exists()){
//点击添加
className("android.widget.TextView").text("添加").findOne().click();
//在添加里面逐一扫描每个订阅号是否在上面的已订阅中,如果没匹配到,则订阅这个公众号,订阅num个即可
accounts_pool = className("android.widget.ListView").depth(13).findOne();
var bottom_flag = 0;
while(accounts_pool!=null&&num>0)
{
sleep(1000);
var frameLayoutList = accounts_pool.children();
frameLayoutList.forEach(function(item,index){
if(item.className()=='android.widget.FrameLayout')
{
var account_name = item.find(className("android.widget.TextView"));
if(num>0&&subscribed_accounts.indexOf(account_name[0].text())==-1)//说明数组中不存在这个元素,则订阅他
{
num--;
subscribed_accounts.push(account_name[0].text());
subscribe_icon = item.find(className("android.widget.LinearLayout"))[1];
// log("subscribe_icon:"+subscribe_icon)
toastLog("正在订阅...");
subscribe_icon.click();
sleep(2000);
}
else if(item.className()=='android.widget.LinearLayout')//遍历到底了
{
bottom_flag = 1;
return;
}
}
});
if(bottom_flag)
{
toastLog("强国号都已经订阅完啦...");
break;
}
accounts_pool.scrollDown();
sleep(2000);
accounts_pool = className("android.widget.ListView").depth(13).findOne();
}
}
else//如果曾经订阅过,那么需要先找到订阅了哪些
{
var list_view = className("android.widget.ListView").depth(11).findOne();
// log(list_view)
var bottom_flag = 0;
while(list_view!=null)
{
sleep(1000);
var frameLayoutList = list_view.children();
// log('frameLayoutList:'+frameLayoutList)
frameLayoutList.forEach(function(item,index){
if(item.className()=='android.widget.FrameLayout')
{
// log(item)
var account_name = item.find(className("android.widget.TextView"));
// log('已订阅:'+account_name[0].text())
if(subscribed_accounts.indexOf(account_name[0].text())==-1)//说明数组中不存在这个元素
{
subscribed_accounts.push(account_name[0].text());
}
}
else if(item.className()=='android.widget.LinearLayout')//遍历到底了
{