# 123 **Repository Path**: liruisjf/123 ## Basic Information - **Project Name**: 123 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-28 - **Last Updated**: 2026-10-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 知乎收藏助手(Zhihu Saver) 基于 **PySide6 + Qt WebEngine** 的桌面工具:内嵌浏览器浏览知乎,在页面上**自动注入「收藏到本地」按钮**, 一键把回答 / 文章保存成本地 Markdown 文件。 ## 功能 - **内嵌浏览器**:Qt WebEngine 渲染知乎完整页面,支持后退 / 前进 / 刷新 / 地址栏 / 关键词搜索。 - **自动注入收藏按钮**:回答、文章卡片底部以及**每条评论**都会出现蓝色「收藏」按钮,无需手动操作;滚动加载、点开评论区产生的新内容自动补注入。 - **完整内容抽取**:长回答被折叠时,会先自动点「展开阅读全文」再抽取,保证落盘的是完整正文而不是截断版。 - **一键落盘**:点击按钮后自动抽取作者、标题、正文、赞同数、评论数、发布时间、原文链接,生成带 front-matter 的 Markdown;评论会额外记录所属回答 / 文章。 - **登录态持久化**:Cookie / LocalStorage 保存在数据目录,重启后无需重新登录。 - **本地收藏侧栏**:实时列表、按分类筛选、按标签筛选、文本搜索,一键打开 Markdown、跳回原页面、编辑分类与标签、导出 HTML / PDF、删除记录。 - **去重**:同一回答 / 评论重复点击只会刷新内容,不会产生重复条目。 - **AI 摘要与分类**(可选):基于 DeepSeek 自动生成中文摘要和 2-6 字分类(参考 zreader 的标签 + 摘要思路),结果会回写到 Markdown front-matter。 - **公式与图片**:知乎渲染出的公式图片会被还原成 `$...$` / `$$...$$` 的 LaTeX,正文里的图片、列表、加粗等都能保留。 ## 环境要求 - Python ≥ 3.10 - [uv](https://docs.astral.sh/uv/)(依赖与虚拟环境管理) - Windows / macOS / Linux 桌面环境 ## 安装与运行 ```powershell # 1. 安装依赖(国内默认走清华镜像,见 pyproject.toml) uv sync # 2. 启动 uv run python -m zhihu_saver # 可选:指定数据目录 / 启动地址 uv run python -m zhihu_saver --data-dir D:\zhihu-data --url https://www.zhihu.com/hot ``` ## 离线自检 不依赖网络,用 `tests/fixture.html` 中复刻的知乎卡片结构验证「注入 → 点击 → 落盘」全链路: ```powershell uv run python -m zhihu_saver --self-test --self-test-seconds 14 --data-dir .selftest-data ``` 期望输出: ``` [self-test] 1. 注入探测 -> {"cards":2,"comments":1,"buttons":3,"qwebchannel":"function","transport":true,"bridge":"object"} [self-test] 2. 点击收藏按钮 -> 3.0 [self-test] 3. 落盘条目数 -> 3 [self-test] · [answer] 2068626296582809463 | 洛阳小散户 | 为什么说普通人很难挣到钱? | ... [self-test] · [comment] 2068626296582809463-c987654321 | 评论者甲 | 为什么说普通人很难挣到钱? | ... [self-test] · [answer] 1234567890123456789 | 测试作者 | 这是一条用于自测的回答 | ... [self-test] 4. 覆盖类型 -> ['answer', 'comment'] [self-test] 结果 -> PASS ``` 夹具里第 1 张回答卡片故意带一个「展开阅读全文」按钮与一段 `display:none` 的隐藏段落, 自检会验证展开后完整正文确实被落盘;同时夹具含 1 条评论,用于验证评论收藏链路。 ## 单元测试 纯逻辑层(`storage` / `exporter` / `config`)有 pytest 覆盖,跑: ```powershell uv run pytest tests/ ``` 不依赖 Qt,启动快。 ## 使用说明 1. 启动后在地址栏输入 `https://www.zhihu.com` 并登录(扫码 / 账号密码均可,登录态会保存)。 2. 打开问题页或文章页,滚动到任何一条回答——末尾会出现蓝色「收藏」按钮。 长回答会被自动展开,点一次即可保存**完整正文**。 3. 点开某条回答的「N 条评论」,每条评论右下角也会出现小号「收藏」按钮,可单独收藏评论。 4. 点击按钮,按钮变灰显示「已收藏」,右下角弹出保存路径提示。 5. 右侧栏列出所有本地收藏: - 双击用系统默认程序打开 Markdown - 「原页面」跳回知乎 - 「编辑」修改分类与标签 - 「导出HTML / 导出PDF」另存为单文件 - 「删除」移除记录 - 顶部下拉切换「分类」,文本框按标题 / 作者 / 标签 / 摘要 / 正文实时过滤,下方的标签芯片可单选筛选 ## 数据目录 默认 `~/.zhihu_saver`(Windows 为 `C:\Users\<用户名>\.zhihu_saver`),可用 `--data-dir` 或环境变量 `ZHIHU_SAVER_HOME` 覆盖。 ``` ~/.zhihu_saver/ ├── items.jsonl # 索引:每行一条 JSON 记录 ├── markdown/ # 正文:answer--<标题>.md / comment-<父ID>-c<评论ID>-<标题>.md └── webengine/ # Qt WebEngine 持久化存储(Cookies 等) ``` ## 快捷键 | 快捷键 | 功能 | | --- | --- | | `Alt+←` / `Alt+→` | 后退 / 前进 | | `F5` | 刷新 | | `Alt+Home` | 回到知乎首页 | ## 文档 - [技术实现说明](docs/技术实现.md) —— 注入机制、DOM 契约、QWebChannel 通信、存储设计 ## 项目结构 ``` zhihu_saver/ ├── app.py # 入口:Qt 属性配置、命令行、离线自检 ├── main_window.py # 主窗口:工具栏 / 浏览器 / 收藏侧栏(含搜索、标签筛选、编辑对话框) ├── web_view.py # QWebEngineView + Profile + 脚本注册 ├── bridge.py # QWebChannel 桥接对象(网页 ↔ Python)+ AI 后台补齐 ├── storage.py # JSONL + Markdown 落盘、去重、删除、AI 回写、手动编辑 ├── ai.py # DeepSeek 摘要 / 分类(OpenAI 兼容协议) ├── config.py # 应用配置(JSON 持久化 + 环境变量) ├── exporter.py # HTML / PDF 导出 └── inject.js # 注入脚本:按钮注入 / 数据抽取 / MutationObserver / 接管新窗口导航 tests/ ├── fixture.html # 离线自检用的知乎卡片结构夹具 ├── test_storage.py # SavedItem / Storage 单元测试 ├── test_exporter.py # build_html 单元测试 └── test_config.py # AppConfig 单元测试 ``` ## 常见问题 **知乎页面一直白屏 / 停在加载中?** 先确认本机能否正常访问知乎(浏览器直连)。部分网络环境会阻断或极慢地加载知乎, 表现为 `loadProgress 0%` 后再无进展,这与本工具无关。用 `--auto-exit` 可以快速判断: ```powershell # 用一个通用站点确认注入框架本身正常(应看到 bridge -> 'object') uv run python -m zhihu_saver --url https://example.com --auto-exit 15 ``` **控制台出现 `Failed to create shared context` / `WebGL1 blocklisted`?** 这是虚拟机、远程桌面或无独立显卡环境下 Chromium 的 GPU 告警,**不影响本工具功能**。 如需消除,可设置软件渲染: ```powershell $env:QTWEBENGINE_CHROMIUM_FLAGS = "--disable-gpu" uv run python -m zhihu_saver ``` **页面刷新后按钮消失?** 注入脚本依赖知乎的 `data-zop` 卡片标记。若知乎大改版导致标记变更,需更新 `zhihu_saver/inject.js` 中的 `CARD_SELECTOR` 与 `extract()` 的字段映射。 **收藏后按钮仍是「收藏」?** 点开后没有变灰说明保存失败,请查看窗口底部状态栏的提示信息。 **评论区的「收藏」按钮没出现?** 知乎的评论是懒加载的——必须先点开「N 条评论」让评论挂到 DOM 上,注入脚本才会补上按钮。 同理,长回答如果还没展开,点收藏也会先自动展开再保存,所以会多几百毫秒延迟。 **怎么让 AI 帮我自动摘要?** 工具栏 → 「AI 设置」→ 勾选「收藏时自动生成摘要与分类」,填入 DeepSeek API Key。 也可以直接设置环境变量 `DEEPSEEK_API_KEY`,启动时若检测到该变量会自动开启。 AI 完成后会回写 Markdown,并在右侧栏即时更新分类。 **怎么修正 AI 分类错了的标签 / 分类?** 选中列表中的记录,点「编辑」按钮,可以手动修改分类(单行), 标签可加可删,每条用「,」或空格分隔。保存后会重新生成 Markdown。 ## 免责声明 本工具仅用于个人学习与离线留存,保存的内容版权归原作者所有,请勿二次分发或用于商业用途。 请遵守知乎的用户协议,控制请求频率。