-
Notifications
You must be signed in to change notification settings - Fork 1
/
xuexi.js
206 lines (179 loc) · 8.41 KB
/
xuexi.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
// ==UserScript==
// @name 学习强国答题辅助工具
// @namespace http://tampermonkey.net/
// @version 0.6.2
// @description 学习强国,自动答题测试工具,可测试每题,每周,专题自动答题,本代码公开无加密,仅用于学习js所用。
// @author You
// @match https://pc.xuexi.cn/points/exam-practice.html*
// @match https://pc.xuexi.cn/points/exam-weekly-detail.html*
// @match https://pc.xuexi.cn/points/exam-paper-detail.html*
// @match https://pc.xuexi.cn/points/login.html*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
function doit()
{
var nextAll=document.querySelectorAll(".ant-btn");
var next=nextAll[0];
if(nextAll.length==2)//俩按钮,说明有个按钮是交卷。
{
next=nextAll[1];
}
if(next.disabled)
{
document.querySelector(".tips").click();
//所有提示
var allTips=document.querySelectorAll("font[color=red]");
//单选多选时候的按钮
var buttons=document.querySelectorAll(".q-answer");
//填空时候的那个textbox,这里假设只有一个填空
var textboxs=document.querySelectorAll("input");
//问题类型
var qType= document.querySelector(".q-header").textContent;
qType=qType.substr(0,3)
switch(qType)
{
case"填空题":
//第几个填空
var mevent=new Event('input',{bubbles:true});
if( textboxs.length>1)//若不止是一个空
{
//填空数量和提示数量是否一致
if(allTips.length==textboxs.length)
{
for(let i=0;i< allTips.length;i++)//数量一致,则一一对应。
{
let tip=allTips[i];
let tipText=tip.textContent;
if(tipText.length>0)
{
//通过设置属性,然后立即让他冒泡这个input事件.
//否则1,setattr后,内容消失.
//否则2,element.value=124后,属性值value不会改变,所以冒泡也不管用.
textboxs[i].setAttribute("value",tipText);
textboxs[i] .dispatchEvent(mevent);
// break;
}
}
}
else
{
//若填空数量和提示数量不一致,那么,应该都是提示数量多。
if(allTips.length>textboxs.length)
{
var lineFeed=document.querySelector('.line-feed').textContent;//这个是提示的所有内容,不仅包含红色答案部分。
let n=0;//计数,第几个tip。
for(let j=0;j<textboxs.length;j++)//多个填空
{
let tipText=allTips[n].textContent;
let nextTipText="";
do{
tipText+=nextTipText;
if(n<textboxs.length-1)
{
n++;
nextTipText=allTips[n].textContent;
}
else
{
nextTipText="结束了,没有了。";
}
}
while(lineFeed.indexOf(tipText+nextTipText));
textboxs[j].setAttribute("value",tipText);
textboxs[j] .dispatchEvent(mevent);
}
}
else
{
//提示数量少于填空数量,则我无法分析
//你人工操作吧。不易拆分出答案。
}
}
}
else if(textboxs.length==1)
{//只有一个空,直接把所有tips合并。
let tipText="";
for(let i=0;i< allTips.length;i++)
{
tipText += allTips[i].textContent;
}
textboxs[0].setAttribute("value",tipText);
textboxs[0] .dispatchEvent(mevent);
break;
}
else
{
//怕有没空白的情况。
}
break;
case "多选题":
for(let js=0;js<buttons.length;js++)//循环选项列表。用来点击
{
let cButton=buttons[js];
for(let i=0;i< allTips.length;i++)//循环提示列表。
{
let tip=allTips[i];
let tipText=tip.textContent;
if(tipText.length>0)//提示内容长度大于0
{
let cButtonText=cButton.textContent;//选项按钮的内容
//循环对比点击
if(cButtonText.indexOf(tipText)>-1||tipText.indexOf(cButtonText)>-1)
{
cButton.click();
break;
}
}
}
}
break;
case "单选题":
//单选,所以所有的提示,其实是同一个。有时候,对方提示会分成多个部分。
//比如2018年10月第一周答题第二题。
//case 块里不能直接用let。所以增加了个if。
if(true)
{
//把红色提示组合为一条
let tipText="";
for(let i=0;i< allTips.length;i++)
{
tipText += allTips[i].textContent;
}
if(tipText.length>0)
{
//循环对比后点击
for(let js=0;js<buttons.length;js++)
{
let cButton=buttons[js];
let cButtonText=cButton.textContent;
//通过判断是否相互包含,来确认是不是此选项
if(cButtonText.indexOf(tipText)>-1||tipText.indexOf(cButtonText)>-1)
{
cButton.click();
break;
}
}
}
}
break;
default:
break;
}
document.querySelector(".tips").click();
}
else
{
if(next.textContent!="再练一次"&&next.textContent!="再来一组"&&next.textContent!="查看解析"){
next.click();
}
}
};
// setTimeout(doit, 3000);
window.setInterval(doit, 3000);
// document.querySelector("#app > div > div.layout-body > div > div.detail-body > div.question > div.q-footer > span").click();
// document.querySelector("#app > div > div.layout-body > div > div.detail-body > div.question > div.q-footer > span").click();
// alert("abcdefg");
})();