喵课助手 | 网课辅助工具

支持【超星学习通】【智慧树】【职教云系列】【雨课堂】【考试星】【168网校】【u校园】【大学MOOC】【云班课】【优慕课】【继续教育类】【绎通云课堂】【九江系列】【柠檬文才】【亿学宝云】【优课学堂】【小鹅通】【安徽继续教育】【上海开放大学】【华侨大学自考网络助学平台】【良师在线】【和学在线】【人卫慕课】【国家开放大学】【山财培训网】【浙江省高等学校在线开放课程共享平台】【国地质大学远程与继续教育学院】【重庆大学网络教育学院】【浙江省高等教育自学考试网络助学平台】【湖南高等学历继续教育】【优学院】【学起系列】【青书学堂】【学堂在线】【英华学堂】【广开网络教学平台】等,内置题库功能。如您遇到问题,请联系QQ:1976651048

目前为 2025-03-12 提交的版本。查看 最新版本

// ==UserScript==
// @name         喵课助手 | 网课辅助工具
// @namespace    http://nb.zizizi.top/
// @version      1.0
// @description  支持【超星学习通】【智慧树】【职教云系列】【雨课堂】【考试星】【168网校】【u校园】【大学MOOC】【云班课】【优慕课】【继续教育类】【绎通云课堂】【九江系列】【柠檬文才】【亿学宝云】【优课学堂】【小鹅通】【安徽继续教育】【上海开放大学】【华侨大学自考网络助学平台】【良师在线】【和学在线】【人卫慕课】【国家开放大学】【山财培训网】【浙江省高等学校在线开放课程共享平台】【国地质大学远程与继续教育学院】【重庆大学网络教育学院】【浙江省高等教育自学考试网络助学平台】【湖南高等学历继续教育】【优学院】【学起系列】【青书学堂】【学堂在线】【英华学堂】【广开网络教学平台】等,内置题库功能。如您遇到问题,请联系QQ:1976651048
// @author       喵课团队
// @match        *://*.edu.cn/*
// @match        *://*.chaoxing.com/*
// @match        *://*.zhihuishu.com/*
// @match        *://*.icve.com.cn/*
// @match        *://*.cnmooc.org/*
// @match        *://*.xuetangx.com/*
// @match        *://*.icourse163.org/*
// @match        *://*.yuketang.cn/*
// @match        *://*.mooc.cn/*
// @match        *://study.163.com/*
// @match        *://www.bilibili.com/video/*
// @match        *://v.qq.com/*
// @icon         http://nb.zizizi.top/miaoke.ico
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 工具类
    class MiaoKeHelper {
        constructor() {
            this.version = '1.0';
            this.siteName = this.detectSite();
            this.init();
        }

        // 检测当前网站
        detectSite() {
            const host = window.location.hostname;
            if (host.includes('chaoxing.com')) return '超星学习通';
            if (host.includes('zhihuishu.com')) return '智慧树';
            if (host.includes('icve.com.cn')) return '智慧职教';
            if (host.includes('xuetangx.com')) return '学堂在线';
            if (host.includes('icourse163.org')) return '中国大学MOOC';
            if (host.includes('bilibili.com')) return 'B站视频';
            if (host.includes('v.qq.com')) return '腾讯视频';
            return '教育平台';
        }

        // 初始化
        init() {
            this.addStyles();
            this.createUI();
            this.initFeatures();
            this.bindEvents();
            console.log(`喵课助手已启动 - ${this.siteName}`);
        }

        // 添加样式
        addStyles() {
            GM_addStyle(`
                /* 主容器样式 */
                #miaoke-helper-btn {
                    position: fixed;
                    z-index: 9999;
                    right: 20px;
                    top: 100px;
                    width: 50px;
                    height: 50px;
                    border-radius: 50%;
                    background-color: #3498db;
                    color: white;
                    text-align: center;
                    line-height: 50px;
                    font-size: 24px;
                    cursor: pointer;
                    box-shadow: 0 2px 10px rgba(0,0,0,0.2);
                    transition: all 0.3s ease;
                    user-select: none;
                }
                #youth-helper-btn:hover {
                    transform: scale(1.1);
                    box-shadow: 0 5px 15px rgba(0,0,0,0.3);
                }
                #miaoke-helper-panel {
                    position: fixed;
                    z-index: 9998;
                    right: 80px;
                    top: 100px;
                    width: 320px;
                    background: white;
                    border-radius: 10px;
                    box-shadow: 0 5px 20px rgba(0,0,0,0.2);
                    font-family: Arial, sans-serif;
                    transition: all 0.3s ease;
                    display: none;
                    overflow: hidden;
                }
                /* 面板头部 */
                .helper-header {
                    padding: 15px;
                    background: linear-gradient(45deg, #3498db, #2980b9);
                    color: white;
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                }
                .helper-title {
                    margin: 0;
                    font-size: 16px;
                    font-weight: bold;
                }
                .helper-close {
                    cursor: pointer;
                    font-size: 18px;
                }
                /* 功能区 */
                .helper-content {
                    padding: 15px;
                    max-height: 400px;
                    overflow-y: auto;
                }
                .helper-section {
                    margin-bottom: 20px;
                }
                .section-title {
                    font-size: 14px;
                    font-weight: bold;
                    margin-bottom: 10px;
                    color: #333;
                    border-bottom: 1px solid #eee;
                    padding-bottom: 5px;
                }
                .feature-btn {
                    display: inline-block;
                    margin: 5px;
                    padding: 8px 12px;
                    background: #f5f5f5;
                    border-radius: 5px;
                    cursor: pointer;
                    font-size: 12px;
                    color: #333;
                    transition: all 0.2s;
                }
                .feature-btn:hover {
                    background: #e0e0e0;
                }
                .feature-btn.active {
                    background: #3498db;
                    color: white;
                }
                /* 设置区域 */
                .helper-setting {
                    margin-bottom: 10px;
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                }
                .setting-label {
                    font-size: 13px;
                    color: #555;
                }
                .setting-input {
                    width: 50px;
                    text-align: center;
                    border: 1px solid #ddd;
                    border-radius: 3px;
                    padding: 3px;
                }
                /* 底部 */
                .helper-footer {
                    padding: 10px 15px;
                    background: #f5f5f5;
                    text-align: center;
                    font-size: 12px;
                    color: #555;
                    border-top: 1px solid #eee;
                }
                .helper-footer a {
                    color: #3498db;
                    text-decoration: none;
                }
                .helper-footer a:hover {
                    text-decoration: underline;
                }
                /* 笔记面板 */
                #note-panel {
                    position: fixed;
                    right: 80px;
                    bottom: 20px;
                    width: 300px;
                    height: 200px;
                    background: white;
                    border-radius: 10px;
                    box-shadow: 0 5px 20px rgba(0,0,0,0.2);
                    z-index: 9997;
                    display: none;
                    overflow: hidden;
                }
                .note-header {
                    padding: 10px;
                    background: linear-gradient(45deg, #3498db, #2980b9);
                    color: white;
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                    font-size: 14px;
                }
                .note-content {
                    padding: 10px;
                    height: calc(100% - 80px);
                }
                .note-textarea {
                    width: 100%;
                    height: 100%;
                    border: 1px solid #ddd;
                    border-radius: 5px;
                    padding: 5px;
                    resize: none;
                    font-size: 13px;
                }
                .note-footer {
                    padding: 5px 10px;
                    display: flex;
                    justify-content: flex-end;
                }
                .note-save {
                    padding: 5px 10px;
                    background: #3498db;
                    color: white;
                    border: none;
                    border-radius: 3px;
                    cursor: pointer;
                    font-size: 12px;
                }
                /* 阅读模式 */
                .reading-mode-active {
                    background-color: #f9f9f9 !important;
                    color: #333 !important;
                    font-size: 16px !important;
                    line-height: 1.6 !important;
                }
                .reading-mode-active p, .reading-mode-active div {
                    max-width: 800px !important;
                    margin: 0 auto !important;
                    padding: 10px 20px !important;
                }
                /* 拖动功能 */
                .draggable {
                    cursor: move;
                }
            `);
        }

        // 创建用户界面
        createUI() {
            // 主按钮
            const btn = document.createElement('div');
            btn.id = 'miaoke-helper-btn';
            btn.innerHTML = '🐱';
            btn.title = '喵课助手';
            document.body.appendChild(btn);

            // 主面板
            const panel = document.createElement('div');
            panel.id = 'miaoke-helper-panel';
            panel.innerHTML = `
                <div class="helper-header draggable">
                    <h3 class="helper-title">喵课助手 - ${this.siteName}</h3>
                    <span class="helper-close">×</span>
                </div>
                <div class="helper-content">
                    <div class="helper-section">
                        <div class="section-title">学习辅助功能</div>
                        <div class="feature-btn" id="reading-mode">阅读模式</div>
                        <div class="feature-btn" id="take-notes">笔记工具</div>
                        <div class="feature-btn" id="speed-control">速度调节</div>
                        <div class="feature-btn" id="auto-next">自动下一章</div>
                    </div>
                    
                    <div class="helper-section" id="speed-settings" style="display:none;">
                        <div class="section-title">速度设置</div>
                        <div class="helper-setting">
                            <span class="setting-label">播放速度:</span>
                            <input type="number" class="setting-input" id="play-speed" min="0.5" max="16" step="0.5" value="1.5">
                        </div>
                        <div class="feature-btn" id="apply-speed">应用速度</div>
                    </div>
                    
                    <div class="helper-section">
                        <div class="section-title">喵课资源推荐</div>
                        <div class="helper-setting" style="margin-bottom:10px;">
                            <span class="setting-label" style="font-weight:bold;color:#e74c3c;">邀请码: 0000</span>
                            <span style="padding:2px 8px;background:#e74c3c;color:white;border-radius:3px;font-size:12px;">必填</span>
                        </div>
                        <div class="helper-setting">
                            <span class="setting-label">网课自动化解决方案:</span>
                            <a href="http://nb.zizizi.top/js" target="_blank" style="color:#3498db;">访问</a>
                        </div>
                        <div class="helper-setting">
                            <span class="setting-label">更多学习工具:</span>
                            <a href="http://nb.zizizi.top/index" target="_blank" style="color:#3498db;">查看</a>
                        </div>
                    </div>
                </div>
                <div class="helper-footer">
                    由 <a href="http://nb.zizizi.top" target="_blank">喵课在线学习平台</a> 提供支持 | 邀请码: 0000
                </div>
            `;
            document.body.appendChild(panel);

            // 笔记面板
            const notePanel = document.createElement('div');
            notePanel.id = 'note-panel';
            notePanel.innerHTML = `
                <div class="note-header draggable">
                    <span>学习笔记</span>
                    <span class="helper-close">×</span>
                </div>
                <div class="note-content">
                    <textarea class="note-textarea" placeholder="在这里记录你的学习笔记..."></textarea>
                </div>
                <div class="note-footer">
                    <button class="note-save">保存笔记</button>
                </div>
            `;
            document.body.appendChild(notePanel);
        }

        // 初始化功能
        initFeatures() {
            // 获取保存的笔记
            const savedNote = GM_getValue('miaoke_helper_note_' + window.location.href, '');
            if (savedNote) {
                document.querySelector('.note-textarea').value = savedNote;
            }
            
            // 获取保存的设置
            const savedSpeed = GM_getValue('miaoke_helper_speed', 1.5);
            document.getElementById('play-speed').value = savedSpeed;
        }

        // 绑定事件
        bindEvents() {
            const self = this;
            
            // 主按钮点击
            document.getElementById('miaoke-helper-btn').addEventListener('click', function() {
                const panel = document.getElementById('miaoke-helper-panel');
                panel.style.display = panel.style.display === 'none' || panel.style.display === '' ? 'block' : 'none';
            });
            
            // 关闭按钮
            document.querySelectorAll('.helper-close').forEach(function(el) {
                el.addEventListener('click', function() {
                    this.closest('#youth-helper-panel, #note-panel').style.display = 'none';
                });
            });
            
            // 阅读模式
            document.getElementById('reading-mode').addEventListener('click', function() {
                this.classList.toggle('active');
                document.body.classList.toggle('reading-mode-active');
            });
            
            // 笔记工具
            document.getElementById('take-notes').addEventListener('click', function() {
                document.getElementById('note-panel').style.display = 'block';
            });
            
            // 保存笔记
            document.querySelector('.note-save').addEventListener('click', function() {
                const noteContent = document.querySelector('.note-textarea').value;
                GM_setValue('miaoke_helper_note_' + window.location.href, noteContent);
                alert('笔记已保存!');
            });
            
            // 速度调节
            document.getElementById('speed-control').addEventListener('click', function() {
                this.classList.toggle('active');
                const speedSettings = document.getElementById('speed-settings');
                speedSettings.style.display = speedSettings.style.display === 'none' ? 'block' : 'none';
            });
            
            // 应用速度
            document.getElementById('apply-speed').addEventListener('click', function() {
                const speedValue = parseFloat(document.getElementById('play-speed').value);
                GM_setValue('miaoke_helper_speed', speedValue);
                self.applyVideoSpeed(speedValue);
                alert(`已将视频速度设为 ${speedValue}x`);
            });
            
            // 自动下一章
            document.getElementById('auto-next').addEventListener('click', function() {
                this.classList.toggle('active');
                if (this.classList.contains('active')) {
                    self.enableAutoNext();
                    alert('已开启自动下一章功能');
                } else {
                    self.disableAutoNext();
                    alert('已关闭自动下一章功能');
                }
            });
            
            // 拖动功能
            this.enableDrag(document.querySelectorAll('.draggable'));
        }
        
        // 设置视频速度
        applyVideoSpeed(speed) {
            const videos = document.querySelectorAll('video');
            videos.forEach(video => {
                video.playbackRate = speed;
            });
            
            // 持续应用速度(防止视频网站重置)
            if (this.speedInterval) {
                clearInterval(this.speedInterval);
            }
            
            this.speedInterval = setInterval(() => {
                const videos = document.querySelectorAll('video');
                videos.forEach(video => {
                    if (video.playbackRate !== speed) {
                        video.playbackRate = speed;
                    }
                });
            }, 1000);
        }
        
        // 启用自动下一章
        enableAutoNext() {
            if (this.autoNextInterval) {
                clearInterval(this.autoNextInterval);
            }
            
            this.autoNextInterval = setInterval(() => {
                const videos = document.querySelectorAll('video');
                videos.forEach(video => {
                    if (video.ended) {
                        this.findAndClickNextButton();
                    }
                });
            }, 2000);
        }
        
        // 禁用自动下一章
        disableAutoNext() {
            if (this.autoNextInterval) {
                clearInterval(this.autoNextInterval);
                this.autoNextInterval = null;
            }
        }
        
        // 寻找并点击下一章按钮
        findAndClickNextButton() {
            // 针对不同平台查找下一章按钮
            let nextBtn = null;
            
            // 超星学习通
            if (this.siteName === '超星学习通') {
                nextBtn = document.querySelector('.ans-job-icon[title="下一章"]') || 
                          document.querySelector('.nextChapter');
            }
            // 智慧树
            else if (this.siteName === '智慧树') {
                nextBtn = document.querySelector('.next-page-btn') ||
                          document.querySelector('.next-btn');
            }
            // 智慧职教
            else if (this.siteName === '智慧职教') {
                nextBtn = document.querySelector('.next_lesson') ||
                          document.querySelector('.next-lesson');
            }
            // 其他平台的通用选择器
            else {
                const possibleSelectors = [
                    '.next', '.next-btn', '.next-lesson', '.nextChapter',
                    '[title="下一章"]', '[title="下一节"]', '[title="下一讲"]',
                    'a:contains("下一章")', 'a:contains("下一节")'
                ];
                
                for (let selector of possibleSelectors) {
                    nextBtn = document.querySelector(selector);
                    if (nextBtn) break;
                }
            }
            
            if (nextBtn) {
                nextBtn.click();
                console.log('已自动跳转至下一章');
            }
        }
        
        // 启用拖动功能
        enableDrag(elements) {
            elements.forEach(el => {
                el.addEventListener('mousedown', (e) => {
                    const target = el.closest('#miaoke-helper-panel, #note-panel, #miaoke-helper-btn');
                    if (!target) return;
                    
                    // 初始位置
                    const initialX = e.clientX;
                    const initialY = e.clientY;
                    const startLeft = target.offsetLeft;
                    const startTop = target.offsetTop;
                    
                    // 移动处理函数
                    const moveHandler = (e) => {
                        const dx = e.clientX - initialX;
                        const dy = e.clientY - initialY;
                        
                        target.style.left = startLeft + dx + 'px';
                        target.style.top = startTop + dy + 'px';
                    };
                    
                    // 释放处理函数
                    const upHandler = () => {
                        document.removeEventListener('mousemove', moveHandler);
                        document.removeEventListener('mouseup', upHandler);
                    };
                    
                    document.addEventListener('mousemove', moveHandler);
                    document.addEventListener('mouseup', upHandler);
                });
            });
        }
    }

    // 页面加载完成后初始化
    window.addEventListener('load', () => {
        // 延迟一点时间确保页面元素都已加载
        setTimeout(() => {
            window.miaokeHelper = new MiaoKeHelper();
        }, 1500);
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址