我用 Cursor 写了个公众号排版自动化脚本,踩了2个“血坑”后,我悟出了 AI 编程的真相
我用 Cursor 写了个公众号排版自动化脚本,踩了2个“血坑”后,我悟出了 AI 编程的真相
昨晚凌晨 2 点,望着电脑屏幕上因为复制粘贴而彻底错乱的微信公众号排版,我终于怒了。
作为一名科技博主,我的日常工作流是这样的:在本地用 Markdown 行云流水地写完文章,然后打开某个第三方网页编辑器,把内容粘贴进去,套用模板,再复制生成的富文本,最后小心翼翼地粘贴到微信公众号后台。
如果一切顺利还好,但现实往往是:图片间距突然变大、代码块的高亮全军覆没、甚至有些加粗格式莫名其妙地消失了。于是,我又得在微信那个极其难用的编辑器里,像个修理工一样一点点微调。
天下苦“公众号排版”久矣!在这个 AI 都能帮人写商业企划书的时代,我为什么还要把生命浪费在这种毫无技术含量的“体力活”上?我决定,把这个烂摊子交给最近大火的 AI 编程神器 Cursor,让它帮我写一个自动化排版脚本。
事实证明,用 Cursor 解决真实工作流痛点并不难,但掌握实操中的避坑指南,才是你从“看个热闹”变成“AI 自动化高手”的真正分水岭。
---
一、小白爽文时刻:用大白话让 Cursor 写出初代脚本
很多人对 AI 编程有畏难情绪,觉得“我连 Python 环境都不会配,怎么写代码?”
其实,现在的 AI 早就进化到了“听得懂人话”的阶段。你不需要知道什么是 DOM 树,也不需要懂 正则表达式,你只需要像给实习生下达任务一样,把需求描述清楚。
打开 Cursor,我直接在对话框里输入了第一轮 Prompt(提示词):
“你好,我是一个不懂代码的自媒体作者。
我现在有一个文件夹,里面全是我写好的 Markdown 格式的文章。
我需要你帮我写一个 Python 脚本,实现以下功能:
1. 读取这个文件夹里的所有 .md 文件。
2. 把它们转换成 HTML 文件。
3. 在转换的时候,帮我加上一套好看的 CSS 样式(要求:字体用系统默认无衬线字体,行高 1.6,代码块要有暗色背景和圆角)。
4. 把转换好的 HTML 文件保存在一个叫 'output' 的新文件夹里。”
按下回车键,奇迹发生了。
Cursor 像一个极其熟练的程序员,唰唰唰地开始生成代码。它不仅给出了完整的 Python 脚本,甚至还在代码下面贴心地附上了运行说明:
“你需要先在终端运行 pip install markdown 来安装依赖库,然后运行 python convert.py 即可。”
我半信半疑地照做了。终端里闪过几行绿色的提示符,打开 output 文件夹,里面整整齐齐地躺着转换好的 HTML 文件。双击用浏览器打开,排版极其优雅,代码块、引用、标题层级分明。
然而,我高兴得太早了。当我想把这份胜利的果实搬到微信公众号时,现实狠狠地给了我一巴掌。
---
二、进阶的代价:实操中踩到的 2 个“血坑”
在这个看似完美的开局之后,我迎来了长达两个小时的“折磨”。如果你也想用 AI 帮你写自动化工具,请务必仔细阅读这一部分,它能帮你省下无数个抓狂的深夜。
坑一:微信公众号的“内联 CSS 傲娇症”
我满心欢喜地打开生成的 HTML 文件,全选(Ctrl+A),复制(Ctrl+C),然后粘贴(Ctrl+V)到微信公众号后台。
结果?格式全乱了。
优雅的行高不见了,代码块的暗色背景变成了白底黑字,所有的元素挤在一起,就像一个刚被扒光了衣服的纯文本。
为什么浏览器里看起来好好的,一到微信就不行?经过一番查阅,我发现了微信公众号编辑器的一个“潜规则”:它极其傲娇,只认“内联样式(Inline CSS)”,并且会无情地剥离掉所有的 标签和外部 CSS 引用。
简单来说,Cursor 初代脚本生成的 HTML 是这样的(外联/头部样式):
这是一个标题
微信后台一看: 标签?直接删掉!于是你的标题就变成了没有样式的纯文本。
微信只认这种格式(内联样式):
这是一个标题
破局方案:引导 Cursor 引入专门的样式转换库
既然知道了症结所在,我立刻回到 Cursor,输入了第二轮“纠错 Prompt”:
“刚才的脚本在浏览器里看着很好,但是复制到微信公众号后台后,所有的 CSS 样式都丢失了。
我查了一下,是因为微信只支持内联 CSS(Inline CSS)。
请你修改代码,引入一个可以将头部标签内的 CSS 自动转换为 HTML 标签style属性的库(比如 Python 的premailer),确保生成的 HTML 完美适配微信公众号的粘贴。”
Cursor 秒懂,立刻重写了核心逻辑,引入了 premailer 库。以下是它给出的核心代码片段:
import markdown
from premailer import transform
... 前面的读取文件逻辑 ...
1. 将 Markdown 转为基础 HTML
html_content = markdown.markdown(md_text, extensions=['fenced_code', 'tables'])
2. 拼接带有
{html_content}