时隔许久未接触 Python,近期萌生了基于 Python 开发微信聊天机器人的想法。最初的契机,源于早年曾用 Python 写过一款微信自动回复工具,彼时主要为解决春节期间海量祝福语的自动回复需求,使用起来便捷高效,也让我感受到了 Python 做自动化工具的灵活性。如今大模型本地部署技术已日趋成熟,无需依赖云端接口,本地就能实现智能对话,这让我觉得把微信打造成智能聊天机器人的时机已经到来,甚至还想进一步探索,将微信这个高频使用的平台打造成家庭中枢,替代目前虽火爆但暂想等技术更成熟后再用的 Clawdbot,既贴合日常使用习惯,又能实现个性化的家庭场景交互。
本以为有早年的开发基础,这次重构会相对顺利,却不料现实给了一记 “闷棍”—— 原先开发的微信自动回复工具完全无法运行。为了排查问题,我花了两天时间反复调试、排查代码,却始终不得其果,整个过程充满挫败感。一番折腾后才在百度上查到核心原因:微信对自动化功能的封堵早已层层升级,早年我开发工具时,微信网页版还能正常使用,彼时很多开发者都通过网页版接口轻松实现微信消息的监听与自动回复,后来微信为了生态安全、经济利益以及降低系统运行压力,直接封禁了微信网页版;而我当时为了规避网页版的限制,采用的是微软的 uiautomation 自动化工具,通过定位 Windows 系统下微信客户端的窗口、按钮,获取窗口交互内容来实现消息的接收与发送,这一方案在当时稳定可用。但如今微信再次升级限制,直接将 Windows 客户端的窗口树进行了隐藏处理,导致 uiautomation 这类依赖系统窗口定位的工具,无法识别、定位微信的相关窗口和控件,最终彻底失效。
网上也能查到一些绕过该限制的方法,核心思路大多是利用 Windows 系统为残障人士设计的读屏相关功能 —— 因系统底层要求为残障人士提供完整的窗口信息读取支持,微信无法彻底屏蔽这部分窗口数据,开发者可通过该路径绕开微信的窗口树隐藏限制,重新实现控件定位和交互。但一番考量后,我最终还是放弃了继续折腾:一方面,此次开发本就只是 “试水”,核心需求并非必须实现微信聊天机器人,投入过多时间和精力解决封堵问题,性价比并不高;另一方面,打造家庭中枢,微信只是其中一个尝试的载体,并非唯一选择,暂时无需为了这一载体突破技术限制。
此次尝试也让我深刻感受到,微信对非官方自动化功能的封堵力度正在持续加大,从早期封禁网页版接口,到如今隐藏 Windows 客户端窗口树,本质都是为了维护自身生态安全、保障商业利益,同时减少非官方操作带来的系统运行压力。对于普通开发者而言,这类层层封堵的做法,让微信自动化开发的门槛越来越高,非深度开发需求下,再去耗费精力突破限制已无太大必要。而我对于家庭中枢的打造,也会保持更理性的态度,暂不急于求成,既可以继续观望各类工具的技术成熟度,也可以探索其他更开放、更适配的平台,待需求和技术条件都更匹配时,再着手落地实现。