学习通浏览器刷课脚本

 学习通刷课太痛苦?试试这个Js脚本

/**
 * 本脚本用于学习通自动刷课,仅做学习用途
 * 转发请注明作者以及来源
 */
/**定义全局变量 */
var array_echelon;//顺序执行梯队
/**定义事件 */
let dealEvent = new Event("redeal", { bubbles: false, cancelable: false });
/**监听事件 */
document.addEventListener("redeal", function () {
    dealAnsEchelon(array_echelon);
});
/**初始化 */
function initAll() {
    console.log("获取当前页面任务中···");
    var ansiframe = window.frames["iframe"].contentWindow.document;//获取任务iframe
    var array_ans = ansiframe.querySelectorAll(".ans-attach-ct");//获取任务数组
    var array_type = getiframesType(array_ans);//获取任务属性
    var array_document = getAlliframesdocument(array_ans);//获取任务数组的document
    array_echelon = distributeAns(array_type, array_document);//获取顺序执行的任务的梯队
    console.log("当前页面任务数量为:" + array_echelon.length);
    /**释放内存 */
    ansiframe = null;
    array_ans = null;
    array_type = null;
    array_document = null;
}
/**工具函数 */
//获取任务属性
function getiframesType(array_ans) {
    var array_iframe_type = new Array();
    for (let ans of array_ans) {
        var jsonstr = ans.querySelector("iframe").getAttribute("data");
        var json = JSON.parse(jsonstr);
        array_iframe_type.push(json.type);
    }
    return array_iframe_type;
}
//获取任务document
function getAlliframesdocument(array_ans) {
    var array_ans_iframe_document = new Array();
    for (let ans of array_ans) {
        array_ans_iframe_document.push(ans.querySelector("iframe").contentWindow.document);
    }
    return array_ans_iframe_document;
}
//搭配document以及相应的执行函数
function joinAns(idocument, handler) {
    var array_temp = new Array();
    array_temp.push(idocument, handler);
    return array_temp;
}
//按任务属性分配执行函数
function distributeAns(array_type, array_document) {
    var array_iframe_echelon = new Array();
    array_type.forEach((type, index) => {
        switch (type) {
            case ".mp4": { array_iframe_echelon.push(joinAns(array_document[index], videoHandler)); break; }
            case ".wmv": { array_iframe_echelon.push(joinAns(array_document[index], videoHandler)); break; }
            case ".avi": { array_iframe_echelon.push(joinAns(array_document[index], videoHandler)); break; }
            case ".mkv": { array_iframe_echelon.push(joinAns(array_document[index], videoHandler)); break; }
            case ".pptx": { array_iframe_echelon.push(joinAns(array_document[index], pptxHandler)); break; }
            case ".pdf": { array_iframe_echelon.push(joinAns(array_document[index], pptxHandler)); break; }
            case ".ppt": { array_iframe_echelon.push(joinAns(array_document[index], pptxHandler)); break; }
            case ".mp3": { array_iframe_echelon.push(joinAns(array_document[index], audioHandler)); break; }
            case ".wav": { array_iframe_echelon.push(joinAns(array_document[index], audioHandler)); break; }
            default: { array_iframe_echelon.push(joinAns(array_document[index], ignoreAns)); break; }
        }
    });
    return array_iframe_echelon;
}
//处理单个任务
function dealSingleAns(singleans) {
    singleans[1](singleans[0]);
}
/**执行函数 */
//直接跳过
function skipChapter() {
    console.log("跳过章节");
    var chapter_next = document.querySelector("#prevNextFocusNext");
    chapter_next.click();
    setTimeout(function () {
        var tip = document.querySelector(".maskDiv.jobFinishTip.maskFadeOut");
        if (tip != null) {
            var tip_nextChapter = document.querySelector(".jb_btn.jb_btn_92.fr.fs14.nextChapter");
            tip_nextChapter.click();
        }
        setTimeout(() => {
            initAll();
            dealAnsEchelon(array_echelon);
        }, 5000);
    }, 2000);
}
//忽略任务
function ignoreAns() {
    console.log("无法处理,忽略任务");
    setTimeout(() => {
        document.dispatchEvent(dealEvent);
    }, 1500);
}
//处理视频
function videoHandler(idocument) {
    console.log("处理视频任务中···");
    var video = idocument.querySelector("video");
    var video_play = idocument.querySelector(".vjs-big-play-button");
    var video_doublespeed = idocument.querySelector(".vjs-menu-item");
    video_play.click();
    video_doublespeed.click();
    video.addEventListener("ended", function () {
        document.dispatchEvent(dealEvent);
    }, { once: true });
}
//处理ppt&pdf
function pptxHandler(idocument) {
    console.log("处理PPT任务中···");
    var sdocument = idocument.querySelector("iframe").contentWindow.document;
    var currentHeight = 0;
    var finalHeight = sdocument.documentElement.scrollHeight;
    var timer = setInterval(function () {
        if (currentHeight >= finalHeight) {
            clearInterval(timer);
            document.dispatchEvent(dealEvent);
            return;
        }
        currentHeight += 400;
        sdocument.defaultView.scrollTo(0, currentHeight);
    }, 1000);
}
//处理音频
function audioHandler(idocument) {
    console.log("处理音频任务中···");
    var audio = idocument.querySelector("audio");
    var audio_play = idocument.querySelector(".vjs-play-control.vjs-control.vjs-button");
    audio_play.click();
    audio.addEventListener("ended", function () {
        document.dispatchEvent(dealEvent);
    }, { once: true });
}
/**任务梯队顺序处理 */
function dealAnsEchelon(array_echelon) {
    console.log("待处理任务数量为:" + array_echelon.length);
    if (array_echelon.length != 0) {
        dealSingleAns(array_echelon[0]);
        array_echelon.shift();
        return;
    }
    skipChapter();
}
/**执行代码 */
initAll();
dealAnsEchelon(array_echelon);

代码基本都给了注释,目前没发现Bug

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 写一个自动刷课脚本需要一定的编程知识,可以使用 Python 语言来实现。 以下是一个简单的例子: ```python # 首先导入相关的库 import time from selenium import webdriver # 打开浏览器 driver = webdriver.Firefox() # 访问学习网站 driver.get("https://www.example.com/login") # 输入用户名和密码,完成登录 username = driver.find_element_by_id("username") password = driver.find_element_by_id("password") username.send_keys("your_username") password.send_keys("your_password") driver.find_element_by_id("login_button").click() # 到达课程页面,并开始播放视频 driver.get("https://www.example.com/courses/123") driver.find_element_by_id("play_button").click() # 视频播放 30 分钟 time.sleep(30 * 60) # 关闭浏览器 driver.quit() ``` 请注意,这仅仅是一个简单的示例,实际情况可能有所不同,需要根据具体的学习网站和课程进行相应的修改。 此外,使用自动刷课脚本可能违反学习网站的使用条款,请在使用前仔细阅读相关规定。 ### 回答2: 学习刷课脚本可以利用Python编程语言来实现。首先,我们需要安装Selenium库,并下载相应浏览器的驱动程序(如ChromeDriver)。接下来,我们可以编写以下代码: 1. 导入所需库: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys import time ``` 2. 启动浏览器并打开学习网址: ```python driver = webdriver.Chrome('路径/到/chromedriver') # 驱动程序的路径 driver.get('https://study.mofang.com/') # 学习网址 ``` 3. 登录学习账号: ```python driver.find_element_by_id('username').send_keys('你的用户名') # 填入你的用户名 driver.find_element_by_id('password').send_keys('你的密码') # 填入你的密码 driver.find_element_by_class_name('login_button').click() # 点击登录按钮 ``` 4. 进入课程页面并刷课: ```python time.sleep(5) # 等待页面加载 driver.find_element_by_class_name('course').click() # 进入课程页面 time.sleep(5) # 等待页面加载 lessons = driver.find_elements_by_class_name('lesson') # 获取所有课程 for lesson in lessons: lesson.click() # 点击课程 time.sleep(5) # 等待页面加载 videos = driver.find_elements_by_class_name('clip') # 获取所有视频 for video in videos: video.click() # 点击视频 time.sleep(300) # 模拟观看5分钟 driver.find_element_by_class_name('vjs-big-play-button').click() # 暂停视频 time.sleep(3) # 等待操作 driver.find_element_by_class_name('vjs-big-play-button').click() # 恢复播放 time.sleep(300) # 继续模拟观看5分钟 driver.find_element_by_class_name('close').click() # 关闭视频页面 ``` 5. 退出浏览器: ```python driver.quit() ``` 以上代码实现了一个简单的学习刷课脚本过模拟用户登录、进入课程页面、点击视频以及控制观看时间等操作,实现了自动化刷课的功能。当然,具体的元素选择和操作方式可能会随着学习页面的变化而有所不同,可能需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值