实测手记:baidu-wenku 脚本 3 步免费提取百度文库全文并保存为 PDF
【免费下载链接】baidu-wenkufetch the document for free项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku
baidu-wenku 是一个只有一百多行的纯前端 JavaScript 脚本,专门用来清理百度文库文档页面的广告、付费提示和冗余元素,让整篇文档能用 Ctrl+P 直接免费保存为 PDF。这篇实测手记不讲官方文档,只讲我 clone 下来后真实跑通的路径、调过的参数,以及三个差点让我放弃的时刻。
先说结论:3 步、2 个参数、1 个硬前提
如果你赶时间,先记住这组数字——
- 3 步:clone 脚本 → 打开
wenku.baidu.com/view/*格式的文档页 → 控制台粘贴执行; - 2 个参数:滚动间隔
waitTime4Scroll(默认 800ms)和纸张间距margin4ReaderPage(默认"-75px auto"),都写在文件开头,改完即生效; - 1 个硬前提:页面 URL 必须是文库的阅读页。在搜索结果页或首页粘贴,脚本不会有任何反应——别问我是怎么知道的。
以我实测的那份 30 页行业报告为例:执行后约 1 分钟完成全部内容的滚动加载,再过 2 秒自动弹出打印窗口,选"另存为 PDF"就收工了。全程零安装、零依赖,适合偶尔需要把一两篇文库文档存成本地文件的个人用户。
我为什么要折腾这件事
上周五加班到深夜,我赶一份行业报告,能搜到的完整版本就挂在百度文库上。前面几页预览还能翻,往后全是下载券和会员解锁的提示。那晚我的心情大概可以概括成一句话:付费不划算,截图截不动,弹窗关不完。
我需要的其实很简单——偶尔遇到一篇要完整读的文库文档,能干干净净地存到本地。就这么点需求,折腾了我一个多小时。
对比:我试过的四种办法和它们的下场
在找到 baidu-wenku 之前,我把市面上常见路子全走了一遍:
| 方案 | 优点 | 实际下场 |
|---|---|---|
| 浏览器截图 / 长截图 | 零门槛 | 二十多页截到怀疑人生,还经常断页、文字发虚 |
| 第三方"文库下载器" | 看上去省事 | 装回来一窝捆绑软件,文档质量还一塌糊涂 |
| 注册会员 / 买下载券 | 官方合法 | 偶尔用一次,充会员纯属浪费 |
| 控制台粘贴脚本(本项目) | 免费、干净、即时生效 | 需要动手执行一次,其余全程自动 |
说实话,我一开始对"往控制台里粘脚本"也心存警惕——万一是偷数据的呢?把index.js逐行读完才放心:它只做页面层面的清理和滚动加载,不发起任何网络请求,也不改动文档内容,风险最小。
完整提取步骤:从 clone 到打印出 PDF
下面按我实际操作顺序整理成四步,每一步都附上注意点。
- 把脚本拿到本地。打开终端执行克隆命令:
git clone https://gitcode.com/gh_mirrors/ba/baidu-wenku克隆完进入项目目录,整个工具的核心就一份index.js,一百多行,建议先打开浏览一遍,心里有个数。
打开目标文档页面。访问百度文库,打开你想提取的文档。⚠️ 先确认地址栏是
wenku.baidu.com/view/xxxx这种格式,这是脚本的匹配范围,格式不对后面全白搭。在控制台粘贴执行。按
F12打开开发者工具 → 切到"控制台"(Console)→ 全选复制index.js的内容粘贴进去 → 回车。之后不用你做任何事:干扰元素被清理、页面开始逐屏滚动、版式被重新整理、打印窗口自动弹出。保存成果。在打印窗口把目标打印机选成"另存为 PDF"即可;也可以直接取消打印,把网页另存为 mhtml 格式,内容同样完整保留。
小提示:脚本用的是 jQuery 选择器,文库阅读页本身已加载 jQuery,所以粘贴即用,不用额外引入任何库。
脚本内部:几个"不讲武德"的小设计
把源码读完,我发现它解决麻烦的方式相当讨巧:
- 先点"继续阅读":开头就模拟点击
.goBtn和.read-all,把折叠区域先释放出来; - 隐藏而非删除:对
.aside这类元素用hide()而不是remove()——因为滚动时页面会动态重建节点,硬删会反复报Uncaught TypeError: Cannot read property 'top' of undefined; - 重写删除逻辑:它甚至直接接管了 jQuery 的
remove()方法、让它返回false,防止页面在滚动时把已加载的内容又删掉; - 模拟滚动加载:用定时器每隔
waitTime4Scroll毫秒下滚 700 像素,把需要"继续阅读"才出现的内容全部加载出来; - 抢救打印样式:文库打印 CSS 里有
@media print{body{display:none}},脚本在滚动完成后强制把body设回display:block,两秒后再弹出打印窗口,避免打出白纸。
一句话概括它的哲学:不改内容,只清干扰、加载全、理顺版式,剩下的交给浏览器自带的打印功能。
两个可调参数:我的实测调参记录
配置区就两个变量,全在文件开头的 Config 段落里:
var waitTime4Scroll = 800; // 模拟向下滚动的间隔,单位毫秒 var margin4ReaderPage = "-75px auto"; // 打印时的纸张间距①waitTime4Scroll,滚动间隔,默认 800(毫秒)
它决定滚动加载的节奏,直接关系加载完整度和耗时:数值偏大加载更稳但更慢,偏小更快但可能跳过未加载的章节。我的实测结论是:50 页以内的文档保持 800 即可;更长的文档或网络较慢时,调到 1200 左右更稳。我试过一份 80 页的,默认值下中间缺了两节,调到 1200 后一次过。
②margin4ReaderPage,纸张间距,默认"-75px auto"
它控制打印时页与页之间的间距:绝对值过大页面可能显示不全、内容被裁;过小则纸张之间留白太多、浪费纸面。多数文档用默认值就合适,只有当你打出来发现"每页被切了一半"或"大片空白"时,再小幅微调,配合打印对话框里的缩放比例一起调。
踩坑实录:3 个差点让我放弃的报错时刻
实测中我翻了三次车,记录在案:
翻车一:脚本执行后页面毫无反应。排查顺序:先看 URL 是不是view/*格式 → 再看控制台有没有红色报错 → 刷新页面重新执行。九成问题出在前两步。
翻车二:保存的 PDF 内容不完整,中间缺页。基本都是滚动太快、内容没来得及加载。把waitTime4Scroll调大再跑一遍,或者先手动往下滚几屏触发加载后再执行脚本,都能缓解。
翻车三:打印预览里页面显示不全或留白过多。这是margin4ReaderPage没配好。微调数值,配合打印对话框的缩放比例和纸张尺寸一起调整,通常一两轮就调到满意。
问题速查表:照着这个表基本不用再问
| 问题 | 回答 |
|---|---|
| 要装依赖或插件吗? | 零依赖,控制台粘进去就能跑 |
| 脚本会动文档内容吗? | 只隐藏和移除页面元素,不改动文档正文 |
| Chrome、Edge 能用吗? | 凡带开发者工具的主流浏览器都能跑 |
| 想一次提取好几篇怎么办? | 多开标签页,每页各自执行一次 |
| 最后能存成什么格式? | PDF(打印另存)或 mhtml(网页另存) |
| 能批量下载整个文库吗? | 别想,只适合个人少量文档的临时保存 |
| 能解锁真正付费的章节吗? | 不能,它只把页面允许加载的内容完整呈现,付费墙不在脚本职责内 |
最后聊聊边界:什么它能做,什么它不该做
一整天实测下来,我给 baidu-wenku 的评价是六个字:轻、快、稳、边界清楚。它不解决批量搬运,也不承诺绕过付费墙,它只解决一个朴素需求——偶尔遇到一篇需要完整阅读的文库文档,能体面地存到本地。
说白了,它替我解决的是"读得下去"的问题;至于读完之后能想明白什么,那是任何脚本都替不了我的部分。如果你正被文库的付费提示和弹窗劝退,按上面的四步试一次,全程不超过十分钟。
最后留个问题给你:如果换成你,最近一次被文库付费提示劝退的是哪份材料?跑通之后,欢迎回来聊聊你的结果。
【免费下载链接】baidu-wenkufetch the document for free项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考