Greasy Fork is available in English.
按下D下载ppt,pdf,上课视频
当前为
// ==UserScript==
// @name 超星学习通章节内ppt视频下载
// @namespace http://tampermonkey.net/
// @version 1.09
// @description 按下D下载ppt,pdf,上课视频
// @author 西电网信院的废物rytter & 西电网信院的废物B4a
// @match http://*.chaoxing.com/mycourse/*
// @match https://*.chaoxing.com/mycourse/*
// @match http://*.chaoxing.com/*
// @match https://*.chaoxing.com/*
// @match https://mooc1.*/*
// @match http://mooc1.*/*
// @match https://mooc1.xueyinonline.com/*
// @match http://mooc1.xueyinonline.com/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @updateURL
// @installURL
// @downloadURL
// @license MIT
// ==/UserScript==
function get_xueyinonline_objectid() {
var ans_classes = document.getElementsByClassName("ans-attach-ct");
// support old version used by learning.xidian.edu.cn
if (ans_classes.length === 0) {
ans_classes = document.getElementsByClassName("ans-cc")
}
console.log("任务数量: ", ans_classes.length);
var objectids = new Array();
for (var j = 0; j < ans_classes.length; j++) {
console.log(ans_classes[j]);
if (
ans_classes[j]
.getElementsByTagName("iframe")[0]
.getAttribute("objectid") != undefined
) {
objectids = objectids.concat(
ans_classes[j]
.getElementsByTagName("iframe")[0]
.getAttribute("objectid")
);
}
}
console.log("任务对象:", objectids);
return objectids;
}
function get_chaoxing_objectid() {
var ans_classes = document
.getElementsByTagName("iframe")[0]
.contentDocument.body.getElementsByClassName("ans-attach-ct");
console.log(ans_classes.length);
var objectids = new Array();
for (var j = 0; j < ans_classes.length; j++) {
console.log(ans_classes[j]);
if (
ans_classes[j]
.getElementsByTagName("iframe")[0]
.getAttribute("objectid") != undefined
) {
objectids = objectids.concat(
ans_classes[j]
.getElementsByTagName("iframe")[0]
.getAttribute("objectid")
);
}
}
console.log(objectids);
return objectids;
}
function download(i) {
// firstly, we need to get the objectid
var tipsDiv = document.querySelector('.tips');
if (!tipsDiv) {
// If it doesn't exist, create it and set styles to make it float in the top right corner
tipsDiv = document.createElement('div');
tipsDiv.className = 'tips';
document.body.appendChild(tipsDiv);
// Apply styles directly or add a class
tipsDiv.style.position = 'fixed';
tipsDiv.style.top = '10px';
tipsDiv.style.right = '10px';
tipsDiv.style.backgroundColor = 'rgb(209 232 255 / 90%)';
tipsDiv.style.padding = '10px';
tipsDiv.style.zIndex = '1000'; // Ensure it's on top of other elements
tipsDiv.style.textAlign = 'right'; // Align text to the right
}
// unhide
if (tipsDiv.style.zIndex === '-1') {
tipsDiv.style.zIndex = '1000';
}
tipsDiv.innerHTML = '<i></i>';
var objectids = get_xueyinonline_objectid();
if (objectids.length == 0) {
objectids = get_chaoxing_objectid();
}
var objectid = objectids[i % objectids.length];
console.log(objectid);
var protocolStr = document.location.protocol;
var url = protocolStr + "//mooc1." + (window.location.href.includes("xueyinonline") ? "xueyinonline" : "chaoxing") + ".com/ananas/status/" + objectid + "?flag=normal";
console.log("资源URL:", url);
// 使用fetch API获取文件信息
fetch(url)
.then(response => response.json())
.then(json => {
console.log(json);
var fileUrl, fullFileName;
if (json.pdf === undefined) {
fileUrl = json.http;
var fileExtension = json.filename ? json.filename.split('.').pop() : '';
fullFileName = json.filename;
if (json.pdf === undefined && fileExtension) {
var prevTitle = document.querySelector('.prev_title').textContent;
// fallback
if (prevTitle === undefined) {
prevTitle = 'download'
}
fullFileName = prevTitle + '.' + fileExtension;
}
} else {
// Assuming json.pdf or json.download is the URL to the file you want to download
fileUrl = json.pdf || json.download;
fullFileName = json.filename;
}
// Create elements for file name, file size, and percentage
var fileNameSpan = document.createElement('span');
fileNameSpan.textContent = '下载文件: ' + fullFileName;
fileNameSpan.style.marginRight = '10px'; // Add margin to the right
var percentageSpan = document.createElement('span');
percentageSpan.textContent = '0%';
percentageSpan.style.marginLeft = '10px'; // Add margin to the right
percentageSpan.style.width = '60px';
// Create a progress bar element and append it to the tips div
var progressBar = document.createElement('progress');
var fileSizeSpan = document.createElement('span');
fileSizeSpan.textContent = '文件大小:计算中……';
fileSizeSpan.style.marginRight = '10px'; // Add margin to the right
progressBar.value = 0;
progressBar.max = 100;
tipsDiv.appendChild(fileNameSpan);
tipsDiv.appendChild(fileSizeSpan);
tipsDiv.appendChild(progressBar);
tipsDiv.appendChild(percentageSpan);
var xhr = new XMLHttpRequest();
xhr.open('GET', fileUrl, true);
xhr.responseType = 'blob';
xhr.onprogress = function(event) {
if (event.lengthComputable) {
var percentComplete = (event.loaded / event.total) * 100;
progressBar.value = percentComplete; // Update the progress bar value
percentageSpan.textContent = percentComplete.toFixed(2) + '%'; // Update the percentage text
fileSizeSpan.textContent = '文件大小:' + (event.total / 1024 / 1024).toFixed(2) + ' MB'; // Update the file size text
}
};
xhr.onload = function(event) {
if (this.status === 200) {
var blob = this.response;
var downloadUrl = window.URL.createObjectURL(blob);
var a = document.createElement("a");
a.href = downloadUrl;
a.download = fullFileName || 'download'; // Set the download filename here
document.body.appendChild(a);
a.click();
a.remove(); // Remove the element after download starts
window.URL.revokeObjectURL(downloadUrl); // Clean up the URL object
tipsDiv.innerHTML = ''; // Optionally clear the progress bar after download
}
if (tipsDiv.style.position === 'fixed') {
tipsDiv.style.zIndex = '-1';
}
};
xhr.onerror = function() {
console.error("Error fetching the file for download.");
tipsDiv.innerHTML = '下载失败!'; // Display error message in tips div
};
xhr.send();
})
.catch(error => {
console.error("Error fetching the JSON data:", error);
});
}
(function() {
"use strict";
var i = 0;
// redirect to http, to avoid download failure (optimised for learning.xidian.edu.cn)
var targetProtocol = "https:";
if (window.location.protocol != targetProtocol)
window.location.href = targetProtocol +
window.location.href.substring(window.location.protocol.length);
document.onkeydown = function(e) {
//对整个页面监听
var keyNum = window.event ? e.keyCode : e.which; //获取被按下的键值
if (keyNum == 68) {
download(i++);
}
};
})();