Greasy Fork

Greasy Fork is available in English.

autoCX学习通自动刷课脚本

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

当前为 2024-04-02 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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;
	}
}