weread-exporter

5个月前发布 483 00

weread-exporter是一款微信读书全本导出工具 — 通过 Playwright + Canvas Hook 提取完整书籍内容,导出为 Markdown。

所在地:
中国
收录时间:
2026-06-09
weread-exporterweread-exporter

微信读书网页版为了防抓取,采用 Canvas 而非 DOM 节点渲染文字,导致传统复制粘贴失效。weread-exporter 是一款专为解决此难题设计的开源工具。它通过 Playwright 自动化浏览器,结合创新的 Canvas fillText Hook 技术,拦截底层绘图指令,将像素级的字符坐标重新重组为可读、可搜索、可编辑的 Markdown 文档,助你轻松构建个人数字图书馆。

核心亮点:突破渲染限制,完美还原文本

1. Canvas Hook 技术

  • 底层拦截:在页面 JS 执行前注入钩子,直接拦截 CanvasRenderingContext2D.fillText() 调用,捕获每一个字符及其精确的 (x, y) 坐标。
  • 非 OCR 方案:相比传统截图 OCR,此方法无损、极速且准确率 100%,彻底避免识别错误。

2. 智能双页拆分与文本重建

  • 双页分离:针对微信读书“当前页+下一页预渲染”的特性,通过检测 Y 坐标重置点,自动将混合字符流拆分为独立页面。
  • 坐标重组:依据坐标信息将离散字符重组为行与段落,自动合并断行,还原自然阅读体验。
  • 格式清理:智能处理标点与空格,输出整洁的 Markdown 格式。

3. 会话持久化,免重复登录

  • 扫码一次,长期有效:首次运行弹出浏览器扫码登录,会话自动保存在 cache/browser_profile/。
  • 自动复用:后续导出无需再次扫码,极大提升批量处理效率。

4. 结构化输出

  • 元数据完整:自动生成 meta.json,包含书名、作者、章节列表等。
  • 灵活存储:支持按章节独立存储 Markdown,或合并为单本全本文件;可选保存原始 Canvas 坐标数据用于调试。

快速开始

1. 环境准备

pip install playwright
playwright install chromium

2. 使用示例

基础导出:

# 传入书籍 URL
python weread_export.py https://weread.qq.com/web/bookDetail/dd6324f0813ab9f97g019a24

# 或直接传 book_id
python weread_export.py dd6324f0813ab9f97g019a24

高级选项:

# 指定输出目录
python weread_export.py <book_id> -o ./my_library

# 不保存原始 Canvas 数据(节省空间)
python weread_export.py <book_id> --no-raw

工作流程

  1. 登录与初始化:启动 Chromium,加载缓存会话(或扫码登录),获取书籍元数据。
  2. 逐章处理:打开阅读器页面,注入 Canvas Hook。
  3. 数据采集:自动翻页,收集每一页的 fillText 数据。
  4. 数据处理:双页拆分 → 坐标排序 → 文本重组 → 段落格式化。
  5. 文件输出:生成章节 Markdown 及全本合并文件。

限制与注意事项

  • 账号权限:需要有效的微信读书账号,且拥有目标书籍的阅读权限(无限卡或已购买)。
  • 平台限制:部分出版社禁止网页端阅读(提示“去 App 阅读”)的书籍无法导出。
  • 导出速度:受限于模拟翻页等待时间,平均约 20-30 秒/章。
  • 法律合规:请仅用于个人学习、笔记整理及备份,尊重版权,严禁用于商业传播。

相关导航