Obsidian + Claude Code 搭自动化发布客户端:Playwright × 掘金/知乎/CSDN 的全链路踩坑实录
Obsidian Claude Code 搭自动化发布客户端Playwright × 掘金/知乎/CSDN 的全链路踩坑实录AI工具人PM 的实战笔记前几篇讲了掘金、知乎各自的自动化踩坑。这三篇合起来——我用 Obsidian Playwright Claude Code Electron从源码文件到三个平台一键发布搭了一整套系统。这不是教程是我的真实踩坑记录。起因三个平台的编辑器让我疯掉了掘金是 CKEditor直接往 DOM 里注入 HTML知乎是 Draft.js基于 React 的富文本编辑器数据存在 Immutable.js 结构里DOM 上看不到正文内容CSDN 又是另一套编辑模式。每次手动发一篇文章要开三个浏览器窗口切换七八次——标题复制一次内容复制三次格式还不完全一样标签一个个手选。如果一天发一篇一个月就是三十次这样的循环。但真正要命的是手动发的时候你不知道失败原因是什么。页面卡了Cookie 过期了网络超时了你只能盯着转圈的那个按钮不知道问题出在哪。自动化是出路。但问题在于怎么确保你的自动化真的跑通了架构Obsidian 写 → Python 发 → Electron 看┌─────────────────────────────────────────────────┐ │ Obsidian (Markdown 源文件) │ │ └── 待发布/ ← frontmatter: title, url, status │ │ └── 已发布/ ← 各平台归档 │ ├─────────────────────────────────────────────────┤ │ Python 后端 (vault-scripts/) │ │ ├── daily_publish.py ← 调度 CLI 入口 │ │ ├── juejin.py ← 掘金 Playwright 引擎 │ │ ├── zhihu.py ← 知乎 Playwright 引擎 │ │ └── csdn.py ← CSDN Playwright 引擎 │ ├─────────────────────────────────────────────────┤ │ Electron 客户端 (pubhub) │ │ ├── main.js ← 主进程 IPC handler │ │ ├── preload.js ← 安全桥接 │ │ ├── renderer/ ← Vue.js 前端 │ │ │ ├── index.html ← 表格列表 详情弹窗 │ │ │ ├── app.js ← 发布状态管理 │ │ │ └── style.css ← 暗色侧边栏 进度面板 │ │ └── data/ ← article_cache.json │ └─────────────────────────────────────────────────┘核心设计原则 -Obsidian 是唯一的源。不用维护多份内容frontmatter 字段统一管理 URL 和状态 -Python 负责重活。Playwright 控制 Chromium模拟人在浏览器里的每一步操作 -Electron 提供反馈。CLI 脚本跑完后你知道发了吗——前端可视化看到每个平台的具体状态IPC主进程和渲染进程的对话Electron 的安全模型规定渲染进程不能直接调用 Node API。所以需要一个中间层// preload.js — 安全的桥接 contextBridge.exposeInMainWorld(electronAPI, { scanArticles: () ipcRenderer.invoke(scan-articles), publishArticle: (title, platform) ipcRenderer.invoke(publish-article, title, platform) }); // main.js — 实际执行 ipcMain.handle(publish-article, async (event, articleTitle, platform) { const pythonScript path.join(obsidianRoot, vault-scripts/daily_publish.py); execFile(python, [pythonScript, --once, --title, articleTitle, --platform, platform], ...); // stdout/stderr 解析为 JSON 返回给前端 });关键点 -nodeIntegration: falsecontextIsolation: true— 渲染进程沙箱化 ---title--platform— 精准路由到目标文章和目标平台不走全量队列 - 正则解析 stdout — Python 输出终端日志 → 前端能解析每个平台的状态坑一logger is not definedCSDN 发布脚本的某一行用了logger.log(25, ...)打了一条 debug 日志但文件头部没 import logging。结果整篇文章的发布流程中断stderr 被吞掉前端收到的错误信息是空白。修复方式就是在文件开头加上import logging logger logging.getLogger(csdn_publisher)这个小 bug 卡了我一个小时——因为错误不在 daily_publish.py不在 main.js而在 csdn.py 内部。调试的时候需要一层层追 traceback。坑二Playwright inner_text(timeoutN) 新版已废弃旧代码里写了opt.inner_text(timeout100).strip()。在 Playwright 1.40 版本中inner_text()不再接受 timeout 参数——这个参数在更早的版本已经移除了只是之前的版本没有报错。去掉 timeout 参数后所有平台的自动化才真正跑通。这提醒我们自动化脚本的生命周期比你想的长依赖库更新时它也会跟着变老。坑三数据去重合并同一个文章可能同时出现在待发布/和已发布/比如刚发布还没从待发布目录移走。扫描时需要按标题 key 去重并合并平台信息pending: [{zhihu: success}, {juejin: pending}] archive/csdn/: [{csdn: success}] 合并后: [{zhihu: success}, {juejin: pending}, {csdn: success}]如果不去重同一篇文章会在缓存里出现两条记录前端显示的统计数据就会翻倍。坑四文件删除顺序最危险的一步发布成功后要删除待发布目录中的原文件。但如果删除过早比如先删源文件再归档一旦归档步骤失败文章就永久丢失了。正确的顺序 1. 更新 frontmatter写入各平台 URL 2. 拷贝到已发布目录备份 3. 确认拷贝成功 4. 才删除待发布目录中的文件效果对比维度手动客户端单篇文章发布~15 分钟三平台来回切换~10 秒自动完成状态追踪打开三个网站逐个确认一行表格一目了然失败排查不确定哪个环节出问题逐平台显示具体错误原因重试操作从头再来一遍失败按钮可直接点重试历史记录没有每篇文章的前后状态可追溯总结为什么一定要做这个客户端手动自动化都好用但自动化的价值不在于快而在于可见。一个 Python 脚本就能搞定批量发布——我早就有了。但它的问题是脚本跑完后你不知道结果。stdout 是文本你需要 grep 才能看懂。加了一个 Electron 客户端把每个平台的发布状态、URL、时间戳、错误信息全部可视化呈现出来。这才是完整的闭环写 → 自动化发 → 看到结果 → 有问题可以重试 → 下次不再踩同样的坑这个流程不是省了多少分钟的问题而是让整个发布过程变成了可观测、可控制的系统。对产品经理来说这是一个把模糊过程变成清晰数据的典型案例——不是所有的东西都需要 GUI但当你能看到每个环节的真实状态时决策的质量会显著提升。

相关新闻

Gscript混淆技术深度剖析:Stylist与Mordorifier双阶段保护机制

Gscript混淆技术深度剖析:Stylist与Mordorifier双阶段保护机制

Gscript混淆技术深度剖析:Stylist与Mordorifier双阶段保护机制 【免费下载链接】gscript framework to rapidly implement custom droppers for all three major operating systems 项目地址: https://gitcode.com/gh_mirrors/gsc/gscript Gscript作为一款跨…

2026/7/29 21:17:46阅读更多 →
从纸质家政合同到电子签,家政公司远程签完服务协议

从纸质家政合同到电子签,家政公司远程签完服务协议

家政合同为什么总签得散 家政公司的签约对象有两个:一边是上门服务的阿姨,一边是雇用服务的客户,两边都分散在城市各处,签约时间还常常凑不到一块。纸质服务协议要打印、要见面签、要回收归档,遇上阿姨刚培训完就要上户…

2026/7/29 21:17:46阅读更多 →
JTRevealSidebarDemo开发指南:viewForLeftSidebar与viewForRightSidebar实现详解

JTRevealSidebarDemo开发指南:viewForLeftSidebar与viewForRightSidebar实现详解

JTRevealSidebarDemo开发指南:viewForLeftSidebar与viewForRightSidebar实现详解 【免费下载链接】JTRevealSidebarDemo (demo) A carefully implemented iOS objective-c library to mimic the sidebar layout of the new Facebook app and Path 2.0 app. 项目地…

2026/7/29 21:17:46阅读更多 →
Android Audio Latency测试

Android Audio Latency测试

Audio Latency 通常是一个非常棘手的问题,它的核心点在于播放音乐的过程中,如果延迟低就容易发生卡顿;延迟高就比较流畅,但过高的延迟会带来音画同步的问题,用户会感觉慢半拍。所以延迟和流畅就像天平的两端一样&#…

2026/7/29 22:24:35阅读更多 →
高薪人才入职 21 天便离职:几十万招聘成本,败在入职体验细节

高薪人才入职 21 天便离职:几十万招聘成本,败在入职体验细节

一位年薪 80 万的算法专家,入职第 21 天提出离职。原因不是薪资,不是岗位,而是入职第一天没人接他、工位没准备好、账号权限拖了 5 天才开通、直属领导在他入职第一周出差没安排任何人对接。等他终于开始工作时,团队已经默认他进入…

2026/7/29 22:24:35阅读更多 →
Excel + 微信群排班的代价:连锁企业看不见的人力损耗与合规风险

Excel + 微信群排班的代价:连锁企业看不见的人力损耗与合规风险

企业可部署的人事 Agent 是指能嵌入企业真实 HR 流程、具备长期记忆、可主动推进任务并持续学习的 AI 数字员工,与传统的问答机器人和流程自动化脚本有本质区别。2026 年,这类 Agent 已在中大型企业进入规模化落地阶段,能独立承担入离职办理、…

2026/7/29 22:24:35阅读更多 →
不绑数据库,不绑平台,OGG 抽取和 XStream 能干的活儿它都能干

不绑数据库,不绑平台,OGG 抽取和 XStream 能干的活儿它都能干

不绑数据库,不绑平台,OGG 抽取和 XStream 能干的活儿它都能干 先交代一下背景。 我们团队在数据库事务日志解析这个领域摸爬滚打了好几年。说白了就是 CDC(Change Data Capture)最底层的那层脏活累活——把数据库的 redo log 啃下…

2026/7/29 22:24:35阅读更多 →
怎样判断人事 Agent 可以真正上岗?不只看对话体验,更要看部署深度

怎样判断人事 Agent 可以真正上岗?不只看对话体验,更要看部署深度

企业可部署的人事 Agent 是指能嵌入企业真实 HR 流程、具备长期记忆、可主动推进任务并持续学习的 AI 数字员工,与传统的问答机器人和流程自动化脚本有本质区别。2026 年,这类 Agent 已在中大型企业进入规模化落地阶段,能独立承担入离职办理、…

2026/7/29 22:24:34阅读更多 →
2026欧洲高温催生风口:便携风扇出海,为何绕过头部网红押注KOC矩阵

2026欧洲高温催生风口:便携风扇出海,为何绕过头部网红押注KOC矩阵

2026年盛夏,欧洲遭遇罕见高温热浪,多地气温刷新历史纪录。在空调普及率仅约20%的欧洲大陆(英国仅5%、德国仅3%),便携风扇成为最直接的降温刚需。海关数据显示,仅深圳一地前五个月对欧风扇出口即同比增长近两…

2026/7/29 22:22:24阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →