小说会悄悄消失这款开源小说下载器能把100多个网站的书装进TXT和EPUB【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader书架上那本书还在点进去却已是 404——追更的人都懂这种后背发凉的感觉。为了不再让喜欢的作品随网站一起蒸发我养成了一个新习惯用开源小说下载器 novel-downloader 把连载中的书提前备份成 TXT 和 EPUB。这是一款可扩展的通用型小说下载器覆盖国内外 100 多个小说网站。这篇文章就是昨晚我抢救一本书的完整复盘从为什么备份、怎么装、点了下载后发生了什么到碰到加密正文怎么解、想自定义怎么改一条线讲完。为什么书架上的书会凭空消失先搞清你要备份什么不是错觉小说真的会消失。很多作品即使已经入 V、即使你已经订阅网站一改版或合同一到期页面说没就没。更极端的情况是轻文轻小说这类整个网站直接关停。热门的书被笔趣阁等转载站接住后来者还能看到而那些质量不错但不够火、没有任何转载站收录的作品就会彻底从互联网上蒸发。novel-downloader 正是404 小说文库项目的组成部分它的目标很朴素在书还在的时候把它稳稳地存到你自己的硬盘上。如果某天你常看的网站连不上了至少你手里还有一份完整的离线拷贝。下载完成后脚本会自动产出几样东西各有各的用处下载产物适合场景特点TXT 文档手机阅读器、老设备纯文本、体积最小几乎任何设备都能打开EPUB 文件电纸书、平板自带目录、封面、插图与排版阅读体验最好原样 HTML 打包开发者排查、保留网站原貌连同原始页面与调试日志一起归档方便核对小贴士脚本执行下载任务时会播放一段无声音频这是为了防止浏览器把后台标签页休眠、中断下载属于正常现象不是 bug也不必关掉它。装好它只需三步装管理器、跑一次构建、点一下图标第一步先给浏览器装一个脚本管理器Tampermonkey、Violentmonkey 或 Greasemonkey 任选其一。novel-downloader 本质是油猴脚本需要这个容器来运行。第二步拿到脚本本体。想直接开箱即用可以装已打包发布的版本想改代码、跟新版本也可以自己构建。构建只要四条命令git clone https://gitcode.com/gh_mirrors/no/novel-downloader cd novel-downloader yarn install yarn build第一行把源码克隆到本地第二行进入项目目录第三行用 yarn 安装全部依赖第四行用 webpack 打包。构建完成后把生成的bundle.user.js文件拖进脚本管理器界面即可完成安装。想改代码的话改完再跑一次yarn build就能拿到新脚本。第三步打开任意一个受支持的小说网站。当页面右上角出现下载图标时点击它下载就开始了右下角会有进度条。点击下载后的半小时脚本替你在后台做了四件事昨晚那本三百多章的书从点击图标到拿到文件大约花了半小时。这半小时里脚本其实在后台干了四件活收集书籍信息书名、作者、简介、封面、分卷和章节列表一次性抓齐逐章抓取正文按章节链接依次请求跳过已购买检查识别 VIP 章节清洗正文用内置的 DOM 清洗逻辑底层用了 Readability 算法把广告、导航、脚本噪音全部剥掉只留干净的段落和图片打包导出把正文边下边写用流式压缩生成 TXT 与 EPUB所以几千章的大长篇也不会把浏览器内存撑爆。下载过程中想看得更细可以按下 F12 打开控制台每一步状态都打印在那里如果下载异常卡住控制台日志也是排查的第一手资料。正文被加密成天书三种解码器这样把它翻译回来能直接抓到纯文字是最好的但很多网站不会让你这么舒服晋江文学城用自定义字体加密正文字符看着是正常汉字复制出来却是乱码海棠、书耽的 VIP 章节干脆只给图片版还有些网站把文字伪装成图片。针对这些反爬手段脚本准备了三层解码方案逐级兜底解码方案处理方式适用场景速度文件名映射解码根据图片文件名直接匹配对应文字文件名里藏着字符信息的简单替换最快哈希值匹配解码下载图片、计算哈希值后匹配已知字符文件名会变、但图片内容不变的情况中等OCR 光学字符识别浏览器内跑 PaddleOCR 中文模型识别复杂图片正文无从映射只能硬识别最慢但最准遇到晋江这类字体加密脚本会自动把网站的字体文件下载下来逐一建立字形 → 汉字的映射关系再反过来还原正文图片版章节则走文件名映射或哈希匹配实在匹配不上的复杂图片才动用 OCR。你甚至可以在设置里打开调试模式查看字体匹配的详细过程。别把整本书都搬走三个高频自定义需求一条代码搞定不是每次都想把整本下载下来。脚本在设置里预留了几个自定义入口最常见的是这三种只下载前 50 章或只要番外在自定义章节过滤里写// 只下载前 50 章 function chapterFilter(chapter) { return chapter.chapterNumber 50; } // 或只要番外 function chapterFilter(chapter) { return chapter.chapterName chapter.chapterName.includes(番外); }chapterFilter对每一章返回 true 或 false返回 true 的才会被下载改判断条件就能精准圈定下载范围。想要第X章 标题这样的章节命名、或自定义正文字号缩进在自定义保存选项里写const saveOptions { getchapterName(chapter) { return chapter.chapterName ? 第${chapter.chapterNumber}章 ${chapter.chapterName} : 第${chapter.chapterNumber}章; }, mainStyleText: p { text-indent: 2em; line-height: 1.6; } };getchapterName决定章节标题长什么样mainStyleText直接决定正文 CSS段落缩进、行距、字号都在这里调。下载太快被反爬想放慢就去设置里调三个参数concurrencyLimit并发数、sleepTime基础间隔、maxSleepTime最大间隔。默认分别是 1、500ms、2000ms节奏已经比较克制。小贴士间隔不要一味往小了调——长佩文学这类反爬严格的站每分钟约只能下 6 章开太多并行反而容易触发风控耐心等是最优解。让脚本认识新网站继承一个模板类实现两个方法所有网站支持都收敛在src/rules/目录里按站点形态分类存放规则类型适配的站点形态代表网站onePage单页式目录各类笔趣阁、UU看书twoPage分页式目录轻之文库、18看书special需要特殊处理的平台晋江、起点、pixiv、番茄biquge / mbtxt同源网站批量适配笔趣阁变体、全书斋给新网站写支持核心就是继承BaseRuleClass实现bookParse解析书籍信息和目录和chapterParse解析章节正文两个方法。大部分单页站点甚至不用从零写直接套用src/rules/onePage/template.ts的mkRuleClass模板把书名的选择器、章节列表的选择器、正文的清洗函数填进去就行写完后在src/router/download.ts里注册一条匹配规则再yarn build一次即可。这也是项目可扩展三个字的由来——加站成本被压到了最低。六个真实踩过的坑附排查步骤付费章节下不下来先确认已登录网站账号、且已购买对应章节。未登录或未购买时付费章节会被直接忽略这是设计如此不是 bug。长佩下载特别慢正常反爬限速每分钟约 6 章。不要多开页面同时下载多本长佩小说否则更容易被限。详情页没有下载图标长佩、pixiv 这类单页应用网站直接按下 F5 重新加载页面即可无需反复刷新标签。下载卡住、没有任何文件生成在设置里开启调试模式日志会写进下载产物里的debug.log也可以启用测试视图把日志选项卡内容复制出来保存成 txt提交问题时会用到。遇到问题去哪反馈请到项目支持页面按模板提交 issue并附上上述日志。发在评论区、交流群组的反馈不会被处理。存档到互联网档案馆的授权弹窗首次使用会询问是否将当前书页存档至 archive.org 以备日后查看。同意与否都不影响下载功能但注意该功能会搜集并上报 IP、User-Agent、当前 URL 等少量信息介意的话拒绝即可。下一步从顺手使用者变成共建者如果你常看的网站刚好不在支持列表里最有效的做法是提交 issue 描述清楚站点结构或者直接参考src/rules/onePage/template.ts写一条规则提交上来——项目欢迎代码贡献而不是只等别人实现。想深入了解内部设计的可以读读仓库里的docs/目录和CLAUDE.md里面有针对 Cloudflare 挑战页、closed shadow DOM 这类硬核场景的方案文档。先做这三件事吧今晚把正在追的书挨个备份一遍把下载参数按自己的网速调一轮如果顺手再给这个项目提第一个 issue 或 PR。书会消失但备份不会——这份安心值得花一个晚上来换。【免费下载链接】novel-downloader一个可扩展的通用型小说下载器。项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考