1
1
// ==UserScript==
2
2
// @name 不学习何以强国-beta
3
3
// @namespace http://tampermonkey.net/
4
- // @version 20211216
4
+ // @version 20211221
5
5
// @description 问题反馈位置: https://github.com/TechXueXi/techxuexi-js/issues 。读文章,看视频,做习题。
6
6
// @author techxuexi ,荷包蛋。
7
7
// @match https://www.xuexi.cn
@@ -61,10 +61,14 @@ var pause = false;//是否暂停答题
61
61
var examWeeklyPageNo = 1 ;
62
62
//每周答题总页码
63
63
var examWeeklyTotalPageCount = null ;
64
+ //每周答题开启逆序答题: false: 顺序答题; true: 逆序答题
65
+ var examWeeklyReverse = false ;
64
66
//专项答题当前页码
65
67
var examPaperPageNo = 1 ;
66
68
//专项答题总页码
67
69
var examPaperTotalPageCount = null ;
70
+ //专项答题开启逆序答题: false: 顺序答题; true: 逆序答题
71
+ var examPaperReverse = false ;
68
72
//每周答题,专项答题 请求rate 限制 每 3000ms 一次
69
73
const ratelimitms = 3000 ;
70
74
$ ( document ) . ready ( function ( ) {
@@ -145,8 +149,8 @@ $(document).ready(function () {
145
149
} else {
146
150
}
147
151
} ) ;
148
-
149
-
152
+
153
+
150
154
//获取video标签
151
155
function getVideoTag ( ) {
152
156
let iframe = document . getElementsByTagName ( "iframe" ) [ 0 ] ;
@@ -166,7 +170,7 @@ function getVideoTag() {
166
170
"pauseButton" : pauseButton
167
171
}
168
172
}
169
-
173
+
170
174
//读新闻或者看视频
171
175
//type:0为新闻,1为视频
172
176
async function reading ( type ) {
@@ -353,12 +357,26 @@ function doExamPractice() {
353
357
} , 1000 ) ;
354
358
} ) ;
355
359
}
356
- //获取专项答题列表
357
- function getExamPaper ( ) {
360
+
361
+ //初始化专项答题总页数属性
362
+ async function InitExamPaperAttr ( ) {
363
+ var data = await getExamPaperByPageNo ( 1 ) ; // 默认从第一页获取全部页属性
364
+ if ( data ) {
365
+ // 初始化总页码
366
+ examPaperTotalPageCount = data . totalPageCount ;
367
+ // 若专项答题逆序, 则从最后一页开始
368
+ if ( examPaperReverse ) {
369
+ examPaperPageNo = examPaperTotalPageCount ;
370
+ }
371
+ }
372
+ }
373
+
374
+ //获取指定页数的专项答题列表
375
+ function getExamPaperByPageNo ( examPaperPageNoParam ) {
358
376
return new Promise ( function ( resolve ) {
359
377
$ . ajax ( {
360
378
type : "GET" ,
361
- url : ExamPaperListUrl . replace ( "{pageNo}" , examPaperPageNo ) ,
379
+ url : ExamPaperListUrl . replace ( "{pageNo}" , examPaperPageNoParam ) ,
362
380
xhrFields : {
363
381
withCredentials : true //如果没有这个请求失败
364
382
} ,
@@ -375,21 +393,25 @@ function getExamPaper() {
375
393
} ) ;
376
394
} )
377
395
}
396
+
378
397
//查询专项答题列表看看还有没有没做过的,有则返回id
379
398
async function findExamPaper ( ) {
380
399
var continueFind = true ;
381
400
var examPaperId = null ;
382
- console . log ( "正在寻找未完成的专项答题" )
401
+ console . log ( "初始化专项答题属性" ) ;
402
+ await InitExamPaperAttr ( ) ;
403
+ console . log ( "正在寻找未完成的专项答题" ) ;
383
404
while ( continueFind ) {
384
405
let startTime = Date . now ( ) ;
385
-
386
- await getExamPaper ( ) . then ( async ( data ) => {
406
+
407
+ await getExamPaperByPageNo ( examPaperPageNo ) . then ( async ( data ) => {
387
408
if ( data ) {
388
- if ( examPaperTotalPageCount == null ) {
389
- //如果总页码没初始化,则初始化
390
- examPaperTotalPageCount = data . totalPageCount ;
391
- }
392
409
let examPapers = data . list ; //获取专项答题的列表
410
+ if ( examPaperReverse ) {
411
+ // 若开启逆序答题, 则反转专项答题列表
412
+ console . log ( "专项答题,开启逆序模式,从最早的题目开始答题" ) ;
413
+ examPapers . reverse ( ) ;
414
+ }
393
415
for ( let j = 0 ; j < examPapers . length ; j ++ ) {
394
416
//遍历查询有没有没做过的
395
417
if ( examPapers [ j ] . status != 2 ) { //status: 1为"开始答题" , 2为"重新答题"
@@ -401,17 +423,19 @@ async function findExamPaper() {
401
423
}
402
424
if ( ! continueFind ) {
403
425
} else {
404
- //增加页码
405
- examPaperPageNo ++ ;
406
- if ( examPaperTotalPageCount == null || examPaperPageNo > examPaperTotalPageCount ) {
426
+ //增加页码 (若开启逆序翻页, 则减少页码)
427
+ examPaperPageNo += examPaperReverse ? - 1 : 1 ;
428
+ if ( examPaperTotalPageCount == null
429
+ || examPaperPageNo > examPaperTotalPageCount
430
+ || examPaperPageNo < 1 ) {
407
431
//已经找完所有页码,还是没找到,不再继续查找
408
432
continueFind = false ;
409
433
}
410
434
}
411
435
} else {
412
436
continueFind = false ;
413
437
}
414
-
438
+
415
439
//fix code = 429
416
440
let remainms = Date . now ( ) - startTime ;
417
441
if ( remainms < ratelimitms ) {
@@ -442,12 +466,26 @@ function doExamPaper() {
442
466
} ) ;
443
467
} )
444
468
}
445
- //获取每周答题列表
446
- function getExamWeekly ( ) {
469
+
470
+ //初始化每周答题总页数属性
471
+ async function InitExamWeeklyAttr ( ) {
472
+ var data = await getExamWeeklyByPageNo ( 1 ) ; // 默认从第一页获取全部页属性
473
+ if ( data ) {
474
+ // 初始化总页码
475
+ examWeeklyTotalPageCount = data . totalPageCount ;
476
+ // 若每周答题逆序, 则从最后一页开始
477
+ if ( examWeeklyReverse ) {
478
+ examWeeklyPageNo = examWeeklyTotalPageCount ;
479
+ }
480
+ }
481
+ }
482
+
483
+ //获取指定页数的每周答题列表
484
+ function getExamWeeklyByPageNo ( examWeeklyPageNoParam ) {
447
485
return new Promise ( function ( resolve ) {
448
486
$ . ajax ( {
449
487
type : "GET" ,
450
- url : ExamWeeklyListUrl . replace ( "{pageNo}" , examWeeklyPageNo ) ,
488
+ url : ExamWeeklyListUrl . replace ( "{pageNo}" , examWeeklyPageNoParam ) ,
451
489
xhrFields : {
452
490
withCredentials : true //如果没有这个请求失败
453
491
} ,
@@ -464,21 +502,29 @@ function getExamWeekly() {
464
502
} ) ;
465
503
} )
466
504
}
505
+
467
506
//查询每周答题列表看看还有没有没做过的,有则返回id
468
507
async function findExamWeekly ( ) {
469
508
var continueFind = true ;
470
509
var examWeeklyId = null ;
471
- console . log ( "正在寻找未完成的每周答题" )
510
+ console . log ( "初始化每周答题" ) ;
511
+ await InitExamWeeklyAttr ( ) ;
512
+ console . log ( "正在寻找未完成的每周答题" ) ;
472
513
while ( continueFind ) {
473
514
let startTime = Date . now ( ) ;
474
- await getExamWeekly ( ) . then ( async ( data ) => {
515
+ await getExamWeeklyByPageNo ( examWeeklyPageNo ) . then ( async ( data ) => {
475
516
if ( data ) {
476
- if ( examWeeklyTotalPageCount == null ) {
477
- //如果总页码没初始化,则初始化
478
- examWeeklyTotalPageCount = data . totalPageCount ;
517
+ if ( examWeeklyReverse ) {
518
+ // 若开启逆序答题, 则反转列表
519
+ console . log ( "每周答题,开启逆序模式,从最早的题目开始答题" ) ;
520
+ data . list . reverse ( ) ;
479
521
}
480
522
for ( let i = 0 ; i < data . list . length ; i ++ ) {
481
523
let examWeeks = data . list [ i ] . practices ; //获取每周的测试列表
524
+ if ( examWeeklyReverse ) {
525
+ // 若开启逆序, 则反转每周的测试列表
526
+ examWeeks . reverse ( ) ;
527
+ }
482
528
for ( let j = 0 ; j < examWeeks . length ; j ++ ) {
483
529
//遍历查询有没有没做过的
484
530
if ( examWeeks [ j ] . status != 2 ) { //status: 1为"开始答题" , 2为"重新答题"
@@ -496,16 +542,18 @@ async function findExamWeekly() {
496
542
if ( ! continueFind ) {
497
543
} else {
498
544
//增加页码
499
- examWeeklyPageNo ++ ;
500
- if ( examWeeklyTotalPageCount == null || examWeeklyPageNo > examWeeklyTotalPageCount ) {
545
+ examWeeklyPageNo += examWeeklyReverse ? - 1 : 1 ;
546
+ if ( examWeeklyTotalPageCount == null
547
+ || examWeeklyPageNo > examWeeklyTotalPageCount
548
+ || examWeeklyPageNo < 1 ) {
501
549
//已经找完所有页码,还是没找到,不再继续查找
502
550
continueFind = false ;
503
551
}
504
552
}
505
553
} else {
506
554
continueFind = false ;
507
555
}
508
-
556
+
509
557
//fix code = 429
510
558
let remainms = Date . now ( ) - startTime ;
511
559
if ( remainms < ratelimitms ) {
@@ -982,7 +1030,7 @@ async function start() {
982
1030
taskProgress = await getToday ( ) ;
983
1031
if ( taskProgress != null ) {
984
1032
console . log ( "开始学习" )
985
-
1033
+
986
1034
//检查新闻
987
1035
if ( settings [ 0 ] && taskProgress [ 0 ] . currentScore != taskProgress [ 0 ] . dayMaxScore ) {
988
1036
tasks [ 0 ] = false ; //只要还有要做的,就当做没完成
@@ -992,7 +1040,7 @@ async function start() {
992
1040
} else {
993
1041
tasks [ 0 ] = true ;
994
1042
}
995
-
1043
+
996
1044
//检查视频
997
1045
let temp = parseInt ( taskProgress [ 1 ] . dayMaxScore - taskProgress [ 1 ] . currentScore ) ;
998
1046
let temp2 = parseInt ( taskProgress [ 3 ] . dayMaxScore - taskProgress [ 3 ] . currentScore ) ;
@@ -1004,7 +1052,7 @@ async function start() {
1004
1052
} else {
1005
1053
tasks [ 1 ] = true ;
1006
1054
}
1007
-
1055
+
1008
1056
//检查每日答题
1009
1057
if ( settings [ 6 ] && taskProgress [ 6 ] . currentScore != taskProgress [ 6 ] . dayMaxScore ) {
1010
1058
tasks [ 2 ] = false ; //只要还有要做的,就当做没完成
@@ -1013,7 +1061,7 @@ async function start() {
1013
1061
} else {
1014
1062
tasks [ 2 ] = true ;
1015
1063
}
1016
-
1064
+
1017
1065
//检查每周答题
1018
1066
if ( settings [ 2 ] && taskProgress [ 2 ] . currentScore == 0 ) {
1019
1067
tasks [ 3 ] = false ; //只要还有要做的,就当做没完成
@@ -1026,7 +1074,7 @@ async function start() {
1026
1074
} else {
1027
1075
tasks [ 3 ] = true ;
1028
1076
}
1029
-
1077
+
1030
1078
//检查专项练习
1031
1079
if ( settings [ 5 ] && taskProgress [ 5 ] . currentScore == 0 ) {
1032
1080
tasks [ 4 ] = false ; //只要还有要做的,就当做没完成
@@ -1039,7 +1087,7 @@ async function start() {
1039
1087
} else {
1040
1088
tasks [ 4 ] = true ;
1041
1089
}
1042
-
1090
+
1043
1091
if ( tasks [ 0 ] && tasks [ 1 ] && tasks [ 2 ] && tasks [ 3 ] && tasks [ 4 ] ) {
1044
1092
//如果检查都做完了,就不用继续了
1045
1093
continueToDo = false ;
0 commit comments