本文最后更新于9 天前,如有版本迭代或环境切变,可告知邮箱到xianghy_m@sina.com指正修改。
一、前言
微信官方并不支持机器人,并且限制了网页版微信的登录,使得基于网页接口的第三方库无法使用。因此,基于桌面版协议登录的微信机器人工具变得尤为重要。wxauto 正是这样一款开源的 Windows 版本微信客户端自动化工具,能够实现简单的发送、接收微信消息等功能。
二、安装 wxauto
(一)环境准备
- 操作系统 :确保你的系统为 Windows 10 或 Windows Server 2016 及以上版本。
- Python 环境 :需要安装 Python 3.6 及以上版本,但不支持 3.7.6 和 3.8.1。可以通过以下步骤安装 Python:
- 访问 Python 官方网站 https://www.python.org/downloads/,下载对应版本的 Python 安装包。
- 运行安装包,建议在安装过程中勾选 “Add Python to PATH” 选项,以便将 Python 添加到系统环境变量中。
- 安装完成后,打开命令提示符,输入
python --version
命令,验证 Python 是否安装成功。
(二)安装 wxauto
- 使用 pip 安装 :打开命令提示符,输入以下命令安装 wxauto:bash复制
pip install wxauto
如果网络较慢,可以更换为国内镜像源,例如使用阿里云镜像源:bash复制pip install wxauto -i https://mirrors.aliyun.com/pypi/simple
三、使用 wxauto
(一)获取微信控制权限
在使用 wxauto 之前,必须先登录 PC 微信客户端,否则无法获取微信消息。登录微信后,使用以下代码获取微信的控制权限:Python复制
from wxauto import *
wx = WeChat()
(二)获取会话列表
通过 GetSessionList()
方法可以获取当前的会话列表:
Python复制
wx.GetSessionList()
(三)搜索好友或关键词
如果想要查找某个好友或关键词,可以使用 Search()
方法。在 keyword
参数中填写想要查找的内容,名称最好完整匹配,不完全匹配只会选取搜索框第一个:
Python复制
wx.Search(keyword='my friend\'s ID')
(四)获取聊天记录
- 获取当前窗口聊天记录 :使用
GetAllMessage()
方法可以获取当前窗口中加载的所有聊天记录。返回的聊天记录是一个列表,每一条消息是以元组的格式存储在列表中:Python复制msgs = wx.GetAllMessage() for msg in msgs: print('%s : %s' % (msg[0], msg[1]))
- 加载更多聊天记录 :如果聊天信息较多,可以使用
LoadMoreMessage()
方法向上滚动鼠标滚轮,加载更多聊天记录到内存,然后再使用GetAllMessage()
获取更多消息:Python复制wx.LoadMoreMessage() msgs = wx.GetAllMessage()
(五)发送消息
- 打开聊天窗口 :使用
ChatWith()
方法打开某个聊天框。该方法会先在当前页面查找指定的好友,如果找不到,则会向下滚动几次,如果还是找不到,则会在搜索框进行搜索:Python复制who = '文件传输助手' wx.ChatWith(who)
- 发送文本消息 :使用
SendMsg()
方法向当前窗口发送消息。msg
参数传递要发送的消息,clear
参数默认为True
,表示删除对话框中原有的文字后再发送消息。如果想保留对话框中的文字一并发出去,可以将clear
参数设置为False
:Python复制msg = '你好~' wx.SendMsg(msg)
- 发送多行消息 :如果要发送多行消息,可以利用剪贴板。使用
WxUtils.SetClipboard()
方法将消息存储到剪贴板,然后使用SendClipboard()
方法发送剪贴板中的内容:Python复制msg = '''你好 这是第二行 这是第三行 这是第四行''' WxUtils.SetClipboard(msg) wx.SendClipboard()
(六)发送文件
wxauto 还可以发送文件。使用 SendFiles()
方法向当前聊天窗口发送文件。*filepath
参数表示要发送文件的绝对路径,可以同时传递多个文件。not_exists
参数默认为 ignore
,表示如果未找到指定文件,不会终止程序。首次发送文件可能花费时间较长,后续调用会缩短发送时间:
Python复制
file1 = 'D:/test/wxauto.py'
file2 = 'D:/test/pic.png'
file3 = 'D:/test/files.rar'
who = '文件传输助手'
wx.ChatWith(who)
wx.SendFiles(file1, file2, file3)
四、注意事项
- 微信版本兼容性 :部分版本的微信可能由于 UI 界面不同从而无法使用 wxauto。经过测试,截至 2022 年 8 月的最新版本桌面端微信运行没有问题。但如果你使用的是其他版本的微信,可能需要进行测试以确保兼容性。
- 二次开发 :wxauto 的功能相对较少,真正使用起来可能需要进行很多的二次开发。有兴趣的用户可以前往作者的 GitHub 地址 https://github.com/cluic/wxauto 下载源码进行开发。