[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83401":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":24,"readmeContent":25,"aiSummary":9,"trendingCount":15,"starSnapshotCount":15,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},83401,"weread-exporter","lbq110\u002Fweread-exporter","lbq110","微信读书全本导出工具 — Playwright + Canvas Hook 提取完整书籍内容为 Markdown",null,"Python",209,53,56,1,0,3,104,26,5.2,false,"main",true,[],"2026-06-12 02:04:33","# weread-exporter\n\n微信读书全本导出工具 — 通过 Playwright + Canvas Hook 提取完整书籍内容，导出为 Markdown。\n\n## 原理\n\n微信读书网页版使用 Canvas 渲染书籍文字（而非 DOM 文本节点），本工具通过以下技术栈实现内容提取：\n\n1. **Playwright 自动化** — 启动 Chromium，持久化登录会话（扫码一次，后续自动复用）\n2. **Canvas fillText Hook** — 在页面 JS 执行前注入钩子，拦截所有 `CanvasRenderingContext2D.fillText()` 调用\n3. **双页拆分** — 微信读书在同一 Canvas 上同时渲染当前页和下一页（预渲染优化），本工具通过检测 y 坐标重置点将两页字符流正确分离\n4. **文本重建** — 按 (x, y) 坐标将捕获的单字符重组为行和段落\n5. **格式清理** — 合并 Canvas 渲染断行，还原自然段落\n\n## 安装\n\n```bash\npip install playwright\nplaywright install chromium\n```\n\n## 使用\n\n```bash\n# 传入书籍 URL\npython weread_export.py https:\u002F\u002Fweread.qq.com\u002Fweb\u002FbookDetail\u002Fxxxxx\n\n# 或直接传 book_id\npython weread_export.py dd6324f0813ab9f97g019a24\n\n# 指定输出目录\npython weread_export.py \u003Cbook_id> -o .\u002Fbooks\n\n# 不保存原始 Canvas 数据（节省磁盘空间）\npython weread_export.py \u003Cbook_id> --no-raw\n```\n\n首次运行会弹出浏览器窗口要求扫码登录微信读书，登录后会话自动保存在 `cache\u002Fbrowser_profile\u002F`。\n\n## 输出\n\n```\noutput\u002F\n├── \u003Cbook_id>\u002F\n│   ├── meta.json          # 书籍元数据（标题、作者、章节列表）\n│   ├── chapters\u002F          # 每章独立 Markdown\n│   │   ├── 001.md\n│   │   ├── 002.md\n│   │   └── ...\n│   └── raw\u002F               # 原始 Canvas 坐标数据（可选，用于调试\u002F重处理）\n│       ├── 2.json\n│       └── ...\n└── 书名.md                # 合并后的全本文件\n```\n\n## 限制\n\n- 需要有效的微信读书账号，且对目标书籍有阅读权限（无限卡会员或已购买）\n- 部分出版社限制网页端阅读（显示\"去 App 阅读\"），此类书籍无法导出\n- 导出速度受翻页等待时间限制，约 20-30 秒\u002F章\n\n## 工作流程\n\n```\n浏览器登录 → 获取书籍元数据 → 逐章打开 reader 页面\n    → 注入 Canvas Hook → 翻页收集 fillText 数据\n    → 双页拆分 → 坐标重建文本 → 段落格式化 → 输出 Markdown\n```\n\n## 声明\n\n仅供个人学习研究使用。请勿用于商业用途或大规模传播，请尊重著作权。\n",2,"2026-06-11 04:11:05","CREATED_QUERY"]