震惊!用Python每天早上8点,我准时给女神发早安,只因这个脚本…

0 阅读8分钟

大家好,我是大力。

你是不是也曾经历过这些场景?

  • 每天早上要给对象/家人发一句早安,偶尔忘了还会引发“矛盾”?
  • 重要的工作提醒、项目节点,总是怕自己忙忘了?
  • 想给自己设定每日一句英语、天气提醒,却懒得每天复制粘贴?

今天,我就分享一个纯Python脚本,帮你彻底解决这个痛点!即使是完全不懂代码的小白,跟着我一步步操作,也能在30分钟内搞定一个专属的“微信定时提醒机器人”。

最终效果:  每天固定时间(比如早上9点),脚本自动打开微信,找到指定联系人,发送你提前设置好的当日消息。消息内容支持按日期定制,每天都不一样!wechat.png

一、准备工作(仅需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文件完整路径
# ===================================

注意:  路径中的反斜杠 `` 要写成双份 \,或者用正斜杠 /


三、测试运行

  1. 登录微信,保持窗口打开(可以最小化到任务栏,但不能关闭或缩放到托盘图标)。

  2. 打开命令提示符,切换到你的脚本目录:

    bash

    cd /d D:\wechat_auto
    
  3. 执行以下命令进行测试:

    bash

    python auto_send_msg.py now
    

    如果一切正常,你会看到微信自动弹出,搜索联系人并发送消息。

  4. 测试成功后,直接运行(不加 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,每天生成一句暖心的话。
  • 定时给团队发送工作日报提醒。

如果觉得本篇教程对你有帮助,欢迎点赞、在看、转发支持!
有任何问题,欢迎在评论区留言交流。