当前位置:
首页 > 网站开发 > JavaScript >
-
JavaScript教程之一个基于chrome扩展的自动答题器(4)
108 }
109 //存放到本地存储空间
110 localStorage['config']=JSON.stringify(config);
111 };
112 $('#msgFromContent').val('');
113 },500);
114
115 //点击再次答题时再运行一次
116 $('.oneMore').click(function(){
117 ans_plus(config['set']);
118 })
119
120 //如果处于模拟答题或者正式答题,则执行一次
121 if(window.location.pathname=='/monidati.html' | window.location.pathname=='/kaishijingsai.html')
122 {
123 ans_plus(config['set']);
124 };
125
126 //自动获取分享后的两次机会
127 $('#lji .dati').click(function()
128 {
129 //如果是登录状态,就自动获取机会
130 if($.getUrlParam('h'))
131 {
132 $('.icon-wechat').click();
133 $('.icon-wechat').click();
134 $('#jiathis_weixin_modal').hide();
135 }
136 return false;
137 });
138 setTimeout(()=>$('#lji .dati').click(),500);
139
140 //console.log($('.jtico_weixin'));
141 //$('.jtico_weixin').click();
142
143 //根据url中a的值判断是否需要自动答题
144 if($('#lji span').eq(0).html()>0)
145 {
146 if($.getUrlParam('a')==1)
147 //将config中的自动答题控制打开,
148 config['set']['auto_ans']=1;
149 //localStorage['config']=JSON.stringify(config);
150 setTimeout(()=>$('#lbuts').click(),1000);
151 }
152
153 });
154
155
156
157 //根据设置进行答题
158 function ans_plus(conf)
159 {
160 if(!conf['dtime'])
161 conf['dtime']=3;
162
163 //关闭自动作答功能
164 //conf['auto_ans']=0;
165
166 var dtime=parseInt(conf['dtime']*1000+500*Math.random());//做题间隔
167 var err=0;//匹配错误指示器
168
169 //基准x,y坐标,伪造回传数据
170 var posx=Math.floor(800+Math.random()*200);
171 var posy=Math.floor(400+Math.random()*140);
172
173 if(dtime<1200)
174 {
175 dtime=1200;
176 }
177
178 //点击交卷按钮时解锁交卷功能
179 $('.W_jiaoquancol').click(function(){$(this).removeClass('W_jiaoquancol')});
180 //console.log(dtime);
181 if(conf['auto_ans']==1 | conf['sign_ans']==1 |conf['sign_ans_mouseover']==1)
182 {
183
184 //解锁上一题下一题
185 //setInterval(()=>{$('.W_bgcol').removeClass('W_bgcol');},500);
186
187 jQuery('ul.W_ti_ul li').each(
188 function()
189 {
190 //console.log(dtime);
191 var target='';
192 var li=jQuery(this);
193 var logtxt='';
194
195 //题号
196 var questnum=li.find('.w_fz18').eq(0).html();
197 logtxt=questnum+'.'+logtxt;
198
199 //题目类型,单选题,多选题
200 var questtype=li.find('.w_fz18').eq(1).html();
201 logtxt=logtxt+'〔'+questtype+'〕';
202 //题目
203 var quest=li.find('.w_fz18').eq(2).html().replace(/[ \r\n ]/g,"");
204 for(i=0;i<anslist.length;i++)
205 {
206 if(anslist[i][0]==quest)
207 {
208 target=anslist[i][1];
209 logtxt=logtxt+'题目:'+anslist[i][0]+'%c';
210 break;
211 }
212 }
213
214 //判断是否匹配,如果不匹配就报错
215 if(target=='')
216 {
217 //alert('匹配试题出现错误,请更新版本或联系作者');
218 err++;
219 //自动作答的话就点击下一题
220 logtxt=logtxt+'题目:'+quest;
221 console.log("%c"+logtxt,'color:red')
222 if(conf['sign_ans']==1)
223 {
224 setTimeout(()=>{$('.w_btn_tab_down').eq(0).click();},questnum*dtime);
225 }
226 return true;
227 }
228
229 //查找答案
230 li.find('label').each(
231 function()
232 {
233 var label=jQuery(this);
234 var labertxt=label.find('sapn').eq(0).html();
235 labertxt=labertxt.replace(/[ABCD. \r\n ]/g,'');
236
237 if(questtype=='单选题' & target==labertxt)
238 {
239 logtxt=logtxt+'答案:'+labertxt+';';
240 //标红答案
241 if(conf['sign_ans']==1)
242 label.find('sapn').eq(0).css('color','red');
243 //鼠标滑过正确答案时选中
244 if(conf['sign_ans_mouseover']==1)
245 {
246 label.find('sapn').eq(0).mouseover(function(){
247 $(this).click();
248 $('.W_bgcol').removeClass('W_bgcol');
249 $('.W_kuan li').eq(questnum-1).addClass('activess');
250 if(questnum==20)
251 {
252 $('.W_jiaoquancol').removeClass('W_jiaoquancol');
253 }
254 })
255 }
256 //自动作答
257 if(conf['auto_ans']==1)
258 {
259 setTimeout(()=>{
260
261 label.find('sapn').eq(0).click();
262
263 //解除上一题下一题和题目序号的锁定
264 $('.W_bgcol').removeClass('W_bgcol');
265 $('.W_kuan li').eq(questnum-1).addClass('activess');
266 if(questnum==20)
267 {
268 $('.W_jiaoquancol').removeClass('W_jiaoquancol');
269 }
270 },(questnum-0.5)*dtime);
271 }
272 return false;
273 }
274 else if(questtype=='多选题' & target.indexOf(labertxt)>-1)
275 {
276 //标红答案
277 logtxt=logtxt+'答案:'+labertxt+';';
278 //标红答案
279 if(conf['sign_ans']==1)
280 label.find('sapn').eq(0).css('color','red');
281 //鼠标滑过正确答案时选中
282 if(conf['sign_ans_mouseover']==1)
283 {
284 label.find('sapn').eq(0).mouseover(function(){
285 $(this).click();
286 $('.W_bgcol').removeClass('W_bgcol');
287 $('.W_kuan li').eq(questnum-1).addClass('activess');
288 if(questnum==20)
289 {
290 $('.W_jiaoquancol').removeClass('W_jiaoquancol');
291 }
292 })
293 }
294 if(conf['auto_ans']==1)
295 {
296 //自动作答
297 setTimeout(()=>{
298 label.find('sapn').eq(0).click();
299 //解除上一题下一题和题目序号的锁定
300 $('.W_bgcol').removeClass('W_bgcol');
301 $('.W_kuan li').eq(questnum-1).addClass('activess');
302 if(questnum==20)
303 {
304 $('.W_jiaoquancol').removeClass('W_jiaoquancol');
305 }
306
307 },(questnum-0.5)*dtime)
309
310
311 }
312
313
314 }
315
316 }
317 );
318 //自动作答的话就点击下一题
319 if(conf['auto_ans']==1)
320 {
321 setTimeout(()=>{
322 $('.w_btn_tab_down').eq(0).click();
323 if("undefined" != typeof ClickButton)
324 ClickButton({'button':0,'clientX':Math.floor(posx+Math.random()*50),'clientY':Math.floor(posy+Math.random()*15)});
325 },questnum*dtime);
326 }
327
328 console.log(logtxt,'color:red');
329 }
330 );
331 }
332 //如果配有匹配错误,则自动交卷
333 if(conf['auto_ans']==1 & err==0)
334 {
335 setTimeout(()=>{$('.jiaojuan').eq(0).click();},51*dtime);
336 }
337 //if(err>0)
338 //alert('有'+err+'道题目匹配出错,请手动作答');
339 };
inject.js则是根据content上级传过来的指令进行动作。
window.anslist为提前写入到程序中的基础题库,减少在线更新时数据通讯量;
因为只能从content接收指令,所以在inject中也保存了一份用户设置;
其中的ans_plus()函数则是整个答题器的核心,也是我最开始写的脚本部分。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式