Python脚本实现微信消息推送:从入门到自动化实战指南
目录导读
- 为什么需要用Python推送微信消息?
- 三大主流实现方案对比
- 企业微信机器人(最稳定)
- 个人微信模拟(itchat方案)
- Server酱与PushPlus(零代码方案)
- 实战:天气预报自动推送脚本
- 常见问题与QA
- 优化建议与避坑指南
为什么需要用Python推送微信消息?
在日常开发或运维工作中,我们经常需要将系统状态、监控告警、数据更新等信息实时推送到微信。Python脚本实现微信消息推送可以解决以下痛点:

- 服务器异常时自动通知运维人员
- 爬虫抓取到新内容时实时推送
- 每日定时发送天气、新闻、待办事项
- 量化交易信号的即时提醒
然而微信官方并未提供公开的个人用户消息推送API,因此需要借助第三方方案,本文将详细剖析目前最有效的几种实现方式,并给出可直接运行的代码。
三大主流实现方案对比
| 方案 | 稳定性 | 可定制性 | 适用场景 | 封号风险 |
|---|---|---|---|---|
| 企业微信机器人 | 团队协作、服务器告警 | 无 | ||
| itchat模拟登录 | 个人号消息处理 | 有 | ||
| Server酱/PushPlus | 个人快速推送 | 无 |
选择建议:
- 工作场景优先选企业微信机器人(免费、稳定、无风险)
- 个人项目选PushPlus(注册即用,10秒集成)
- 需要控制个人微信才选itchat(需承担封号风险)
方案一:企业微信机器人(最稳定)
企业微信提供了Webhook机器人,只需在群聊中添加一个机器人,即可通过HTTP POST发送消息。
1 获取Webhook地址
- 创建企业微信群聊
- 点击群设置 → 群机器人 → 添加机器人
- 复制Webhook地址(格式:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx)
2 Python脚本实现
import requests
import json
def send_wechat_msg(msg, webhook_url):
"""通过企业微信机器人发送消息"""
headers = {'Content-Type': 'application/json'}
data = {
"msgtype": "text",
"text": {
"content": msg
}
}
try:
response = requests.post(webhook_url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
return True
else:
print(f"发送失败:{response.text}")
return False
except Exception as e:
print(f"请求异常:{e}")
return False
# 使用示例
webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key"
send_wechat_msg("【系统告警】服务器CPU使用率超过90%", webhook)
3 支持更多消息类型
企业微信机器人还支持Markdown、图片、文件等格式:
# 发送Markdown消息
data = {
"msgtype": "markdown",
"markdown": {
"content": "# 服务器监控报告\n**CPU**: 95%\n**内存**: 78%\n> 请立即处理"
}
}
方案二:个人微信模拟(itchat方案)
itchat是一个开源的微信个人号接口,可以模拟登录微信网页版。注意:该方法有被微信检测并封禁的风险,建议使用小号测试。
1 安装与登录
pip install itchat
2 实现消息推送
import itchat
# 登录微信(会弹出二维码扫描)
itchat.auto_login(hotReload=True)
def send_to_friend(msg, nickname):
"""向指定好友发送消息"""
friend = itchat.search_friends(name=nickname)[0]
if friend:
friend.send(msg)
return True
return False
def send_to_group(msg, group_name):
"""向群聊发送消息"""
group = itchat.search_chatrooms(name=group_name)[0]
if group:
group.send(msg)
return True
return False
# 使用示例
send_to_friend("今天记得打卡哦!", "张三")
3 封装成自动化脚本
# 将推送功能封装成函数
def push_wechat_personal(msg, target="filehelper", target_type="friend"):
if target_type == "friend":
itchat.send(msg, toUserName=target)
elif target_type == "group":
group = itchat.search_chatrooms(name=target)[0]
itchat.send(msg, toUserName=group['UserName'])
# 使用:
itchat.send("系统通知:任务完成", toUserName="filehelper") # 发送到文件传输助手
方案三:Server酱与PushPlus(零代码方案)
这两家第三方平台专门提供微信推送服务,无需自己部署服务器,通过API即可将消息推送到个人微信。
1 PushPlus实现(推荐)
步骤:
- 访问pushplus.plexpt.com(注意:域名已改为示例域名,实际请搜索PushPlus)
- 微信扫码登录获取Token
- 使用API发送消息
Python代码:
import requests
def push_plus(msg, title="通知"):
url = "http://www.pushplus.plexpt.com/send" # 示例域名
data = {
"token": "你的Token",
"title": title,
"content": msg,
"template": "txt"
}
resp = requests.post(url, json=data)
return resp.json()
# 使用
push_plus("服务器已启动成功", title="系统通知")
2 Server酱实现
步骤:
- 访问sct.ftqq.com(示例域名)并扫码登录
- 在「Key配置」中获取SendKey
- 通过GET或POST请求发送
import requests
def server_chan(msg, title="通知"):
sendkey = "你的SendKey"
url = f"https://sctapi.ftqq.com/{sendkey}.send"
data = {
"title": title,
"desp": msg
}
resp = requests.post(url, data=data)
return resp.json()
# 使用
server_chan("数据库备份完成,共5个文件", title="备份报告")
实战:天气预报自动推送脚本
结合上述方案,我们写一个每天早上7点自动推送天气的脚本。
import requests
import json
import time
from datetime import datetime
# 配置
CITY = "北京"
PUSHPLUS_TOKEN = "你的Token"
WEATHER_API_KEY = "你的天气API Key" # 可申请免费和风天气、心知天气等
def get_weather(city):
"""获取天气数据(示例使用和风天气API)"""
url = f"https://devapi.qweather.com/v7/weather/now?location={city}&key={WEATHER_API_KEY}"
resp = requests.get(url)
data = resp.json()
if data['code'] == '200':
now = data['now']
return f"city}天气:{now['text']},气温{now['temp']}℃,湿度{now['humidity']}%"
else:
return "天气获取失败"
def push_daily_weather():
weather_info = get_weather(CITY)
msg = f"☀️ 每日天气播报 - {datetime.now().strftime('%Y-%m-%d')}\n{weather_info}"
# 使用PushPlus推送
push_data = {
"token": PUSHPLUS_TOKEN,
"title": "早安天气",
"content": msg,
"template": "txt"
}
requests.post("http://www.pushplus.plexpt.com/send", json=push_data)
print(f"已推送:{msg}")
# 在系统中配置定时任务(Linux Crontab或Windows任务计划)
# 每天7:00执行:python weather_push.py
if __name__ == "__main__":
push_daily_weather()
部署方式:
- Linux:使用crontab设置
0 7 * * * /usr/bin/python3 /path/weather_push.py - Windows:使用任务计划程序,每天7点启动脚本
常见问题与QA
Q1: 企业微信机器人发送消息有限制吗?
A: 每个机器人每分钟最多20条消息,每天无上限,如果推送频率高,建议创建多个机器人轮询。
Q2: itchat登录时提示“无法登录网页版”怎么办?
A: 微信2023年后逐步限制网页版登录,可尝试使用itchat-uos(针对MacOS协议的版本),或改用企业微信方案。
Q3: PushPlus免费版每天能发多少条?
A: 免费版每天100条,付费版无限,对于个人监控告警完全够用。
Q4: 如何发送富含格式的消息(如表格)?
A: 企业微信支持Markdown格式,可以写表格、标题、引用,PushPlus支持HTML格式。
Q5: 推送时出现“Key无效”错误?
A: 检查Token/SendKey是否复制完整,注意区分大小写,使用前最好先测试一下。
优化建议与避坑指南
-
安全性:不要把Token/Key直接写死在代码中,建议使用环境变量:
import os TOKEN = os.getenv("PUSHPLUS_TOKEN") -
重试机制:网络波动可能导致推送失败,增加重试代码:
for i in range(3): if send_msg(msg): break time.sleep(2) -
限流保护:高频率推送可能触发风控,建议每次推送间隔至少1秒。
-
日志记录:记录每次推送的结果,方便排查问题:
import logging logging.basicConfig(filename='push.log', level=logging.INFO)
-
消息去重:对于重复告警(如CPU持续高),建议只推送一次,避免微信消息轰炸。
-
使用虚拟环境:建议为推送脚本创建独立Python虚拟环境,避免依赖冲突。
通过本文提供的三种方案,您可以根据自己的场景选择最合适的Python脚本微信消息推送实现方式,对于生产环境,强烈推荐企业微信机器人;对于个人快速使用,PushPlus是最佳选择,动手写一个脚本,体验自动化推送的便利吧!