WebToEpub 实战:如何把网页小说打包成可离线阅读的 EPUB
【免费下载链接】WebToEpubA simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB.项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub
WebToEpub 是一个 Firefox 与 Chrome 浏览器扩展,把在线小说、漫画和任意网页打包成标准 EPUB 电子书。它主要面向长期追更、需要离线阅读、或担心网站关站的读者,也向开发者开放了解析器扩展点。安装后只需打开小说页面、点击工具栏图标,全部章节、图片和封面就会被下载、清洗并压缩进一个 .epub 文件。
📦 上手初体验:从源码到第一本 EPUB
不想编译的话,直接去 Firefox Add-ons 商店或 Chrome Web Store 安装同名扩展即可,装完就能用。这里走源码路线,因为它对开发者和想要最新功能的用户更透明。
git clone https://gitcode.com/gh_mirrors/we/WebToEpub cd WebToEpub npm install npm run lint执行完最后一条命令,eslint/ 目录下会生成 WebToEpub0.0.0.x.xpi(Firefox 版)和 WebToEpub0.0.0.x.zip(Chrome 版),同时完成一次代码检查。
接下来把扩展加载进浏览器:
- Firefox:地址栏输入 about:debugging#/runtime/this-firefox,点 Load Temporary Add-on,选 xpi 文件
- Chrome:打开 chrome://extensions,勾选 Developer Mode,点 Load unpacked extension,选解压后的目录
加载成功后,随便打开一个小说页面,点工具栏的 WebToEpub 图标。弹窗里会自动填入标题、作者、语言,下方列出全部章节。点 Pack EPUB,进度条走完后,一个 epub 文件出现在下载目录——到这里,最低成本的完整体验就跑通了。
⚙️ 功能聚焦:四个值得了解的核心能力
422 个站点解析器:打开页面即识别
特性:plugin/js/parsers/ 目录下有 422 个解析器文件,每个对应一类网站,从 Baka-Tsuki、FanFiction 到 Wuxiaworld、RoyalRoad,readme.md 的站点列表与之一一对应。ParserFactory.js 按域名匹配解析器,匹配不到时按 URL 规则和页面结构打分,再兜底到默认解析器。
效果:你不需要判断"这个网站支不支持",打开页面它自己会选。
对你意味着什么:主流小说站几乎都是开箱即用,只有小众站点才需要额外配置。
章节整理与元数据:一本书一个文件
特性:解析器提取章节 URL 列表,允许你勾选区间、增删条目;书名、作者、语言从页面的 og:title、og:locale 等标签自动读取,作者、语言、文件名都可以手动改。
效果:打包出来的 epub 自带目录、作者和语言信息,封面图默认取正文第一张图,也可手动指定 URL。
对你意味着什么:文件丢进 Calibre 后书名和目录都是对的,不用再手动改元数据。
图片下载与嵌入:离线也看得见图
特性:ImageCollector.js 负责所有图片,按 URL 和位图哈希去重,正文中的图片逐一下载后写入 epub 内部的 Images 目录。
效果:epub 不依赖任何网络资源,断网、换设备、原站删图都不影响阅读。
对你意味着什么:漫画站、插图类轻小说同样适用,不只是纯文字。
默认解析器:给陌生站点留了后路
特性:列表里没有的网站会进入 Default Parser 模式,界面提供四个输入框:正文区 CSS 选择器、章节标题选择器、需要移除的元素选择器、测试用的章节 URL。配置按域名存进浏览器本地,下次自动带出,并带一个测试按钮先验证。
效果:用几个选择器就能"教会"扩展一个新站点,不必写代码。
对你意味着什么:遇到没收录的站点,先花两分钟配一下选择器,多数情况就能出书。
📖 实战场景:我的一次完整打包
我打开一部在 Wuxiaworld 连载的长篇小说主站页面,点扩展图标。专用解析器把几百个章节全部列出来,元数据自动填好,我只在作者一栏确认了一下,点 Pack EPUB。进度条慢慢爬升——它在按章节限速下载正文和图片,默认最小间隔 500 毫秒、并发为 1,这是刻意设计来避免触发反爬。十几分钟后,下载文件夹里多了一个以书名命名的 epub。导入 Calibre,目录、作者、语言、封面全齐。
第二个场景更典型:一个没被收录的小型翻译站。我打开任意一章,扩展自动进入 Default Parser 模式,我用浏览器检查元素找到正文容器,把它的选择器填进"内容区"一栏,填一个章节 URL 点测试,预览正常后保存配置,再回到章节列表打包。全程没有写过一行代码。
🧯 避坑指南:五个常见问题与解法
Firefox 临时扩展重启即失效。about:debugging 加载的扩展是临时的,浏览器重启后要重新加载。日常使用建议装商店版,源码版只在开发时用。
个别章节报 403 或抓不到内容。扩展有 noContentToError403 选项处理空内容返回 403 的站点;下载慢是限速策略,别指望靠提高并发加速,卡住时先检查网络,再减少章节数量重试。
整本书打包中途某章失败。勾选"跳过抓取失败的章节"后,失败章节会以占位页形式写进 epub 并记录错误,不会让整个打包中断,事后可单独重抓。
文件被存成 IllegalFileName.epub。说明文件名含 Windows 非法字符,扩展会先弹错提示;在偏好里开启"自动移除非法字符",它会清洗后正常保存。
本地跑单元测试失败。npm test 会用 http-server 拉起 unitTest/Tests.html 在浏览器里跑 QUnit 测试;如果不用 Node 直接开本地文件,Chrome 需要加 --allow-file-access-from-files 参数启动,否则部分请求会被拦截。
适合经常追更网页小说、想把整本书存进本地书库的读者;代码与说明可直接查看仓库内的 readme.md 和 unitTest/Tests.html。
【免费下载链接】WebToEpubA simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB.项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考