gank人邮学院脚本

人邮学院自动看视频和答题

目前為 2023-10-19 提交的版本,檢視 最新版本

// ==UserScript==
// @name         gank人邮学院脚本
// @namespace    yumi1.top
// @version      0.1
// @description  人邮学院自动看视频和答题
// @author       yichen
// @match        https://gnust.rymooc.com/*
// @icon         https://www.yumi1.top/img/3.ico
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var loopCount = 0; // 循环计数器
    var maxAttempts = 3; // 最大尝试次数

    // 获取当前页面链接并去除 #
    function getCurrentURL() {
        var currentURL = window.location.href;
        if (currentURL.includes('#')) {
            currentURL = currentURL.split('#')[0];
        }
        return currentURL;
    }

    // 获取视频元素并自动播放
    function playVideo() {
        var video = document.querySelector('video');
        console.log(video);
        if (video) {
            video.addEventListener('play', function() {
                console.log('正在播放');
                video.playbackRate = 16;
            });
            video.play();
        } else {
            console.log('未找到视频元素');
        }
    }

    // 快进到视频结束
    function skip() {
        var videos = document.getElementsByTagName('video');
        for (var i = 0; i < videos.length; i++) {
            var video = videos[i];
            video.currentTime = video.duration;
        }
    }

    // 检查视频是否播放完毕
    function checkVideoEnded() {
        var video = document.querySelector('video');
        if (video && video.ended) {
            console.log('视频播放完毕');
            clickNextButton();
            clearInterval(videoInterval); // 达到目标后停止循环
        }
    }

    // 点击下一页按钮
    function clickNextButton() {
        var nextButton = document.querySelector('.btn-nextLessonItem');
        if (nextButton) {
            nextButton.click();
            setTimeout(answerQuestion, 100); // 延迟一秒后自动答题
        } else {
            console.log('未找到下一页按钮');
            if (loopCount < maxAttempts) {
                console.log('尝试点击下一页按钮');
                setTimeout(clickNextButton, 100); // 延迟一秒后再次尝试点击下一页按钮
                loopCount++;
            } else {
                console.log('已达到最大尝试次数');
                clearInterval(loopInterval); // 达到最大尝试次数后停止循环
            }
        }
    }

    // 答题
    function answerQuestion() {
    var checkbox = document.querySelector('.choice-item');
    if (checkbox) {
        checkbox.click();
        console.log('已选择答案');
        setTimeout(submitAnswer, 100); // 延迟一秒后自动提交答案
    } else {
        console.log('未找到答题选项');
        var correctAnswer = document.querySelector('#radio2'); // 获取正确答案的<input>元素
        if (correctAnswer) {
            correctAnswer.click(); // 模拟点击正确答案的<input>元素
            console.log('已选择正确答案');
            setTimeout(submitAnswer, 100); // 延迟一秒后自动提交答案
        } else {
            console.log('未找到正确答案');
        }
    }
}

    // 提交答案
    function submitAnswer() {
        var submitButton = document.querySelector('.btn-primary');
        if (submitButton) {
            submitButton.click();
            console.log('已提交答案');
            setTimeout(clickNextButton, 100); // 延迟一秒后点击下一页按钮
        } else {
            console.log('未找到提交按钮');
        }
    }

    // 前往下一课
    function goToNextLesson() {
        var currentURL = getCurrentURL();
        var lessonId = getLessonIdFromURL(currentURL);
        if (lessonId !== null) {
            var nextLessonId = parseInt(lessonId) + 1;
            var nextURL = currentURL.replace(lessonId, nextLessonId);
            window.location.href = nextURL;
        } else {
            console.log('无法获取课程ID');
        }
    }

    // 从URL中获取课程ID
    function getLessonIdFromURL(url) {
        var lessonId = null;
        var regex = /lessonId=(\d+)/;
        var match = url.match(regex);
        if (match && match[1]) {
            lessonId = match[1];
        }
        return lessonId;
    }

    // 定义循环函数
    function startLoop() {
        if (loopCount < 2) { // 控制循环次数
            playVideo();
            skip();
            checkVideoEnded();
            loopCount++;
        } else {
            clearInterval(loopInterval); // 达到循环次数后停止循环
        }
    }

    var loopInterval = setInterval(startLoop, 200);
    var videoInterval = setInterval(checkVideoEnded, 200);

})();