autoCX学习通自动刷课脚本

autoCX是基于原生js编写的一个网页版学习通刷课脚本,其功能包括但不限于视频快进,ppt快进,章节测试快进(暂不支持自动答题),且脚本支持后台自动刷课。

// ==UserScript==
// @name autoCX学习通自动刷课脚本
// @namespace https://mooc1.chaoxing.com/
// @version 1.0.0
// @description autoCX是基于原生js编写的一个网页版学习通刷课脚本,其功能包括但不限于视频快进,ppt快进,章节测试快进(暂不支持自动答题),且脚本支持后台自动刷课。
// @author undefined205
// @match https://mooc1.chaoxing.com/mycourse/studentstudy*
// @license MIT
// ==/UserScript==

window.onload = function()
{
	runJs();
};

function runJs()
{
	Timer1 = setTimeout(function()
	{	
		var fraDoc_1 = document.getElementById("iframe").contentWindow.document;
		var fraArr = fraDoc_1.getElementsByTagName("iframe");
		var t5 = calT5(fraArr.length);
		var Timer5 = setTimeout(function()
		{
			if(fraArr.length)  //如果本页含有任务点框架
			{
				fastFwd(fraArr,0);
			}else  //如果页面不含有任务点框架
			{
				document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click();  //强制下一节
				var Timer2 = setTimeout(function()
				{
					runJs();
				},500);  //页面刷新等待
			}
		},t5);  //页面初始化加时
	},700);  //页面初始化等待(保证的最小时间)
}

function fastFwd(fraArr,crt_fra_order)  //任务点框架,当前框架序号
{
	var fraDoc_2 = fraArr[crt_fra_order].contentWindow.document;
	
	if(fraDoc_2.getElementsByTagName("video").length)  //如果为视频任务框架
	{
		var vid = fraDoc_2.getElementsByTagName("video")[0];
		vid.addEventListener("ended",function()
		{
			clearInterval(Timer6);  //停止视频自动播放
			var Timer3 = setTimeout(function()
			{
				if(vid.ended)
				{
					if(crt_fra_order == fraArr.length - 1)  //如果是最后一个任务点框架
					{
						document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click();  //强制下一节
						var Timer2 = setTimeout(function()
						{
							runJs();
						},500);  //页面刷新等待
					}else{
						fastFwd(fraArr,crt_fra_order + 1);
					}
				}else
				{
					Timer6 = setInterval(function()
					{
						if(vid.paused)
						{
							vid.play();  //自动播放
						}	
					},100);  //视频暂停状态监听
				}			
			},1300);  //视频结束确认		
		});
		vid.muted = true;  //满足自动播放条件
		vid.play();  //自动播放
		var Timer6 = setInterval(function()
		{
			if(vid.paused)
			{
				vid.play();  //自动播放
			}	
		},100);  //视频自动播放监听
		if(vid.duration)  //视频进度条拉到结尾			
		{
			vid.currentTime = vid.duration;
		}else{
			vid.currentTime = 3600;
		}
		var Timer4 = setTimeout(function()
		{
				if(vid.previousSibling)  //如果不允许拉进度条
				{
					vid.parentNode.addEventListener("seeked", function (event) {  //禁止寻址监听
						event.stopPropagation();
					}, true);
					vid.parentNode.addEventListener("play", function (event) {  //禁止播放监听
						event.stopPropagation();
					}, true);
					if(vid.duration)
					{
						vid.currentTime = vid.duration;
					}else{
						vid.currentTime = 3600;
					}
					vid.currentTime -= 80;
					vid.play();  //自动播放
				}
		},700);  //弹窗延迟检测
	}else if(fraDoc_2.getElementById("panView"))  //如果为ppt任务框架
	{
		var fraDoc_3 = fraDoc_2.getElementById("panView").contentWindow.document;
		var ppt = fraDoc_3.getElementsByTagName("html")[0];
		var pptSta = 0x00;
		var Timer5 = setInterval(function()
		{
			ppt.scrollTop = ppt.scrollHeight;
		},100);  //强制滚动间隔
		var Timer7 = setInterval(function()
		{
			if(ppt.scrollTop - ppt.scrollHeight <= 600)  //二者实际最终差542
			{
				pptSta = (pptSta << 1) + 1;
			}else{
				pptSta = (pptSta << 1) + 0;
			}
			if(pptSta % 16 == 0x0F)  //如果连续四次都检测到ppt结束
			{
				clearInterval(Timer5);
				clearInterval(Timer7);
				if(crt_fra_order == fraArr.length - 1)  //如果是最后一个任务点框架
				{
					document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click();  //强制下一节
					var Timer2 = setTimeout(function()
					{
						runJs();
					},500);  //页面刷新等待
				}else{
					fastFwd(fraArr,crt_fra_order + 1);
				}
			}
		},120);  //ppt结束检测
	}else if(fraDoc_2.getElementById("frame_content"))  //如果为章节检测框架
	{
		//自动答题代码待添加
		if(crt_fra_order == fraArr.length - 1)  //如果是最后一个任务点框架
		{
			document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click();  //强制下一节
			var Timer2 = setTimeout(function()
			{
				runJs();
			},500);  //页面刷新等待
		}else{
			fastFwd(fraArr,crt_fra_order + 1);
		}
	}else  //如果框架类型不明
	{
		console.log("框架类型不明,自动跳过");
		if(crt_fra_order == fraArr.length - 1)  //如果是最后一个任务点框架
		{
			document.getElementsByClassName("jb_btn jb_btn_92 fr fs14 nextChapter")[0].click();  //强制下一节
			var Timer2 = setTimeout(function()
			{
				runJs();
			},500);  //页面刷新等待
		}else{
			fastFwd(fraArr,crt_fra_order + 1);
		}
	}
}

function calT5(fraNum)
{
	if(fraNum == 0)
	{
		return 0;
	}else if(fraNum == 1)
	{
		return 100;
	}else if(fraNum == 2)
	{
		return 600;
	}else if(fraNum == 3)
	{
		return 1100;
	}else if(fraNum >= 4 && fraNum <= 7)
	{
		return 1800;
	}else
	{
		return 2500;
	}
}