news 2026/4/19 11:18:58

用Playwright实现CSDN全自动发布,我再也不用手动排版发文了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Playwright实现CSDN全自动发布,我再也不用手动排版发文了

用Playwright实现CSDN全自动发布,我再也不用手动排版发文了

折腾了整整一天,我终于实现了CSDN博客全自动发布,现在每天定时发一篇,再也不用手动打开编辑器排版、上传图片、点发布了。

说实话,之前每次发CSDN文章都很头疼:写完markdown要复制到编辑器,图片要一张张上传,标签要一个个选,最后还要点两次发布按钮,一套流程下来至少10分钟。对于我这种每周要发3-4篇的人来说,简直是浪费生命。

所以我决定搞个自动化脚本,把整个流程全干掉。

整个自动发布流程长什么样

我设计的流程非常简单,完全不需要人工干预:

  1. 每天早上8点定时触发脚本
  2. 自动生成当日主题的技术博客(带截图)
  3. 自动检测CSDN登录状态,过期了自动发二维码通知扫码
  4. 自动打开CSDN编辑器,注入标题和文章内容
  5. 自动上传所有截图到CSDN图床,替换文章里的占位符
  6. 自动添加标签,点击两次发布按钮完成发布
  7. 最后自动把发布链接推送到我的通知群

整个流程跑完也就30秒,我啥都不用干,文章就发出去了。

核心实现其实没那么复杂

整个系统的核心就是Playwright,一个微软出的浏览器自动化工具,比Selenium好用100倍。

核心代码其实只有几十行

我把最核心的发布逻辑抽出来了,也就50行不到:

fromplaywright.async_apiimportasync_playwrightimportasyncioasyncdefpublish_article(title,content,tags):asyncwithasync_playwright()asp:# 启动浏览器,加载已保存的Cookiebrowser=awaitp.chromium.launch(headless=True,args=['--no-sandbox'])context=awaitbrowser.new_context(storage_state="csdn-cookie.json")page=awaitcontext.new_page()# 打开CSDN编辑器awaitpage.goto("https://editor.csdn.net/md?not_checkout=1")awaitasyncio.sleep(3)# 输入标题awaitpage.fill('input[placeholder*="标题"]',title)# 注入文章内容awaitpage.evaluate('(content)=>{const editor=document.querySelector("[contenteditable=true]");editor.focus();editor.textContent=content;editor.dispatchEvent(new Event("input",{bubbles:true}));}',content)# 点击第一个发布按钮(打开发布弹窗)awaitpage.click('button.btn-publish')awaitasyncio.sleep(2)# 选择原创,添加标签awaitpage.click('text=原创')fortagintags:tag_input=page.locator('.modal-box input').firstawaittag_input.fill(tag)awaittag_input.press('Enter')# 点击第二个红色发布按钮(真正发布)awaitpage.click('.btn-b-red')awaitasyncio.sleep(5)# 验证发布成功page_text=awaitpage.inner_text('body')if"发布成功"inpage_text:print("✅ 文章发布成功!")

就这么简单,核心逻辑一目了然。

运行起来的效果是这样的

我在服务器上跑这个脚本,输出差不多是这样:

整个过程完全自动,不需要任何人工操作。如果Cookie过期了,脚本会自动生成登录二维码,推送到我的Telegram,我扫一下就能继续,非常方便。

踩过的那些坑,说多了都是泪

看起来简单,实际上我踩了好几个大坑,折腾了一天才搞定。

坑1:CSDN有两个"发布文章"按钮

这个是最坑的!一开始我点了页面顶部的"发布文章"按钮,就以为发布成功了,结果等了半天文章都没出来。后来才发现,点第一个按钮只是打开发布弹窗,还要再点弹窗里那个红色的"发布文章"按钮才是真的发布。

血泪教训:一定要点击class是btn-b-red的那个按钮才算发布完成。

坑2:默认代理导致登录页打不开

一开始运行登录脚本的时候,一直报ERR_PROXY_CONNECTION_FAILED错误,查了半天才发现,脚本默认带了个本地代理,而我服务器上根本没开代理,所以访问CSDN登录页直接失败。

解决方案:运行登录脚本的时候一定要加--proxy none参数。

坑3:内容注入换行符识别不了

一开始我用document.execCommand('insertText')注入内容,结果发现换行符全没了,整个文章变成了一大段。后来换了直接修改textContent+触发input事件的方式,才完美解决。

写在最后

现在我已经用这个脚本发了快一周的文章了,真的太爽了,每天省出10分钟时间,能多喝两杯咖啡。

如果你也经常发CSDN博客,强烈建议你也搞一套这样的自动化流程,真的能节省很多时间。代码我已经放到GitHub了,需要的可以评论区找我要。

对了,这个脚本不光能发CSDN,改改选择器还能发掘金、知乎、公众号等平台,一套脚本全平台发布,爽得不行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 11:18:21

如何安装OpenClaw?2026年阿里云部署及大模型Coding Plan配置流程

如何安装OpenClaw?2026年阿里云部署及大模型Coding Plan配置流程。OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为个人办公与轻…

作者头像 李华
网站建设 2026/4/19 11:15:18

STM32F4浮点运算性能翻倍?手把手教你配置arm-gcc硬浮点编译选项

STM32F4浮点运算性能翻倍实战:从编译配置到算法加速全解析 在嵌入式开发领域,尤其是涉及数字信号处理、电机控制或实时控制系统的场景中,浮点运算性能往往是制约算法效率的瓶颈。STM32F4系列微控制器凭借其Cortex-M4内核和内置浮点运算单元(F…

作者头像 李华
网站建设 2026/4/19 11:15:16

泛微E10 e-builder报表设计实战:5分钟搞定合同付款数据可视化

泛微E10 e-builder报表设计实战:5分钟搞定合同付款数据可视化 财务部门每月需要处理数百份合同付款记录,传统手工统计不仅耗时耗力,还容易出错。泛微E10的e-builder平台提供了一种更高效的解决方案——通过可视化报表设计器,财务人…

作者头像 李华