大家好,我是大力。
你是不是也曾经历过这些场景?
- 每天早上要给对象/家人发一句早安,偶尔忘了还会引发“矛盾”?
- 重要的工作提醒、项目节点,总是怕自己忙忘了?
- 想给自己设定每日一句英语、天气提醒,却懒得每天复制粘贴?
今天,我就分享一个纯Python脚本,帮你彻底解决这个痛点!即使是完全不懂代码的小白,跟着我一步步操作,也能在30分钟内搞定一个专属的“微信定时提醒机器人”。
最终效果: 每天固定时间(比如早上9点),脚本自动打开微信,找到指定联系人,发送你提前设置好的当日消息。消息内容支持按日期定制,每天都不一样!
一、准备工作(仅需4步)
1. 安装Python环境
如果你电脑上还没有Python,请先安装(已安装可跳过)。
- 访问Python官网下载最新版(建议3.10+)。
- ❗关键一步: 安装时,务必勾选 “Add Python to PATH” ,然后一路“下一步”完成。
2. 下载脚本文件
- 复制文章最下方的完整代码,粘贴到你的文本编辑器(记事本、PyCharm、VS Code均可)。
- 保存为
auto_send_msg.py(文件名随意,后缀必须是.py)。 - 建议新建一个文件夹,比如
D:\wechat_auto,把脚本放进去,方便管理。
3. 创建每日消息配置
- 在同一文件夹下,新建一个文本文件,重命名为
daily_messages.json。 - 用记事本打开,输入以下格式的内容:
{
"2026-03-10": "今天要完成项目报告!",
"2026-03-11": "有内鬼,停止交易。",
"2026-03-12": "英语每日一句:I have failed over and over again in my life. And that is why I succeed. 译文:我一生中失败了一次又一次,但正因如此,我才得以成功。",
"2026-03-13": "今天是想你的106天。",
"2026-03-14": "今天有时间吗?晚上一起吃饭吧。",
"2026-03-15": "离世界杯开始还有90天。",
"2026-03-16": "今日广州天气晴,25度,微风,穿个衬衫正好。",
"2026-03-17": "今天离高考还剩XXX天,加油!"
}
⚠️ 注意:
- 日期格式必须是
YYYY-MM-DD。- JSON最后一项后面不要有逗号。
- 如果某天没配置,脚本会自动发送默认消息。
4. 安装Python依赖库
脚本需要几个第三方库,打开命令提示符(CMD),依次执行以下命令: bash
pip install pyautogui pygetwindow psutil schedule pyperclip
💡 小技巧: 如果下载慢,可以加上清华镜像源:
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple
二、修改脚本配置(核心)
用记事本打开你的 auto_send_msg.py,找到开头的 配置区域,按你的实际情况修改:
python
# ========== 这里改成你的信息 ==========
CONTACT_NAME = "文件传输助手" # 你要发送的联系人昵称
MESSAGE = "早上好,这是自动发送的消息。" # 默认消息(当天无配置时发送)
SEND_TIME = "09:00" # 每天发送时间(24小时制)
MESSAGE_JSON_PATH = "D:\wechat_auto\daily_messages.json" # 你的json文件完整路径
# ===================================
注意: 路径中的反斜杠 `` 要写成双份
\,或者用正斜杠/。
三、测试运行
-
登录微信,保持窗口打开(可以最小化到任务栏,但不能关闭或缩放到托盘图标)。
-
打开命令提示符,切换到你的脚本目录:
bash
cd /d D:\wechat_auto -
执行以下命令进行测试:
bash
python auto_send_msg.py now如果一切正常,你会看到微信自动弹出,搜索联系人并发送消息。
-
测试成功后,直接运行(不加
now)即可让脚本后台运行,到点自动发送:bash
python auto_send_msg.py
四、注意事项(必看!)
| 常见问题 | 解决方案 |
|---|---|
| 微信不能完全隐藏 | 脚本需要模拟鼠标操作,微信窗口必须可见(最小化到任务栏OK,但托盘退出不行)。 |
| 运行期间别动鼠标键盘 | 脚本执行那几秒钟,请勿操作电脑,否则会干扰鼠标点击导致失败。 |
| 联系人名称要准确 | 支持模糊匹配,但建议用完整昵称或备注名,避免找错人。 |
| JSON格式务必正确 | 最后一项不要有逗号,所有符号用英文半角。 |
五、完整代码(直接复制)
import time
import pygetwindow as gw
import pyautogui
import psutil
import schedule
import sys
import pyperclip
import json
from datetime import datetime
import os
# ========== 配置区域(请根据实际情况修改)==========
# 注意:不能将微信界面最小化,否则消息无法发送
CONTACT_NAME = "张三" # 要发送的联系人昵称
MESSAGE = "早上好,这是自动发送的消息。" # 默认消息(当JSON中无当日配置时使用)
SEND_TIME = "11:11" # 每天发送时间(24小时制,如 "09:00")
MESSAGE_JSON_PATH = "F:\python_work\daily_message.json" # 存放每日消息的JSON文件路径
INPUT_BOX_Y_OFFSET = 80 # 输入框距离窗口底部的像素偏移量(可根据屏幕调整)
# ===============================================
def is_process_running(process_name):
"""检查指定进程是否在运行"""
for proc in psutil.process_iter(['name']):
try:
if proc.info['name'] == process_name:
return True
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
return False
def launch_wechat_if_needed():
"""如果微信未运行则启动,返回主窗口对象"""
# 等待微信主窗口出现(标题为“微信”)
wechat_window = None
for _ in range(30): # 最多等待30秒
windows = gw.getWindowsWithTitle('微信')
if windows:
# 取第一个匹配的窗口(通常就是主窗口)
wechat_window = windows[0]
break
time.sleep(1)
if not wechat_window:
raise Exception("未找到微信主窗口,请检查微信是否已登录")
return wechat_window
def ensure_window_active(window):
"""确保窗口处于激活状态(如果最小化则还原)"""
if window.isMinimized:
window.restore()
window.activate()
time.sleep(1) # 等待窗口获得焦点
def search_and_open_chat(contact_name):
"""
在微信主界面搜索联系人并打开聊天窗口
使用剪贴板粘贴联系人名称,避免输入法干扰
"""
# 1. 聚焦搜索框 (Ctrl+F)
pyautogui.hotkey('ctrl', 'f')
time.sleep(1)
# 2. 清空搜索框(全选+删除)
pyautogui.hotkey('ctrl', 'a')
time.sleep(0.2)
pyautogui.press('backspace')
time.sleep(0.2)
# 3. 将要搜索的联系人名称复制到剪贴板
pyperclip.copy(contact_name)
time.sleep(0.2)
print("联系人已粘贴")
# 4. 粘贴到搜索框 (Ctrl+V)
pyautogui.hotkey('ctrl', 'v')
time.sleep(2) # 等待搜索结果加载
print("已粘贴联系人名称,等待搜索结果...")
# 5. 按两次回车:第一次选中第一个结果,第二次进入聊天窗口
pyautogui.press('enter')
print("确认联系人已选择,准备发送消息...")
time.sleep(2)
def send_message(wechat_win, message):
print("进入到发消息了。。")
"""在当前激活的聊天窗口输入消息并发送"""
# 同样使用剪贴板粘贴消息,避免输入法问题(如果需要发送中文)
# 计算输入框的估算坐标(窗口底部向上偏移一定像素,水平居中)
input_x = wechat_win.left + wechat_win.width // 2
input_y = wechat_win.bottom - INPUT_BOX_Y_OFFSET
pyautogui.click(input_x, input_y)
time.sleep(0.5)
# 粘贴消息
pyperclip.copy(message)
pyautogui.hotkey('ctrl', 'v')
time.sleep(0.5)
pyautogui.press('enter')
time.sleep(1)
print("消息已发送")
def send_wechat_message(contact, message):
"""主流程:确保微信打开、激活、搜索联系人、发送消息"""
try:
print("开始执行微信自动发送任务...")
wechat_win = launch_wechat_if_needed()
ensure_window_active(wechat_win)
search_and_open_chat(contact)
send_message(wechat_win, message)
print("消息发送成功!")
except Exception as e:
print(f"发送失败: {e}")
def get_today_message(json_path, default_msg):
"""
从JSON文件中读取今日消息
JSON格式示例:{"2026-03-10": "今天想说的话", "2026-03-11": "明天的话"}
如果文件不存在、格式错误或无当日记录,返回默认消息
"""
today = datetime.now().strftime("%Y-%m-%d")
print("今天日期是:" + today)
if not os.path.exists(json_path):
print(f"消息文件 {json_path} 不存在,使用默认消息")
return default_msg
try:
with open(json_path, 'r', encoding='utf-8') as f:
data = json.load(f)
if not isinstance(data, dict):
print("JSON格式错误,应为字典,使用默认消息")
return default_msg
message = data.get(today)
print(message)
if message is None:
print(f"今日 {today} 无配置消息,使用默认消息")
return default_msg
print(f"今日消息:{message}")
return message
except Exception as e:
print(f"读取JSON文件出错: {e},使用默认消息")
return default_msg
def job():
"""定时任务要执行的函数"""
message = get_today_message(MESSAGE_JSON_PATH, MESSAGE)
send_wechat_message(CONTACT_NAME, message)
if __name__ == "__main__":
# MESSAGE 我想读取json文件 根据
# 如果命令行参数包含 "now",则立即执行一次(用于测试)
if len(sys.argv) > 1 and sys.argv[1] == "now":
message = get_today_message(MESSAGE_JSON_PATH, MESSAGE)
send_wechat_message(CONTACT_NAME, message)
sys.exit(0)
# 设置定时任务
schedule.every().day.at(SEND_TIME).do(job)
print(f"定时任务已设置,每天 {SEND_TIME} 执行。")
print("脚本将一直运行,按 Ctrl+C 退出。")
# 持续运行调度器
try:
while True:
schedule.run_pending()
time.sleep(60) # 每分钟检查一次
except KeyboardInterrupt:
print("脚本被用户中断。")
写在最后
这个脚本稍加改造,还能实现更多玩法:
- 结合天气API,每天自动发送天气预报。
- 对接 ChatGPT,每天生成一句暖心的话。
- 定时给团队发送工作日报提醒。
如果觉得本篇教程对你有帮助,欢迎点赞、在看、转发支持!
有任何问题,欢迎在评论区留言交流。