您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
download elearning files easier
// ==UserScript== // @name Elearning Downloader // @namespace http://tampermonkey.net/ // @version 0.2 // @description download elearning files easier // @author Char不多得了 // @match https://elearning.fudan.edu.cn/courses/*/files/* // @icon https://www.google.com/s2/favicons?sz=64&domain=fudan.edu.cn // @grant GM_registerMenuCommand // @grant GM.registerMenuCommand // @require https://code.jquery.com/jquery-3.6.1.slim.min.js // @license MIT License // ==/UserScript== (function() { 'use strict'; var course_id = /\d+/.exec(window.location.href)[0]; // 适配不同版本的GM函数 var _GM_registerMenuCommand; if(typeof GM_registerMenuCommand!='undefined'){ _GM_registerMenuCommand=GM_registerMenuCommand; }else if(typeof GM!='undefined' && typeof GM.registerMenuCommand!='undefined'){ _GM_registerMenuCommand=GM.registerMenuCommand; } if(typeof _GM_registerMenuCommand=='undefined')_GM_registerMenuCommand=(s,f)=>{}; function getXHR(method,url,respType){ let xhr = new XMLHttpRequest(); xhr.setRequestHeader('Accept', 'application/json, text/javascript, application/json+canvas-string-ids, */*; q=0.01'); xhr.setRequestHeader('Accept-Encoding','gzip, deflate, br'); xhr.setRequestHeader('Accept-Language','zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'); xhr.setRequestHeader('Connection','keep-alive'); xhr.setRequestHeader('DNT','1'); xhr.setRequestHeader('Sec-Fetch-Dest','empty'); xhr.setRequestHeader('Sec-Fetch-Mode','cors'); xhr.setRequestHeader('Sec-Fetch-Site','same-origin'); xhr.setRequestHeader('TE','trailers'); xhr.withCredentials = true; xhr.responseType = respType; xhr.open(method,url) return xhr; } function getFolderid(course_id,callback){ //此处回调为获得了root文件夹之后的处理函数 //获得folderid后自动下载 console.log("getFolderid") if(course_id == null){ console.log("course_id 为null") return; } let folderidXHR = getXHR("get","https://elearning.fudan.edu.cn/api/v1/courses/"+course_id+"/folders/by_path/","json"); folderidXHR.send() folderidXHR.onload = function() { if(folderidXHR.status=="304"||folderidXHR.status=="200"){ let folderid = folderidXHR.response[0].id; // console.log(folderid);//debug if(callback) callback(folderid) } }; } function getSubfolderidList(folderid,callback){ // 获得subfolderList之后自动对每个folder发请求 console.log("getSubfolderList") if(folderid == null){ console.log("folderid 为null") return; } let subFolderidXHR = getXHR("GET","https://elearning.fudan.edu.cn/api/v1/folders/"+folderid+"/folders","json") let params = { // 此处的参数并没有真的传过去,但是居然也拿到数据了,离谱 todo "include[]": [ "user", "usage_rights", "enhanced_preview_url", "context_asset_string" ], "per_page": "20", "sort": "", "order": "" } subFolderidXHR.send(JSON.stringify(params)) subFolderidXHR.onload = function() { if(subFolderidXHR.status=="304"||subFolderidXHR.status=="200"){ let subFolderList = subFolderidXHR.response; for(let i in subFolderList){ if(callback) callback(subFolderList[i].id) } } }; } function getFileidList(folderid,callback){ // 获得fileList自动下载 console.log("getFileList") if(folderid == null){ console.log("folderid 为null") return; } let fileidXHR = getXHR("GET","https://elearning.fudan.edu.cn/api/v1/folders/"+folderid+"/files","json") let params = { "include[]": [ "user", "usage_rights", "enhanced_preview_url", "context_asset_string" ], "per_page": "20", "sort": "", "order": "" } fileidXHR.send(JSON.stringify(params)) let fileidList = []; fileidXHR.onload = function() { if(fileidXHR.status=="304"||fileidXHR.status=="200"){ let fileList = fileidXHR.response; for(let i in fileList){ fileidList.push(fileList[i].id) } // console.log(fileidList)//debug if(callback) callback(fileidList) } }; } function getFilesOnPage(){ let file_elem = document.getElementsByClassName("ef-name-col__link"); if(file_elem==null||file_elem.length===0){ console.log("当前页面未找到文件") return; } let fileidList = [] for(let i=0;i<file_elem.length;i++){ fileidList.push(/\d+/.exec(file_elem.item(i).href)[0]) } return fileidList; } function downloadList(fileidList){ let file_url_list = [] for(let i=0;i<fileidList.length;i++){ file_url_list.push("https://elearning.fudan.edu.cn/courses/"+course_id+"/files/"+ fileidList[i]+ "/download?download_frd=1") } for(let url in file_url_list){ // 根据链接下载 const a = document.createElement('a'); a.setAttribute('href', file_url_list[url]); a.setAttribute('download', ""); a.click(); } } function downloadFolder(folderid){ getFileidList(folderid,downloadList) getSubfolderidList(folderid,downloadFolder) } function downloadPage(){ downloadList(getFilesOnPage()) } function downloadAll(){ getFolderid(course_id,downloadFolder) } _GM_registerMenuCommand("download the page",downloadPage); _GM_registerMenuCommand("download All",downloadAll); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址