如何用 Python 控制微信?
我们不能直接去“破解”微信的官方协议,因为那是违法且不稳定的,目前主流且安全可靠的方式是使用一个叫做 itchat 的 Python 库,它通过模拟微信网页版登录的原理,让我们能够通过 Python 代码来获取微信的好友、群聊信息,并实现自动回复、发送消息等功能。

第一步:准备工作
- 安装 Python: 确保你的电脑上已经安装了 Python (推荐 3.6+ 版本)。
- 安装
itchat库: 打开你的终端或命令提示符,运行以下命令:pip install itchat
第二步:最简单的机器人 - 登录与自动回复
这是 itchat 最基础的功能,我们可以用它来实现一个“万能”的自动回复机器人。
代码示例:simple_bot.py
# 1. 导入库
import itchat
import time
# 2. 定义一个回复函数
# 这个函数会在收到消息时被自动调用
def reply_message(msg):
"""
msg 是一个字典,包含了消息的所有信息
msg['Type'] 消息类型:'Text' 文本, 'Picture' 图片, 'FriendRequest' 好友请求等
"""
# 我们只处理文本消息
if msg['Type'] == 'Text':
# 获取发送者的信息
sender = msg['From'] # 发送者的UserName
# 获取消息内容
content = msg['Text']
print(f"收到来自 {sender} 的消息: {content}")
# 根据消息内容进行回复
if content == '你好':
return "你好呀,我是 Python 机器人!"
elif content == '在吗':
return "在的,在呢!有什么事吗?"
elif content == '你是谁':
return "我是一个用 Python 写的微信聊天机器人。"
else:
# 默认回复
return f"你说了: '{content}',我暂时还不太明白,可以试试说“你好”哦。"
# 对于非文本消息,可以返回一个默认文本
return "抱歉,我只能处理文字消息哦。"
# 3. 注册消息回调函数
# itchat.msgRegister() 用于注册不同类型消息的处理函数
# itchat.msgRegister(itchat.content.TEXT, isGroupChat=False, replyMessage)
# 表示:对于所有非群聊的文本消息,都调用 reply_message 函数处理
itchat.msgRegister(itchat.content.TEXT, isGroupChat=False, replyMessage=reply_message)
# 4. 登录微信
# 运行这行代码后,会弹出一个二维码,你需要用手机微信扫描二维码登录
print("请使用手机微信扫描二维码登录...")
itchat.auto_login(hotReload=True)
# hotReload=True 表示登录状态会被缓存,下次运行时不用重新扫码(注意:安全起见,请勿在公共电脑上使用)
# 5. 进入运行状态,保持程序运行
# 程序会一直运行,直到你手动在终端按下 Ctrl+C 停止
print("机器人已启动,正在监听消息...")
itchat.run()
# 6. 退出时,注销登录
# itchat.logout() # run() 方法结束后会自动调用
如何运行?
- 将上面的代码保存为
simple_bot.py文件。 - 在终端中进入该文件所在的目录。
- 运行命令:
python simple_bot.py。 - 手机微信会弹出扫码界面,扫描登录即可。
- 你可以给你的微信小号(注意:强烈建议使用小号测试,不要用主号,以免被封)发送消息,机器人就会自动回复了。
第三步:功能进阶
掌握了基础后,我们可以让机器人变得更“聪明”。
回复群聊消息
我们只需要修改 msgRegister 的参数,将 isGroupChat 设为 True。
# ... (前面的代码不变)
# 注册群聊消息的回复函数
def group_reply_message(msg):
if msg['Type'] == 'Text' and msg['IsAt']: # 只处理@我的文本消息
# 获取群聊名称
group_name = itchat.search_friends(userName=msg['FromUserName'])['NickName']
# 获取@我的那个人
sender = msg['ActualSenderNickName']
# 获取消息内容(去掉@的部分)
content = msg['Text'].replace(f'@{itchat.get_friends()[0]["NickName"]}', '').strip()
print(f"在群 [{group_name}] 中,{sender} @了我,说: {content}")
# 回复消息,格式为: @发送者 你的回复
return f'@{sender} 收到你的消息“{content}”了!'
return None # 如果不是@我的消息,就不回复
# 注册群聊消息处理函数
itchat.msgRegister(itchat.content.TEXT, isGroupChat=True, replyMessage=group_reply_message)
# ... (后面的代码不变)
调用外部 API(如天气、AI)
我们可以让机器人成为我们的“小助手”,调用天气 API 获取天气。

你需要一个天气 API 的 Key(可以去和风天气、心知天气等平台申请免费版)。
import requests
import json
# ... (前面的代码)
def get_weather(city):
# 替换成你自己的 API Key
API_KEY = "YOUR_WEATHER_API_KEY"
url = f"https://api.qweather.com/v7/weather/now?location={city}&key={API_KEY}"
try:
response = requests.get(url)
data = response.json()
if data.get('code') == '200':
temp = data['now']['temp']
text = data['now']['text']
return f"{city}市现在的天气是:{text},温度 {temp}°C。"
else:
return "抱歉,获取天气信息失败了。"
except Exception as e:
return f"网络出错了: {e}"
def advanced_reply_message(msg):
if msg['Type'] == 'Text':
content = msg['Text']
if content.startswith('天气 '):
city = content.split(' ')[1]
return get_weather(city)
return None
# 注册高级回复函数
itchat.msgRegister(itchat.content.TEXT, isGroupChat=False, replyMessage=advanced_reply_message)
# ... (后面的代码不变)
你可以给你的机器人发送“天气 北京”,它就会告诉你北京的天气了。
结合大语言模型(如 ChatGPT)
这是目前最热门的功能,让机器人拥有“智慧”。
你需要:

- 一个 OpenAI 的 API Key。
- 安装
openai库:pip install openai
import openai
# 替换成你自己的 OpenAI API Key
openai.api_key = "YOUR_OPENAI_API_KEY"
def chatgpt_reply(prompt):
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo", # 或者 "gpt-4"
messages=[
{"role": "system", "content": "你是一个乐于助人的AI助手。"},
{"role": "user", "content": prompt}
]
)
return response.choices[0].message['content'].strip()
except Exception as e:
return f"调用 AI 出错了: {e}"
def ai_reply_message(msg):
if msg['Type'] == 'Text':
content = msg['Text']
# 可以设置一个指令前缀,"ai "
if content.startswith('ai '):
question = content[3:].strip()
if question:
print(f"正在向 AI 提问: {question}")
return chatgpt_reply(question)
return None
# 注册 AI 回复函数
itchat.msgRegister(itchat.content.TEXT, isGroupChat=False, replyMessage=ai_reply_message)
# ... (后面的代码不变)
你可以发送 ai 写一首关于月亮的诗,机器人就会调用 ChatGPT 为你生成一首诗。
第四步:重要注意事项与最佳实践
-
账号安全:
- 务必使用小号测试:频繁的自动回复行为容易被微信官方检测到,导致账号被限制登录甚至封禁,主号非常宝贵,不要用于实验。
hotReload的风险:hotReload虽然方便,但它会将你的登录凭证(itchat.pkl文件)保存在本地,如果电脑不安全,这个文件可能被盗用,导致你的微信账号被盗,请妥善保管该文件或只在安全的环境下使用。
-
频率限制:
- 避免在短时间内发送大量消息,这会被微信认为是垃圾信息。
- 在回复时,可以适当加入
time.sleep(1)来模拟人类打字的速度,增加“拟人感”。
-
代码结构优化:
当功能变多时,不要把所有逻辑都写在一个文件里,可以将不同的功能(如天气、AI、群管)拆分成不同的模块或函数,使代码更清晰。
-
优雅退出:
- 使用
try...finally结构,确保在程序退出时调用itchat.logout(),安全地登出微信。
- 使用
try:
itchat.auto_login(hotReload=True)
itchat.run()
finally:
print("正在退出,登出微信...")
itchat.logout()
使用 Python 和 itchat 开发微信机器人是一个非常有趣且能学到很多东西的项目,它涵盖了网络请求、API 调用、事件驱动编程等多个知识点。
学习路径建议:
- 基础:掌握
simple_bot.py,实现基本的自动回复。 - 进阶:尝试实现群聊回复、调用天气等公开 API。
- 高级:集成大语言模型,打造一个能聊天的 AI 助手。
- 实践:思考你能用这个机器人做什么?比如定时提醒、文件自动转发、公众号内容抓取等。
希望这份指南能帮助你开启微信机器人开发之旅!
标签: Python微信机器人开发教程 Python自动回复微信机器人实现 Python微信聊天机器人代码示例