当前位置: 首页 > news >正文

用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,改改选择器还能发掘金、知乎、公众号等平台,一套脚本全平台发布,爽得不行。

http://www.jsqmd.com/news/665640/

相关文章:

  • Chaplin:让唇语识别成为你的数字读心术
  • 3步掌握抖音下载器:从零开始批量获取无水印内容
  • 8大网盘直链解析工具完整指南:轻松获取真实下载地址的高效解决方案
  • 2026年好用的做移动展厅用拓展箱活动房公司,推荐哪家 - 工业推荐榜
  • OBS模糊插件终极指南:如何用obs-composite-blur实现专业级直播特效
  • 2026最权威的十大AI写作助手推荐
  • AlienFX Tools终极指南:深入解析Alienware设备灯光与风扇控制原理
  • 有实力的地坪公司哪家好,探讨慈溪景亮地坪施工工艺及品牌影响力 - 工业品牌热点
  • 如何免费实现专业级电脑风扇智能控制:3步配置你的静音工作站
  • 避坑指南:Sellmeier方程拟合中常见的Python问题与解决方案
  • 移动端开发创新探索
  • 如何快速掌握Windows风扇智能控制:FanControl终极完整教程
  • 保姆级教程:基于STM32与FM17520芯片,从零搭建一个NFC门禁读卡器(附完整代码)
  • 发发奇优惠码2026整理更新 - 李先生sir
  • LeagueAkari:英雄联盟玩家的智能助手,如何通过LCU API提升游戏体验?
  • Mac/Linux科研党福音:手把手教你搞定AutoDock4、Vina和ADT图形界面(含X11配置避坑)
  • 高效音乐格式转换实战:ncmdump专业解密方案解析
  • 告别命令行恐惧:Applite如何用图形界面重新定义macOS应用管理
  • Unity Addressable可寻址系统 -- 核心概念与工程导入实战 -- 新手上路(一)
  • 抖音下载器终极指南:5种高效获取无水印视频的专业方法
  • 如何快速修复老旧Mac蓝牙问题:终极兼容性解决方案指南
  • 深度解锁泉盛UV-K5:LOSEHU固件完全指南与实战教程
  • 如何通过私有化部署实现企业级远程桌面控制:BilldDesk实战指南
  • 如何3分钟掌握跨平台资源嗅探下载?res-downloader终极指南
  • Windows上安装Android应用的3个关键突破:APK-Installer全解析
  • 艾尔登法环存档迁移技术深度解析:二进制数据操作与版本兼容性终极指南
  • 2026届最火的五大降AI率助手推荐榜单
  • 【智能代码生成实战指南】:20年架构师亲授5大避坑法则与3类高危演化场景预警
  • 免费强力修复:KeyboardChatterBlocker彻底解决键盘连击问题的完整指南
  • RobotStudio避坑指南:手把手教你搞定自定义工具坐标系的创建与校准