背景
几年前,当微信 Web 没有被封时,我一直是使用 Mojo-Weixin 通过 Emacs 来访问微信。只是很不幸,后来当微信 Web 无法访问了,该项目对我而言变得不可用。微信也没有提供公共的 api。很难有一个安全的第三方客户端。
我对微信的需求比较简单。能够快速简单地在 Emacs 中查看/发送针对某几个人的信息。我并不是需要一个完整的微信客户端。
MacOS 提供了 Accessibility API 去访问其他应用的 GUI,因此,我开发了 macos-wechat-cli 利用 Accessibility API 访问微信的 GUI,通过命令行来与微信进行交互。
macos-wechat-cli 的目标不是开发一个完整的微信客户端,而是借助 MacOS 微信 GUI,提供简单高效的 CLI 命令,能够供其他应用集成,访问微信。例如 macos-wechat-emacs
详细的细节放在我的博客里有兴趣的可以看看:
项目地址
优点
- 对微信没有任何侵入,没有被封禁的风险
- 通过 JSON 输出,可以很容易被其他应用集成
- 尽可优化了 Accessibility API 访问的性能,能够在 0.5 秒里完成数据更新、数据发送
缺点
- 如果微信升级过程中 UI 发生变化,应用可能会出问题。
- 当前版本有中文相关的硬编码,只支持中文微信
- 只展示当前 GUI 已经加载出来的信息
已知问题
- 所有信息都会展示为“1 条未读消息”, 因此把“1 条未读消息”展示为“无未读信息”
- 预览图片、链接后,需要关闭才能进行后续的操作。
- 微信必须打开,可以放置在后台,但不能最小化。
当前支持的功能:
- List chats
- Show messages in a chat.
- Send a message to a chat.
- Preview a image.
- Preview a link.
欢迎大家试用,提供意见。
当前版本 Emacs WeChat 界面还比较简陋,寻求大佬在界面审美,交互上提供帮助。
20 个赞
rua
2
牛啊,至少上班的时候不用 emacs 微信来回切换了,不过 ux 确实有待改进。。 telega 可以参考
,之前想写个类似跟通花顺通信的 cli,但是不知道如何获取里面的数据。楼主有这方面的资料推荐吗?
用 MacOS 的 Accessibility Inspector 探测一下,你想要处理的的软件是否能够通过 Accessibility 获取到元素信息。然后参考一下,我 CLI 里的代码。让 AI 改写一下应该就好。
Accessibility API | Apple Developer Documentation 有详细的相关 api,不过我自己都没怎么读过。基本就是让 ai 提供一个大体代码思路。然后慢慢改写测试。
不过有的软件 Accessibility 访问不到具体的 UI 元素。那就没办法了。
1 个赞
可以多多试用一下提提意见。
周末参考一下 telega 看看能否修改一下。能有大佬 PR 就更好了。调整界面感觉很是繁琐。

命令行里执行完wechat list-chats没有输出, 对微信版本有要求吗?
不太确定有没有版本要求。我的版本是:Version. 3.8.10 (28633)。
你运行时,没有任何报错信息吗?
微信不能最小化。最小化会报错。
我的版本是4.0.3.93, 非最小化也没有信息输出,也没有报错信息.
ginqi7
10
4.0.3.93 UI 变化了。暂时不支持。这也展示了这个项目最大的缺点:
如果微信升级过程中 UI 发生变化,应用可能会出问题。我看看有没有什么好的办法支持不同的版本。
还好,MacOS 可以装不同版本的微信,可以快速的测试不同的版本。
你可以先装个 3.8 的玩一下,感觉开发 4.0 不是太难,容我适配一下。
ginqi7
12
我会为了能在emacs上使用回退到3.8版本,4.0其它的功能在Mac上也不是强需求
.不过相信微信后面也会完善对Accessibility API的支持吧
ginqi7
14
稍微调整了一下页面。好点但不多,主要就是对齐了一下。
对话列表
消息页面
jackqt
15
很有想法的项目, 支持
不过试下来有个问题, 就是窗口最小化到托盘以后会提示:“无法获取 WeChat 的窗口。错误: -25212”
看样子是 Accessibility API 的限制?
ginqi7
16
代码bug,我已经修复了。最新的代码还没有发布到 homebrew 上。
ginqi7
17
已发布。把 wechat-cli 更新到 v0.0.3 即可。
所以,目前的方案高度依赖于微信本身的UI,如果变了就需要适配?
ginqi7
20
是的,而且新版本都不一定能够适配的了。
最新的 4.0 的微信尝试适配失败了。目前看起来,要和微信 3.8 共存亡了。好在微信一个版本应该会坚持很久。