// ==UserScript== // @name 百度文库转 Word | 百度文库下载器 // @name:zh-CN 百度文库转 Word | 百度文库下载器 // @namespace https://gitee.com/HGJing/everthing-hook/ // @version 0.0.1 // @description 将百度文库内文章中的文本内容转换为 word 并下载,仅支持没有阅读限制的文章(只要没有阅读限制,无论是用券、VIP或付费文章都能下载) // @require https://greasyfork.org/scripts/405376-filesaver-html5/code/FileSaver(html5).js?version=816426 // @require https://greasyfork.org/scripts/372672-everything-hook/code/Everything-Hook.js?version=784972 // @author Cangshi // @match *://wenku.baidu.com/view/* // @run-at document-start // @grant none // @downloadURL none // ==/UserScript== function wait(ms) { return new Promise(resolve => { setTimeout(() => { resolve(); }, ms); }) } if (typeof jQuery !== "undefined" && typeof saveAs !== "undefined") { (function ($) { ~function (global) { 'use strict'; if (global.eHook) { global.eHook.plugins({ name: 'wenku2word', /** * 插件装载 * @param util */ mount: function (util) { this.hookBefore(Element.prototype, 'removeChild', function (m, args) { var ele = args[0]; if (ele && ele.classList && ele.classList.contains('reader-parent')) { var instead = document.createElement('div'); this.appendChild(instead); args[0] = instead; } }, false); return { wordExport: function (elements, fileName) { fileName = typeof fileName !== 'undefined' ? fileName : document.title; var constant = { wordHtml: { top: "Mime-Version: 1.0\nContent-Base: " + location.href + "\nContent-Type: Multipart/related; boundary=\"NEXT.ITEM-BOUNDARY\";type=\"text/html\"\n\n--NEXT.ITEM-BOUNDARY\nContent-Type: text/html; charset=\"utf-8\"\nContent-Location: " + location.href + "\n\n\n\n_html_", head: "
\n\n\n\n", body: "_body_" } }; var markup = $(elements).clone(); markup.each(function () { var self = $(this); if (self.is(':hidden')) self.remove(); }); var htmlEnd = "\n"; htmlEnd += "--NEXT.ITEM-BOUNDARY--"; var fileContent = constant.wordHtml.top.replace("_html_", constant.wordHtml.head.replace("_styles_", '') + constant.wordHtml.body.replace("_body_", markup.text().split('\n').map(t => `${t}
`).join(''))) + htmlEnd; var blob = new Blob([fileContent], { type: "application/msword;charset=utf-8" }); saveAs(blob, fileName + ".doc"); }, doExport: function () { this.wordExport($(".reader-word-layer")); }, isLoaded: false, fetchMoreContent() { var goNext = document.querySelector('.goBtn') || document.querySelector('.read-all'); let elem = document.documentElement; let elem2 = document.body; let totalHeight = elem.scrollHeight; let scrollTop = elem.scrollTop || elem2.scrollTop; let clientHeight = elem.clientHeight; var _this = this; if (totalHeight - scrollTop <= clientHeight * 1.1 || this.isLoaded) { this.isLoaded = true; return Promise.resolve(); } if ($(goNext).is(':hidden') || !goNext) { return wait(200).then( function () { window.scroll(0, scrollTop + clientHeight / 4); return _this.fetchMoreContent(); } ); } goNext && goNext.click(); return wait(2000).then( function () { return _this.fetchMoreContent(); } ); } } } }); } }(window); console.log('wenku2word loaded successfully'); window.addEventListener('load', function () { var btn = $('