NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name 人邮学院自动学习脚本
// @namespace yumi1.top
// @version 1.0
// @description 人邮学院自动看视频和答题 赣南科技学院 自动学习脚本 https://gnust.rymooc.com/
// @author yichen
// @match https://gnust.rymooc.com/*
// @icon https://www.yumi1.top/img/3.ico
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
class CourseManager {
constructor() {
this.lessonIds = [];
this.currentIndex = 0;
this.finish = false;
this.maxAttempts = 5; // 最大尝试次数
this.loopCount = 0; // 当前尝试次数
}
// 初始化
initialize() {
try {
// 判断是否在课程列表页面
if (window.location.href.includes('/course/show/50')) {
console.log('当前在课程列表页面,开始获取课程ID...');
// 清理旧数据
localStorage.removeItem('lessonIds');
localStorage.removeItem('currentIndex');
this.getLessonIds();
if (this.lessonIds.length > 0) {
this.startLearning();
} else {
console.error('未能获取到课程列表');
}
}
// 判断是否在学习页面
else if (window.location.href.includes('/course/learn/50')) {
console.log('当前在学习页面,处理视频...');
// 确保有存储的课程数据
const storedIds = localStorage.getItem('lessonIds');
if (!storedIds) {
console.log('未找到课程数据,返回课程列表页面...');
window.location.href = '/course/show/50';
return;
}
this.handleVideo();
}
} catch (error) {
console.error('初始化时发生错误:', error);
}
}
// 获取所有课程ID
getLessonIds() {
const lessonItems = document.querySelectorAll('.lesson-item');
lessonItems.forEach(item => {
// 获取data-id属性
const id = item.getAttribute('data-id');
// 检查是否有考试标记
const isExam = item.querySelector('.type');
if (id && !isExam) {
this.lessonIds.push(id);
console.log(`获取到课程ID: ${id}`);
}
});
// 保存到localStorage
localStorage.setItem('lessonIds', JSON.stringify(this.lessonIds));
localStorage.setItem('currentIndex', '0');
console.log('总共获取到 ' + this.lessonIds.length + ' 个课程');
}
// 开始学习流程
startLearning() {
const firstId = this.lessonIds[0];
if (firstId) {
console.log('开始第一课...');
window.location.href = `/course/learn/50?lessonId=${firstId}`;
}
}
// 处理视频播放
handleVideo() {
const video = document.querySelector('video');
if (video) {
console.log('找到视频元素');
video.addEventListener('play', () => {
console.log('正在播放');
setTimeout(1000)
video.play();
video.currentTime = video.duration;
});
this.checkVideoFinished();
} else {
console.log('未找到视频元素');
}
}
// 检测视频完成
checkVideoFinished() {
const checkInterval = setInterval(() => {
const finishedElement = document.querySelector("#CourseFinished");
const video = document.querySelector('video');
if (finishedElement || (video && (video.ended || video.currentTime >= video.duration - 1))) {
clearInterval(checkInterval);
console.log('视频播放完成,准备答题...');
this.finish = true;
// 视频完成后调用答题流程
this.startAnswerProcess();
}
}, 1000);
}
// 新增:开始答题流程
startAnswerProcess() {
console.log('开始答题流程');
this.clickNextButton();
}
// 修改:点击下一页按钮
clickNextButton() {
const nextButton = document.querySelector('.btn-nextLessonItem');
if (nextButton) {
console.log('找到下一页按钮,点击...');
nextButton.click();
setTimeout(() => this.answerQuestion(), 1000);
} else {
console.log('未找到下一页按钮');
if (this.loopCount < this.maxAttempts) {
console.log(`尝试点击下一页按钮 (${this.loopCount + 1}/${this.maxAttempts})`);
this.loopCount++;
setTimeout(() => this.clickNextButton(), 1000);
} else {
console.log('已达到最大尝试次数,进入下一课');
this.goToNextLesson();
}
}
}
// 修改:答题方法
answerQuestion() {
const checkbox = document.querySelector('.choice-item');
if (checkbox) {
console.log('找到选项,开始答题');
checkbox.click();
setTimeout(() => this.submitAnswer(), 1000);
} else {
const correctAnswer = document.querySelector('#radio2');
if (correctAnswer) {
console.log('找到正确答案选项');
correctAnswer.click();
setTimeout(() => this.submitAnswer(), 1000);
} else {
console.log('未找到答题选项,可能不是答题页面');
this.goToNextLesson();
}
}
}
// 修改:提交答案
submitAnswer() {
const submitButton = document.querySelector('.btn-primary');
if (submitButton) {
console.log('提交答案');
submitButton.click();
// 等待答题结果,然后进入下一课
setTimeout(() => this.goToNextLesson(), 2000);
} else {
console.log('未找到提交按钮');
this.goToNextLesson();
}
}
// 跳转到下一课
goToNextLesson() {
try {
if (!this.finish) {
console.log('视频未完成,不进行跳转');
return;
}
const ids = JSON.parse(localStorage.getItem('lessonIds') || '[]');
let currentIndex = parseInt(localStorage.getItem('currentIndex') || '0');
if (!Array.isArray(ids) || ids.length === 0) {
console.error('未找到课程列表,重新获取...');
this.getLessonIds();
return;
}
currentIndex++;
if (currentIndex < ids.length) {
localStorage.setItem('currentIndex', currentIndex.toString());
const nextLessonId = ids[currentIndex];
console.log(`准备进入下一课 (${currentIndex + 1}/${ids.length}), 课程ID: ${nextLessonId}`);
setTimeout(() => {
const nextUrl = `/course/learn/50?lessonId=${nextLessonId}`;
console.log('跳转到:', nextUrl);
window.location.href = nextUrl;
this.finish = false;
}, 2000);
} else {
console.log('所有课程已完成!');
localStorage.removeItem('lessonIds');
localStorage.removeItem('currentIndex');
}
} catch (error) {
console.error('goToNextLesson发生错误:', error);
this.initialize();
}
}
}
// 启动脚本
const courseManager = new CourseManager();
console.log('脚本启动');
courseManager.initialize();
})();