富学宝典

注释:1.实现富学宝典的后台播放(可倍速),2.进入对应的页面自动完成视频或阅读任务,3.部分浏览器会阻止视频自动播放,需要开放对应的权限,4.执行任务的顺序是从上到下

目前為 2024-10-14 提交的版本,檢視 最新版本

// ==UserScript==
// @name         富学宝典
// @namespace    *://iedu.foxconn.com/
// @version      1.05
// @description  注释:1.实现富学宝典的后台播放(可倍速),2.进入对应的页面自动完成视频或阅读任务,3.部分浏览器会阻止视频自动播放,需要开放对应的权限,4.执行任务的顺序是从上到下
// @author       dieout
// @license      MIT
// @run-at       document-end
// @match        *://iedu.foxconn.com/public/user/playCourse?*
// @match        *://iedu.foxconn.com/public/play/play*
// @match        *://10.134.149.121/*
// @icon         http://video.fulearn.com/images/logo2.png
// ==/UserScript==
var lang = (navigator.systemLanguage ? navigator.systemLanguage: navigator.language);
//获取浏览器配置语言 #括号内是个运算,运算过后赋值给lang,当?前的内容为true时把?后的值赋给lang,为False时把:后的值赋给lang
var text = lang.substr(0, 2); //获取lang字符串的前两位
var status = 0;
if (text == 'zh') {
    status = 0;
} else {
    status = 1;
}
//设置清晰度(无效)
// sd:标清
// hd:高清
var clarity = "hd";
//倍速设置
//volvo:1.0X
//saab:1.25X
//opel:1.5X
//audi:2.0X
// var Double_speed = "volvo";
//默认为1倍速
var Double_speed = "audi";


var rate = 1;

(function() {
    Refresh();
    window.onload = readPdf();
})();


async function readPdf() {
    //pdf自动阅读,临时解决办法,刷新iframe
    let j = 0;
    let i = 0;
    for (; j < document.getElementsByTagName("dd").length;) {
        if (status == 0) {
            if (document.getElementsByTagName("dd")[j].children[1].innerText != "已完成") {
                i = j;
                break;
            } else {++j;
                   }
        } else {
            if (document.getElementsByTagName("dd")[j].children[1].innerText != "Finished") {
                i = j;
                break;
            } else {++j;
                   }
        }
    }
    if(j == document.getElementsByTagName("dd").length ){
        alert("本章已全部完成!请手动切换到下一章。");
        return;
    }
    for (; i < document.getElementsByTagName("dd").length; i++) {
        //开始阅读pdf
        // alert("变量:"+ document.getElementsByTagName("dd").length);
        document.getElementsByTagName("dd")[i].click();
        console.log(document.getElementsByClassName("pdfwarp dpn").length);
        // alert("变量1:"+ document.getElementsByClassName("pdfwarp dpn").length);
        if (document.getElementsByClassName("pdfwarp dpn").length > 0) {
            document.getElementsByClassName("pdfwarp dpn")[0].children[2].click();
            // alert("变量2:"+ document.getElementsByTagName("dd")[i].children[1].innerText);
            if (document.getElementsByTagName("dd")[i].children[1].innerText != "已完成") {
                // alert("变量3:"+ document.getElementsByTagName("video").length);
                // if (document.getElementsByTagName("video").length > 0) {
                //     //id="realvideo_html5_api"
                //     break;
                // }

                await sleep(3000);
                // palyfirstpdf();
                // alert("2024" );
                while (document.getElementsByTagName("dd")[i].children[1].innerText != "已完成") {
                    console.log(document.getElementsByTagName("dd")[i].children[1].innerText);
                    // alert( document.getElementsByTagName("dd")[i].children[1].innerText);//调试
                    document.getElementById("pdf").contentWindow.document.getElementsByClassName("toolbarButton pageDown")[0].click();
                    await sleep(1000);
                    document.getElementById("pdf").contentWindow.document.getElementsByClassName("toolbarButton pageDown")[0].click();
                    await sleep(1000);
                    document.getElementById("pdf").contentWindow.document.getElementsByClassName("toolbarButton pageDown")[0].click();
                    await sleep(1000);
                    document.getElementById("pdf").contentWindow.document.getElementsByClassName("toolbarButton pageUp")[0].click();
                    await sleep(1000);
                    if(document.getElementsByTagName("dd")[i].children[1].innerText == "已完成") break;
                }
            } else if (document.getElementsByTagName("dd")[i].children[1].innerText != "Finished") {
                if (document.getElementsByTagName("video").length > 0) {
                    break;
                }
                await sleep(3000);
                while (document.getElementsByTagName("dd")[i].children[1].innerText != "Finished") {
                    document.getElementById("pdf").contentWindow.document.getElementsByClassName("toolbarButton pageDown")[0].click();
                    await sleep(1000);
                    document.getElementById("pdf").contentWindow.document.getElementsByClassName("toolbarButton pageDown")[0].click();
                    await sleep(1000);
                    document.getElementById("pdf").contentWindow.document.getElementsByClassName("toolbarButton pageDown")[0].click();
                    await sleep(1000);
                    document.getElementById("pdf").contentWindow.document.getElementsByClassName("toolbarButton pageUp")[0].click();
                    await sleep(1000);
                    if(document.getElementsByTagName("dd")[i].children[1].innerText == "Finished") break;
                }
            } else {
                if (document.getElementsByTagName("video").length > 0) {
                    break;
                }
                continue;
            }
        }
    }
    if(i == document.getElementsByTagName("dd").length){
        alert("本章已全部完成!请手动切换到下一章。");
        // alert("11");
        // return;
                if (document.getElementById("realvideo_html5_api")) {
                    //id="realvideo_html5_api"
                    // alert("变量3:");
                    main();

                }
    }
    //main();
}

async function main() {
    'use strict';
    let video = document.getElementsByTagName("video");
    let i = 0;
    let j = 0;
    // alert("变量1:"+ document.getElementsByTagName("dd").length);
    for (; j < document.getElementsByTagName("dd").length;) {
        if (status == 0) {
            if (document.getElementsByTagName("dd")[j].children[1].innerText != "已完成") {
                i = j;
                break;
            } else {++j;
                   }
        } else {
            if (document.getElementsByTagName("dd")[j].children[1].innerText != "Finished") {
                i = j;
                break;
            } else {++j;
                   }
        }
    }
    if(j == document.getElementsByTagName("dd").length ){
        alert("本章已全部完成!请手动切换到下一章。");
        alert("123");
        return;
    }
    //隐藏视频上的账号信息
    if (document.getElementsByClassName("vjs-userName").length > 0) {
        document.getElementsByClassName("vjs-userName")[0].style.display = "none";
        document.getElementsByClassName("vjs-userName")[0].style.visibility = "hidden";
        document.getElementsByClassName("vjs-userName")[0].innerText = "";
    }
    //视频播放
    for (; i < document.getElementsByTagName("dd").length; i++) {
        alert("变量2:"+ document.getElementsByTagName("dd")[i].children[1].innerText);
        document.getElementsByTagName("dd")[i].click(); //dianji(i,this); 调用网页中自带的函数
        video = document.getElementsByTagName("video");
        // video.play();
        // document.querySelector('video').play();
        if(document.getElementById("pdf").style.display != "none"){
            readPdf();
        }
        if (status == 0) {
            if (video.length != 0 && document.getElementsByTagName("dd")[i].children[1].innerText != "已完成") {
                let id = video[0].getAttribute("id"); //realvideo_html5_api
                let mp4 = document.getElementById(id);
                //设置默认为高清播放模式
                let select = document.getElementsByTagName("select")[0];
                select.autocomplete="off";
                for (let z = 0; z < select.options.length; ++z) {
                    if (select.options[z].value == clarity) {
                        select.options[z].selected = true;
                        break;
                    }
                }
                //设置倍速播放
                let select2 = document.getElementsByTagName("select")[1];
                select2.autocomplete="off";
                for (let y = 0; y < select2.options.length; ++y) {
                    if (select2.options[y].value == Double_speed) {
                        select2.options[y].selected = true;
                        if(Double_speed == "saab"){
                            rate =1.25
                        }else if(Double_speed == "opel"){
                            rate =1.5
                        }else if(Double_speed == "audi"){
                            rate =2
                        }
                        break;
                    }
                }
                mp4.muted = true; //静音播放
                while (document.getElementsByTagName("dd")[i].children[1].innerText != "已完成") {
                    console.log(document.getElementsByTagName("dd")[i].children[1].innerText);
                    await sleep(1000)
                    document.querySelector('video').playbackRate = rate;
                    mp4.play();
                    if(document.getElementsByTagName("dd")[i].children[1].innerText == "已完成") break;
                }
            }
        } else {
            if (video.length != 0 && document.getElementsByTagName("dd")[i].children[1].innerText != "Finished") {
                document.getElementsByTagName("dd")[i].click(); //dianji(i,this); 调用网页中自带的函数
                let id = video[0].getAttribute("id"); //realvideo_html5_api
                let mp4 = document.getElementById(id);
                //设置默认为高清播放模式
                 let select = document.getElementsByTagName("select")[0];
                 select2.autocomplete="off";
                 for (let z = 0; z < select.options.length; ++z) {
                     if (select.options[z].value == clarity) {
                         select.options[z].selected = true;
                         break;
                    }
                }
                //设置倍速播放
                let select2 = document.getElementsByTagName("select")[1];
                select2.autocomplete="off";
                for (let y = 0; y < select2.options.length; ++y) {
                    if (select2.options[y].value == Double_speed) {
                        select2.options[y].selected = true;
                        if(Double_speed == "saab"){
                            rate =1.25
                        }else if(Double_speed == "opel"){
                            rate =1.5
                        }else if(Double_speed == "audi"){
                            rate =2
                        }
                        break;
                    }
                }
                mp4.muted = true; //静音播放
                while (document.getElementsByTagName("dd")[i].children[1].innerText != "Finished") {
                    console.log(document.getElementsByTagName("dd")[i].children[1].innerText);
                    await sleep(1000)
                    document.querySelector('video').playbackRate = rate;
                    mp4.play();
                    if(document.getElementsByTagName("dd")[i].children[1].innerText == "Finished") break;
                }
            }
        }
    }
    if(i == document.getElementsByTagName("dd").length){
        alert("本章已全部完成!请手动切换到下一章。");
        return;
    }
};
//刷新页面
function Refresh() {
    // Reload every 10 minutes to avoid video jam
    let k2 = 0;
    for (; k2 < document.getElementsByTagName("dd").length;) {
        if (status == 0) {
            if (document.getElementsByTagName("dd")[k2].children[1].innerText != "已完成") {
                setTimeout(()=>{
                    location.reload()
                },600000); //每10分钟重新加载一次,避免视频卡住
                break;
            } else {++k2;
                   }
        } else {
            if (document.getElementsByTagName("dd")[k2].children[1].innerText != "Finished") {
                setTimeout(()=>{
                    location.reload()
                },600000); //每10分钟重新加载一次,避免视频卡住
                break;
            } else {
                ++k2;
            }
        }
    }
    if(k2 == document.getElementsByTagName("dd").length){
        alert("本章已全部完成!请手动切换到下一章。");
    }
}
//休眠等待
function sleep(time) {
    return new Promise((resolve)=>setTimeout(resolve, time));
}