您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
将百度文库中的文档保存为html。保存前需要滚动页面到底部,不要滚太快以确保页面加载成功,最好用键盘上的<Page Down>键。因为Chrome屏蔽了部分离线js脚本,导致Chrome无法加载保存的html,在Yandex Browser中保存成PDF比较好。
// ==UserScript== // @namespace ATGT // @name Save baidu wenku doc, press Ctrl-S after page load done. Disable Ads blockers if save failed. // @name:zh-CN 保存百度文库中的文档,页面加载完后按Ctrl-S。如保存失败,请关闭广告过滤插件,如ABP、uBlock等。 // @description Save baidu wenku doc as html. Need to Scroll down the web page to load all pages before press Ctrl-S to save, don't scroll too fast to ensure page of doc load complete, prefer use key <Page Down> on your keyboard. Chrome can not load saved html since it blocked some offline js script, Save to PDF in Yandex Browser is a better choice. // @description:zh-CN 将百度文库中的文档保存为html。保存前需要滚动页面到底部,不要滚太快以确保页面加载成功,最好用键盘上的<Page Down>键。因为Chrome屏蔽了部分离线js脚本,导致Chrome无法加载保存的html,在Yandex Browser中保存成PDF比较好。 // @version 1.2.2 // @icon https://www.baidu.com/cache/icon/favicon.ico // @include http*://wenku.baidu.com/* // @run-at document-start // ==/UserScript== /* ChangeLog: v1.2: 28 Nov 2018, update descript for chrome, need to save as pdf. v1.1: 28 Nov 2018, remove copy limit. v1: 28 Nov 2018, Remove ads and show all pages. */ console.log("!!!!!!!!!!!!!!!!!!!!!save-baidu-wenku-doc!!!!!!!!!!!!!!!!!!!!!!!!"); (function () { function injectFunction(func) { var script = document.createElement('script'); //script.className = "injectFunction"; //script.appendChild(document.createTextNode('('+ func +')();')); script.appendChild(document.createTextNode('(function (){' + '(' + func + ')();' + '})();')); try { (document.body || document.head || document.documentElement).appendChild(script); } catch(e) { console.error("Can not inject function ", func); } } function injectFunctionContent(func) { var script = document.createElement('script'); //script.className = "injectFunction"; //script.appendChild(document.createTextNode('('+ func +')();')); var funcContent = func.toSource(); if (/^function\s*[\w\d_$]*\(.*\)\s*\{/.test(funcContent)) { funcContent = funcContent.replace(/^function\s*[\w\d_$]*\(.*\)\s*\{/, ''); funcContent = funcContent.replace(/}$/g, ''); } script.appendChild(document.createTextNode(funcContent)); (document.body || document.head || document.documentElement).appendChild(script); } function saveConsole() { window.console_debug = console.debug; window.console_log = console.log; window.console_info = console.info; window.console_error = console.error; } injectFunction(saveConsole); function hookModJS() { console_info("--------> hookModJS"); var require, define; !function (obj) { function create_async_script(script_src, load_fail_handler) { console_info("create_async_script", script_src); function load_ok() { clearTimeout(scriptLoadTimer) } if (!(script_src in async_script_list)) { async_script_list[script_src] = !0; var script = document.createElement('script'); if (load_fail_handler) { var scriptLoadTimer = setTimeout(load_fail_handler, require.timeout); script.onerror = function () { clearTimeout(scriptLoadTimer), load_fail_handler() }, 'onload' in script ? script.onload = load_ok : script.onreadystatechange = function () { ('loaded' == this.readyState || 'complete' == this.readyState) && load_ok() } } return script.type = 'text/javascript', script.src = script_src, head.appendChild(script), script } } function async_load_script(libName, fn_clean_up, fn_fail_handler) { var cleanUpHandlerList = libCleanUpHandlerList_Map[libName] || (libCleanUpHandlerList_Map[libName] = []); cleanUpHandlerList.push(fn_clean_up); var script_src, libAttr = libAttr_Map[libName] || {}, pkg = libAttr.pkg; script_src = pkg ? libPkgNameList_Map[pkg].url : libAttr.url || libName, create_async_script(script_src, fn_fail_handler && function () { fn_fail_handler(libName) }) } var head = document.getElementsByTagName('head')[0], libCleanUpHandlerList_Map = { }, libFunc_Map = { }, libMod_Map = { }, async_script_list = { }, libAttr_Map = { }, libPkgNameList_Map = { }; define = function (libName, func) { console_info("define ", libName); libFunc_Map[libName] = func; var cleanUpHandlerList = libCleanUpHandlerList_Map[libName]; if (cleanUpHandlerList) { for (var n = 0, o = cleanUpHandlerList.length; o > n; n++) cleanUpHandlerList[n](); delete libCleanUpHandlerList_Map[libName] } }, require = function (libName) { //console_info("require ", libName); if (libName && libName.splice) { //console_info("call require.async"); return require.async.apply(this, arguments); } libName = require.alias(libName); //console_info("alias", libName); var module = libMod_Map[libName]; if (module) { //console_info("found in libModMap, return."); return module.exports; } var modImplFunc = libFunc_Map[libName]; if (!modImplFunc) { //console_info("Can not found module"); throw '[ModJS] Cannot find module `' + libName + '`'; } module = libMod_Map[libName] = { exports: { } }; //console_info("modImplFunc", modImplFunc); var n = 'function' == typeof modImplFunc ? modImplFunc.apply(module, [ require, module.exports, module ]) : modImplFunc; //console_info("n", n, "module", module); if (libName === 'wkcommon:widget/ui/reader/view/doc/view.js') { console_info('++++++++++++++++++ hook doc/view.js'); module.exports.view.prototype._recycleView = function(e) { console_info("hooked _recycleView called"); }; } else if (libName == "wkcommon:widget/ui/reader_plugin/copylimit/copylimit.js") { console_info('++++++++++++++++++ hook copylimit/copylimit.js'); module.exports.prototype.isCanCopy = function(e) { console_info("hooked isCanCopy called"); return true; }; } return n && (module.exports = n), module.exports }, require.async = function (libList_param, fn_clean_up_handler, fn_fail_handler) { function async_load_script_list(libList_tmp) { for (var r = 0, n = libList_tmp.length; n > r; r++) { var libName = libList_tmp[r]; if (libName in libFunc_Map) { var libAttr = libAttr_Map[libName]; libAttr && 'deps' in libAttr && async_load_script_list(libAttr.deps) } else if (!(libName in loading_status)) { loading_status[libName] = !0, load_cnt++ , async_load_script(libName, fn_clean_up, fn_fail_handler); var libAttr = libAttr_Map[libName]; libAttr && 'deps' in libAttr && async_load_script_list(libAttr.deps) } } } function fn_clean_up() { if (0 == load_cnt--) { for (var modList = [], i = 0, a = libList_param.length; a > i; i++) modList[i] = require(libList_param[i]); fn_clean_up_handler && fn_clean_up_handler.apply(obj, modList) } } 'string' == typeof libList_param && (libList_param = [libList_param]); for (var c = 0, f = libList_param.length; f > c; c++) libList_param[c] = require.alias(libList_param[c]); var loading_status = {}, load_cnt = 0; async_load_script_list(libList_param), fn_clean_up() }, require.resourceMap = function (resMap) { var r, tmp_list; tmp_list = resMap.res; for (r in tmp_list) tmp_list.hasOwnProperty(r) && (libAttr_Map[r] = tmp_list[r]); tmp_list = resMap.pkg; for (r in tmp_list) tmp_list.hasOwnProperty(r) && (libPkgNameList_Map[r] = tmp_list[r]) }, require.loadJs = function (e) { create_async_script(e) }, require.loadCss = function (e) { if (e.content) { var style = document.createElement('style'); style.type = 'text/css', style.styleSheet ? style.styleSheet.cssText = e.content : style.innerHTML = e.content, head.appendChild(style) } else if (e.url) { var link = document.createElement('link'); link.href = e.url, link.rel = 'stylesheet', link.type = 'text/css', head.appendChild(link) } }, require.alias = function (libName) { return libName }, require.timeout = 5000 }(this); Object.defineProperty(window, 'require', { get: function () { return require; }, set: function (v) { //console_info('RO Value! New value: ' + v); } }); Object.defineProperty(window, 'define', { get: function () { return define; }, set: function (v) { //console_info('RO Value! New value: ' + v); } }); /* IMPORTANT * must freeze `require', otherwize require.alias/.async/.resouceMap will be modified. */ Object.freeze(define); Object.freeze(require); } injectFunction(hookModJS); function tunePage() { function continueRead() { try { /* _recycleView hooked in hookModJS() */ var v = require('wkcommon:widget/ui/reader/view/doc/view.js').view.prototype._recycleView; } catch(e) { console_error(e.toString()); var v = e.toString(); } console_info("doc/view.js ... _recycleView:", v.toSource()); console_info("continueRead >>> "); $('.doc-reader').attr('oncopy', ""); $(".goBtn").click(); } function removeUseless() { var rmNodes = [ '.fix-searchbar-wrap', '.doc-tag', '.reader-tools-bar-wrap', '#Zuniqueid__3', '[id^=html-reader-AD]', '.banner-core-wrap', '.fc-container', '.fc-ppt', '#ggbtm-ads', '.banner-ad', ]; for (var node of rmNodes) { var tmpNodes = $(node); if (tmpNodes.length == 0) console_info("No node found for " + node); else { $(node).hide(); $(node).remove(); } } } window.addEventListener("load", function () { console_info("ready!"); continueRead(); removeUseless(); }); }; injectFunction(tunePage); })(); console.log("!!!!!!!!!!!!!!!!!!!!!/save-baidu-wenku-doc!!!!!!!!!!!!!!!!!!!!!!!!");
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址