Wenku Doc Downloader

下载百度文库文档

Устаревшая версия за 22.11.2021. Перейдите к последней версии.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         Wenku Doc Downloader
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  下载百度文库文档
// @author       [email protected]
// @match        https://wenku.baidu.com/view/*
// @icon         https://www.google.com/s2/favicons?domain=limestart.cn
// @grant        none
// @license      GPL-3.0-only
// @create       2021-11-22
// ==/UserScript==

/*
*  附属功能函数部分
*/

function createAndDownloadFile(fileName, content) {
    // 创建并下载文件
    var aTag = document.createElement('a');
    var blob = new Blob([content]);
    aTag.download = fileName;
    aTag.href = URL.createObjectURL(blob);
    aTag.click();
    URL.revokeObjectURL(blob);
}

function formatText(text){
	var reg_exp_1 = new RegExp(" [(]?=[\u4e00-\u9fa5] [)]");
	var reg_exp_2 = new RegExp("(?<=TEMP[\u4e00-\u9fa5]) ");
	var reg_exp_3 = new RegExp("(?<=[\u4e00-\u9fa5]) (?=[\u4e00-\u9fa5])");

	var text_1 = text.replace(reg_exp_1, "TEMP");
	var text_2 = text_1.replace(reg_exp_2, "");
	var text_3 = text_2.replace("TEMP", "");
	var text_final = text_3.replace(/ /g, " ");
	return text_final;
}

/*
*  主要功能函数部分
*/

function readAll() {
    var read_all_btn = document.getElementsByClassName("read-all")[0];
    // 如果存在“继续阅读”的按钮
    if (read_all_btn) {
        // 点击“继续阅读”按钮
        read_all_btn.click();
    }
    // 如果点击完之后仍旧存在该按钮,递归调用自身
    // read_all_btn = document.getElementsByClassName("read-all")[0];
    // if (read_all_btn) {
    //    readAll();
    // }
    else{
        alert("文档已经完全展开,可以导出");
        var init_btn = document.getElementsByClassName("init-btn")[0];
        var save_doc_btn = document.getElementsByClassName("save-doc-btn")[0];
        init_btn.style.display = "none";
        save_doc_btn.style.removeProperty("display");
    }
}

function savePDFData() {
    // 存储pdf型data(假定是内容是pic)
    alert("Function savePDFData was called.");
    var pic_urls = document.getElementsByClassName("reader-pic-item");
    var text_list = [];
    // 去掉前缀
    var reg_exp_1 = new RegExp(": ?url[(]");
    // 去掉后缀
    var reg_exp_2 = new RegExp("[)]; ?background-position");

    for (var i = 0; i < pic_urls.length; i++){
        var whole_text = pic_urls[i].getAttribute("style");
        var de_pretext = whole_text.split(reg_exp_1)[1];
        var url = de_pretext.split(reg_exp_2)[0];
        text_list.push(url);
    }

    text_list[0] = text_list[0].replace(/"/g, "");
    var content = text_list.join("\n");
    createAndDownloadFile("urls.csv", content);
}

function saveDocData() {
    // 存储doc型data(内容是text)
    alert("Function saveTextData was called.");
    // 获取文本
	var text_elements = document.getElementsByClassName("reader-word-layer");
	var texts = [];
	for (var elem of text_elements){
		texts.push(elem.textContent);
	}
	// 导出文本
	var origin_content = texts.join("");
	var content = formatText(origin_content);
	createAndDownloadFile("doc文档.txt", content);
}

function savePPTData() {
    // 存储ppt型data(内容是pic)
    alert("Function savePPTData was called.");
    var pic_elements = document.getElementsByClassName("ppt-image-wrap");
    var pic_urls = [];

    for (var elem of pic_elements) {
        var pic_obj = elem.children[0];
        var url = pic_obj.src;
        pic_urls.push(url);
    }

    var content = pic_urls.join("\n");
    createAndDownloadFile("urls.csv", content);
}

function detectType() {
    // 分别尝试获取相应元素列表,若列表长度为0则不存在相应元素,否则存在
    var pdf = document.getElementsByClassName("reader-pic-item").length;
    var doc = document.getElementsByClassName("reader-word-layer").length;
    var ppt = document.getElementsByClassName("ppt-image-wrap").length;
    // 判断文档类别
    if (pdf && !doc && !ppt) {
        return "pdf";
    }
    else if (doc && !pdf && !ppt) {
        return "doc";
    }
    else if (ppt && !pdf && !doc) {
        return "ppt";
    }
    else {
        return {"pdf": pdf, "doc": doc, "ppt": ppt};
    }
}

function saveData() {
    // 存储文档数据到本地
    var category = detectType();
    if (category === "pdf"){
        savePDFData();
    }
    else if (category === "doc") {
        saveDocData();
    }
    else if (category === "ppt") {
        savePPTData();
    }
    else {
        var info = [];
        for (var key in category){
            info.push(key + " : " + category.key);
        }
        alert("未知文档类型\n" + info.join("\n"));
    }
}

/*
*  主函数部分
*/

function main() {
    // 创建脚本启动按钮1、2
    var btn_1 = document.createElement("button");
    var btn_2 = document.createElement("button");
    // 设定按钮1、2样式
    btn_1.setAttribute("class", "init-btn");
    btn_1.style.height = "25px";
    btn_1.style.width = "50%";
    btn_1.style.marginLeft = "25%";
    btn_1.style.backgroundColor = "blue";

    btn_2.setAttribute("class", "save-doc-btn");
    btn_2.style.height = "25px";
    btn_2.style.width = "50%";
    btn_2.style.marginLeft = "25%";
    btn_2.style.backgroundColor = "green";
    btn_2.style.display = "none";

    // 绑定主函数
    btn_1.addEventListener("click", readAll);
    btn_2.addEventListener("click", saveData);
    // 添加按钮元素到页面
    document.body.appendChild(btn_1);
    document.body.appendChild(btn_2);
    // 确认主程序加载完毕
    console.log("Program Loaded");
}

main();