以激动点击课程为案例复习一下基本前端,容易涉及的问题包括如何提取object类的数字,setTimeout为什么不起作用?
具体思路是,此处会立刻选中符合条件的页面元素打开,然后1小时后会刷新页面,相应地播放页面也会在1小时后关闭,然后检查是否大于要求的课时数,如果大于就选下一个合条件的课时。
关于技巧,因为此处的设置,所选课程后面的课程虽然也符合条件,起码在一小时后才会发生,此处通过增加了time6060*1000设置后面的课程都是发生在一个小时候后,所有不用担心会并发点击冲突,然后就是自循环地关闭检查关闭检查,当然这个播放页面要设置更加详细点,此处是配合自动答题插件使用的。
///-----------【选课页面】隔1小时点击一次页面--------------------------------------------------
function Run(ClassPara,time) {
setTimeout(function(){
//注,将需求函数SelectRan的参数time和下方的“time*1000”是同一个
//以此方式绑在一起
console.log( ClassPara[time].innerText )
// 第三步,设置点击的元素
// ClassPara[time].childNodes[3].click()
// 第二步 ,设置每一个间隔点击的时间 1000为一秒
console.log( "-----------------" )
console.log( time )
console.log( "-----------------" )
console.log( document.getElementsByClassName("titleName_content")[time].innerText )
//提取已学课时数字,要求所学课时数字对比,小于就点击
if( document.getElementsByClassName("titleName")[time].childNodes[5].childNodes[1].innerText
>=
document.getElementsByClassName("titleName")[time].childNodes[5].childNodes[2].data.replace(/[^\d]/g, "") ){
stopIndex = time;
console.log("最后一项符合条件的数字是")
console.log(stopIndex)
}
if( document.getElementsByClassName("titleName")[time].childNodes[5].childNodes[1].innerText
<
document.getElementsByClassName("titleName")[time].childNodes[5].childNodes[2].data.replace(/[^\d]/g, "") ){
console.log( document.getElementsByClassName("titleName")[time].childNodes[5].childNodes[0].data )
console.log( document.getElementsByClassName("titleName")[time].childNodes[5].childNodes[1].innerText )
console.log( document.getElementsByClassName("titleName")[time].childNodes[5].childNodes[2].data )
console.log( document.getElementsByClassName("titleName")[time].childNodes[5].childNodes[2].data.replace(/[^\d]/g, "") )
// 设置点击的元素
setTimeout(function(){
console.log("点击一次")
console.log(time)
console.log("个")
ClassPara[time].childNodes[3].click()
},5000+(time-stopIndex-1)*5000)
//time是符号条件的所在向,所以减去不符合条件所在向的数量即可,这个数量的获取全局变量捕捉每一次循环,并记录即可
// 思路是,此处会立刻选中符合条件的页面元素打开,然后1小时后会刷新页面,相应地播放页面也会关闭,然后检查是否大于要求的课时数,如果大于就选下一个合条件的课时,因为此处的设置,所选课程后面的课程起码在一小时才会发生,但增加了time*60*60*1000设置后面的课程都是发生在一个小时候后,所有不用担心会并发点击。
}
}, 1000+time*1000)
}
let stopIndex = 0;
// 第一步 :i是从第几个开始 设置一下即可
for (var i=0;i< document.getElementsByClassName("titleName_content").length ;i++){
if( document.getElementsByClassName("titleName_content") ){
Run(document.getElementsByClassName("titleName_content"), i)
}
}
///-----------【进入课程页面】点击一次页面--------------------------------------------------
function Run2(ClassPara,time) {
setTimeout(function(){
//注,将需求函数SelectRan的参数time和下方的“time*1000”是同一个
//以此方式绑在一起
console.log( ClassPara[time].innerText )
// 第三步,设置点击的元素
ClassPara[time].click()
// 第二步 ,设置每一个间隔点击的时间 1000为一秒
}, 1000+time*5000)
}
// 第一步 :i是从第几个开始 设置一下即可
if(document.getElementsByClassName("lessonTitle") .length >0) {
Run2(document.getElementsByClassName("lessonTitle"), 0)
}
///-----------【进入课程学习页面】进入页面自动播放--------------------------------------------------
setTimeout(
function(){
if(document.getElementsByClassName("playerButton")[0]){
document.getElementsByClassName("playerButton")[0].childNodes[0].click()
console.log("点击确认框")
}
}
,2000)
setTimeout(
function(){
if(document.getElementsByClassName("playerStartButton")[0]){
document.getElementsByClassName("playerStartButton") [0].click()
console.log("点击播放")
}
}
,5000)
///-----------看够一个小时就自己关闭
setTimeout(
function(){
if(document.getElementById("video-Player") != null){
window.open('','_self');window.close();
console.log("关闭.....:")
}
}
,60*60*1000)
///-----------一个小时刷新一次 其他页面
setTimeout(
function(){
if(document.getElementById("video-Player") == null){
window.location.reload()
console.log("刷新.....:")
}
}
,65*60*1000)