目前微信网页版限制登录,wxpy等模块操作微信的手段都无法使用了,前阵时间发现了WechatPCAPI这个模块,通过dll注入的手段实现操作微信,下面分享一下该模块的使用方法。
运行环境
WechatPCAPI这个模块对运行环境的要求还是比较苛刻的,需要使用旧版本微信与python3.7
模块下载地址:
https://github.com/terrywangt/WeChatBot
github下载的模块中包含了旧版本微信,路径如下:
WeChatBot-master.zip\WeChatBot-master\botWeb\bot\Wechat-V2.7.1.82.exe
登录微信
运行以下代码即可弹出微信登录界面,on_message函数用来处理接收到的消息。
from WechatPCAPI import WechatPCAPI
import time
import logging
from datetime import date
from queue import Queue
import threading
logging.basicConfig(level=logging.INFO)
def on_message(message):
# 打印接收到的消息
print("message->:",message)
def main():
wx_inst = WechatPCAPI(on_message=on_message, log=logging)
wx_inst.start_wechat(block=True)
while not wx_inst.get_myself():
time.sleep(5)
threading.Thread(target=thread_handle_message, args=(wx_inst,)).start()
if __name__ == '__main__':
main()
使用Queue()处理消息
这一步是非必须的
在这里插from WechatPCAPI import WechatPCAPI
import time
import logging
from datetime import date
from queue import Queue
import threading
from queue import Queue
queue_recved_message = Queue()
logging.basicConfig(level=logging.INFO)
def on_message(message):
queue_recved_message.put(message)
def thread_handle_message(wx_inst):
"""
消息处理 分流
"""
while True:
message = queue_recved_message.get()
print(message)
# 往下加入你的消息处理代码
def main():
wx_inst = WechatPCAPI(on_message=on_message, log=logging)
wx_inst.start_wechat(block=True)
while not wx_inst.get_myself():
time.sleep(5)
threading.Thread(target=thread_handle_message, args=(wx_inst,)).start()
if __name__ == '__main__':
main()
收到的message结构
要想对消息进行处理,首先要了解收到的数据是什么结构的,主要有以下四种结构
收到的好友聊天消息结构如下,type为msg::single
{
'user': '自己的默认微信号,,修改微信号后也不会改变',
'type': 'msg::single',
'data': {
'data_type': '1',
'send_or_recv': '0+[收到]',
'from_wxid': '好友默认的微信号,修改微信号后也不会改变',
'time': '2022-01-21 15:11:04',
'msg': '好友发送的信息',
'from_nickname': '好友昵称,不是备注'
}
}
收到的群聊天消息结构如下,type为msg::chatroom
{'user': '自己的默认微信号,,修改微信号后也不会改变',
'type': 'msg::chatroom',
'data': {'data_type': '1',
'send_or_recv': '0+[收到]',
'from_chatroom_wxid': '群聊id,形如12756220923@chatroom',
'from_member_wxid': '发消息群员的微信号',
'time': '2022-01-26 15:30:03',
'msg': '收到的消息',
'from_chatroom_nickname': '群聊名称'
}
}
还有两个类型的数据 friend::person和friend::chatroom,分别是好友基本信息和群聊基本信息,登录微信后会首先获取这两种数据,可以通过处理这两种数据来获取所有好友和群聊的相关信息
all_users = {} # 微信所有好友
all_chatroom = {} # 微信所有群聊
# 捕获friend::person和friend::chatroom,获取全部微信好友和群聊
if message['type'] == 'friend::person':
all_users[message['data']['wx_nickname']] = message['data']['wx_id']
if message['type'] == 'friend::chatroom':
all_chatroom[message['data']['chatroom_name']] = message['data']['chatroom_id']
发送消息
发送给个人或群聊都通过以下形式
wx_inst.send_text(to_user=微信号或群聊号, msg=要发送的内容)
调用天行机器人自动回复信息
首先从以下网址注册天行机器人接口
https://www.tianapi.com/apiview/47
注册接口后获得一个key,复制key填入下面的代码即可
tx_url = 'http://api.tianapi.com/txapi/robot/index?key={}&question={}'
tx_key = '你注册获得的key'
def tx_robot(msg):
"""将接收的消息发送给天行机器人,并返回内容"""
r = requests.get(tx_url.format(tx_key, msg)).json()
code = int(r['code'])
msg = r['msg']
if code != 200:
print(f'【错误】错误代码{code}:{msg},请检查配置项"tx_key"。')
return r["newslist"][0]["reply"]
def on_message(message):
if message['type'] == 'msg::single':
wxid = message['data']['from_wxid'] # 好友微信号
msg = message['data']['msg'] # 收到的消息
name = message['data']['from_nickname']
send_or_recv = message['data']['send_or_recv']
# 如果不判断send_or_recv会无限制发送消息,自己和自己对话
if send_or_recv == '0+[收到]':
wx_inst.send_text(to_user=wxid, msg=tx_robot(msg))
结尾
WechatPCAPI模块基本的操作就是这些了,剩下的就是加入你的消息处理代码,可以实现群发、自动回复等功能,也可以通过向自己的文件传输助手发送特定的信息来控制这些功能的开关。
笔者通过WechatPCAPI写了一个包含图灵/天行机器人自动回复、模板式自动回复、群发功能的程序,有兴趣的读者可通过下面链接进行下载。
微信自动回复、群发程序