窗外是深圳南山区凌晨三点的灯火,稀疏的车流声像某种背景白噪音。我盯着屏幕上那个不断旋转的微信公众平台登录二维码,第三十二次尝试让Selenium脚本自动完成扫码登录。32岁了,还在干这种和平台规则玩捉迷藏的事,想想有点可笑,但肾上腺素的分泌是真实的。
这次不是做网站站群了。网站那套,用Python爬虫抓内容,用Scrapy入库,再用WordPress的REST API批量发布,流水线早就跑通了。但微信公众平台?它是个黑盒。没有公开的发布接口,所有操作都封装在那个精心设计的后台界面里,每一步都像是在玻璃房子里拆炸弹,你得模拟得足够像人,才不会被风控系统掐断。
我的思路很粗暴:既然没有API,那就把人的操作录下来,让机器去重复。这听起来像二十年前的“按键精灵”,但内核完全不同。我用的是Selenium WebDriver,配合Chrome的无头模式。第一步,也是最难的一步,是登录。直接模拟账号密码不行,微信强制扫码。我的破解方法是“Cookies复用”——先用真实的浏览器手动登录一次,把登录后的Cookies全部导出,保存成JSON文件。然后,在无头浏览器启动时,把这些Cookies像注射疫苗一样,全部“种”进去。脚本启动,浏览器加载公众平台首页,理论上它已经处于登录状态了。
但理论只是理论。微信的Cookies有生命周期,有绑定IP和浏览器指纹的校验。我写了异常重试机制:如果检测到跳转到了登录页,就自动从Cookies池里换一组“新鲜”的,重新“注射”。这就像在给一个昏迷的病人不断换血,直到他睁开眼睛。
登录之后,才是真正的流水线舞台。点击“新建图文消息”,一个富文本编辑器弹出来。这里面的坑多如牛毛。你不能直接往`contenteditable`的div里`send_keys`,那样格式会全乱。我的方法是先用JavaScript获取编辑器底层那个iframe的document,然后直接操作里面的HTML结构。标题、作者、摘要,这些都好说,关键是正文。
我的爆文素材来自爬虫抓取的各大知识付费平台和垂直论坛,经过简单的关键词替换和段落重组。但微信编辑器对从外部粘贴进来的HTML极其挑剔,它会过滤掉大部分样式,只保留最基础的`
`、``、``。我花了整整一周,写了一个“微信HTML净化与增强算法”。它干两件事:第一,把外来的复杂HTML标签全部剥掉,转换成微信编辑器亲和的极简标签;第二,反过来,在极简的基础上,自动插入一些微信编辑器自己提供的“漂亮”样式,比如特定的引用框、分割线。这其中的平衡很微妙:你既不能保留太多外部样式(会被过滤导致乱码),又不能太素(否则文章毫无吸引力)。我最终采用的方法是,先用`BeautifulSoup`把外来HTML拆得只剩骨架,然后在特定的段落位置(比如每300字后),用Selenium找到编辑器工具栏上对应的“样式按钮”,模拟点击。对,不是直接插入HTML代码,而是让脚本去“点”那个按钮。因为只有通过编辑器自身按钮插入的样式,才是最稳定、最不会被后台清洗的。
这感觉太诡异了。我在用最先进的浏览器自动化工具,去模拟一个小编最原始的手工点击操作。一种极致的错位感。
图片上传是另一个噩梦。微信的上传组件是Flash吗?不,是新的HTML5组件,但同样没有直接的文件输入接口。我试过直接用`driver.find_element_by_css_selector(‘input[type=file]’).send_keys(image_path)`,失败。后来发现,那个上传按钮背后是一个复杂的JavaScript事件监听,需要先触发点击,然后在弹出的系统文件选择器窗口出现前,就把文件路径“塞”进去。这需要用到`PyAutoGUI`这样的桌面自动化库来模拟键盘输入路径,或者更黑客的方法:修改Chrome的启动参数,让它默认支持文件自动上传。我选择了后者,因为更稳定。我写了一个`ChromeOptions`的配置函数,里面预填了测试图片的路径,这样当脚本触发上传按钮时,那个“文件选择对话框”甚至不会弹出来,文件就直接上传了。
定时群发反而简单。微信后台有“定时群发”功能,我只需要让脚本在设定好的时间点,去点击“群发”按钮,而不是“保存为草稿”。这里有个细节:点击“群发”后,还有一个二次确认弹窗。脚本必须等待这个弹窗出现,再找到那个小小的、红色的“确认发送”按钮,点击它。两次点击之间,我加了2秒的随机延迟,模拟人的犹豫。
全部跑通那天,我看着屏幕上十个Chrome无头浏览器窗口依次打开、登录、编辑、上传、定时、关闭,循环往复。它们沉默、精准、不知疲倦。我原来需要雇三个小编干一整天的活,现在被一段八百行的Python脚本,在半个小时内消化掉了。
一种冰冷的快感顺着脊椎爬上来。
这不是创新,这是破坏。是把微信团队精心设计的、旨在让内容创作保持“人性化”和“手工感”的护城河,用代码的蛮力直接趟平。我知道这很脆弱,任何一次微信后台的前端更新,都可能让我的整套脚本报废。但没关系,我会比它更新得更快。流量闭环的诱惑太大了,搜一搜的流量还处于蛮荒期,关键词排名规则比百度简单得多。用站群思维打公众号矩阵,用自动化流水线碾压手工编辑,这是维度上的碾压。
只是,当机器开始批量生产“爆文”时,内容本身还有什么价值呢?
我不知道。我也不在乎。那一刻,我只想赢下这场和机器,也和自己耐心之间的赛跑。窗外,天快亮了。














