一条命令将 NixNote2 笔记发布到 CSDN 博客,图片自动上传到 CSDN CDN。
- Python 3.12+
- NixNote2(数据库路径
~/.local/share/nixnote2/db-2/nixnote.db) - Google Chrome
- xclip(Linux 剪贴板支持)
sudo dnf install xclip # Fedora
sudo apt install xclip # Ubuntu/Debiancd ~/code/nixnote2-csdn
python -m venv .venv
source .venv/bin/activate
pip install -e .工具通过 Chrome 远程调试接口操作浏览器。首次使用需以调试模式启动 Chrome:
google-chrome --remote-debugging-port=9222然后在 Chrome 中手动登录 CSDN(只需登录一次,Cookie 持久化)。
ChromeDriver 无需手动安装:工具使用 Selenium Manager 自动检测并下载与当前 Chrome 版本匹配的 chromedriver。
config.yaml中service_location留空即可,首次运行时会自动完成。
复制模板并填写:
cp nixnote2_csdn/config.yaml.example nixnote2_csdn/config.yamlconfig.yaml 已加入 .gitignore,不会提交到仓库。
browser:
mode: attach # attach = 附加到已运行的 Chrome(推荐)
debugger_address: "127.0.0.1:9222"
service_location: "" # 空 = Selenium Manager 自动检测 chromedriver
stealth_js_path: "" # 空 = 跳过 stealth.js 注入
chrome_profile_dir: "~/.config/nixnote2-csdn-chrome/" # launch 模式专用platforms:
csdn:
# 文章可见范围:全部可见 | 仅我可见 | 粉丝可见 | VIP可见
visibility: "全部可见"
# 文章类型(全局默认):原创 | 转载 | 翻译
article_type: "原创"
# 按 Notebook 名覆盖文章类型(精确匹配,可选)
notebook_article_type:
转载资料: "转载"
翻译笔记: "翻译"
# 摘要(留空则自动从正文前 150 字生成)
summary: ""XPath 选择器字段通常不需要修改,除非 CSDN 更新了编辑器 DOM。
如果发布卡住,运行 nixnote2-pub check-selectors 诊断。
platforms:
csdn:
# 专栏复选框枚举 XPath(供 --yes 动态匹配使用,勿修改)
category_checkbox_all: "//input[@type='checkbox' and contains(@class,'tag__option-chk')]"category_checkbox_all 是 --yes / -y 动态专栏匹配的必要配置项。工具用它枚举
CSDN 专栏面板中所有已有专栏,再与 NixNote2 Notebook 名做精确匹配。
若此 XPath 失效(CSDN DOM 更新),运行 nixnote2-pub check-selectors 诊断并更新。
# 激活虚拟环境
source .venv/bin/activate
# 搜索笔记(返回 LID)
nixnote2-pub search python
# 列出某个 Notebook 的笔记
nixnote2-pub list AI
# 发布笔记到 CSDN(草稿模式)
nixnote2-pub publish <LID>
# 发布并自动新建不存在的专栏(跳过确认提示)
nixnote2-pub publish <LID> --yes
# 检查 XPath 选择器是否与实时 CSDN DOM 匹配
nixnote2-pub check-selectors
--yes/-y:跳过"是否新建专栏?"的交互确认,自动尝试在 CSDN 创建专栏。适用于脚本或无 人值守场景。等价短标志:nixnote2-pub publish <LID> -y。
- 运行
nixnote2-pub publish <LID> - 工具自动:提取笔记 → 转换 Markdown → 上传图片到 CSDN CDN → 填写标题/标签/专栏/文章类型 → 保存草稿
- 终端打印草稿 URL,在浏览器里确认内容后点「发布文章」
工具根据 NixNote2 的 Notebook 名自动匹配 CSDN 专栏。 若该专栏不存在,会提示:
没有找到与 'AI' 匹配的专栏,是否新建?[y/N]
- 输入
y:工具尝试自动新建(best-effort,不保证每次成功) - 若自动新建失败,草稿仍会保存,终端打印手动建专栏的步骤
手动建专栏(一次性操作): CSDN → 内容管理 → 我的专栏 → 新建,名称填 Notebook 名。 之后该 Notebook 的所有笔记发布时将自动匹配。
- 专栏自动新建:CSDN 编辑器 Vue 交互限制,自动新建偶尔失败;首次手动建专栏后无此问题
- 仅支持 CSDN:掘金、知乎暂未实现(v2 计划)
- 草稿模式:工具只保存草稿,不直接发布,需在 CSDN 页面手动点「发布文章」
| 问题 | 解决方法 |
|---|---|
NotLoggedInError |
Chrome 中重新登录 CSDN,重试 |
SelectorError: xxx |
运行 check-selectors 确认哪个 XPath 失效,对照 CSDN DOM 更新 config.yaml |
| 标签全部粘在一起 | CSDN 响应慢,代码已有 2s 延时;如仍失败可减少笔记标签数量(建议 ≤5 个) |
| 内容为空 | 检查 xclip 是否安装:echo test | xclip -selection clipboard && xclip -selection clipboard -o |
| 草稿 URL 提取失败 | 非错误,草稿已保存,在 CSDN 草稿箱确认 |
在 Claude Code 中输入 /nixnote2-export 可启动交互式发布向导,无需手动查找笔记 LID。
与 CLI 相同:Chrome 以 --remote-debugging-port=9222 运行,已登录 CSDN,虚拟环境已激活。
在 Claude Code 对话框输入:
/nixnote2-export
技能按以下顺序提示,所有步骤均可跳过(直接按 Enter):
| 步骤 | 提示内容 | 说明 |
|---|---|---|
| 1 | 请问您想查找最近几天更新的笔记? | 输入天数,例如 2、7、30 |
| 2 | 请选择 Stack(或直接回车跳过) | 按编号选择笔记本堆栈,0 跳过 |
| 3 | 请选择笔记本(或直接回车跳过) | 按编号选择具体笔记本,0 搜索整个 Stack |
| 4 | 请输入搜索关键词(可选) | 关键词过滤,直接回车跳过 |
| 5 | 找到 N 篇笔记(显示最新 10 篇)… | 展示编号列表,含标题、笔记本、更新日期 |
| 6 | 请输入编号选择要发布的笔记 | 输入编号;0 退出 |
| 7 | 发布《标题》到 CSDN 草稿?[y/N] | 确认后调用 nixnote2-pub publish <LID> |
成功时终端打印:
草稿已保存:https://editor.csdn.net/md/?articleId=XXXXXXXXX
在浏览器中打开该 URL,确认内容无误后点击「发布文章」完成发布。
| 错误提示 | 原因 | 解决方法 |
|---|---|---|
nixnote2-pub not found |
未安装或未激活虚拟环境 | source .venv/bin/activate,重新运行 |
config.yaml not found |
未复制配置模板 | cp nixnote2_csdn/config.yaml.example nixnote2_csdn/config.yaml |
CSDN 登录已过期 |
Chrome 会话失效 | 在浏览器中重新登录 CSDN,重新运行技能 |