大家好,我是大力。
你是不是也曾经历过这些场景?
今天,我就分享一个纯Python脚本,帮你彻底解决这个痛点!即使是完全不懂代码的小白,跟着我一步步操作,也能在30分钟内搞定一个专属的“微信定时提醒机器人”。
最终效果: 每天固定时间(比如早上9点),脚本自动打开微信,找到指定联系人,发送你提前设置好的当日消息。消息内容支持按日期定制,每天都不一样!
一、准备工作(仅需4步)
1. 安装Python环境
如果你电脑上还没有Python,请先安装(已安装可跳过)。
2. 下载脚本文件
复制文章最下方的完整代码,粘贴到你的文本编辑器(记事本、PyCharm、VS Code均可)。
保存为 auto_send_msg.py(文件名随意,后缀必须是 .py)。
建议新建一个文件夹,比如 D:\wechat_auto,把脚本放进去,方便管理。
3. 创建每日消息配置
{ "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),依次执行以下命令:pip install pyautogui pygetwindow psutil schedule pyperclip
💡 小技巧: 如果下载慢,可以加上清华镜像源:pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple二、修改脚本配置(核心)
用记事本打开你的 auto_send_msg.py,找到开头的 配置区域,按你的实际情况修改:
# ========== 这里改成你的信息 ==========CONTACT_NAME = "文件传输助手" # 你要发送的联系人昵称MESSAGE = "早上好,这是自动发送的消息。" # 默认消息(当天无配置时发送)SEND_TIME = "09:00" # 每天发送时间(24小时制)MESSAGE_JSON_PATH = "D:\\wechat_auto\\daily_messages.json" # 你的json文件完整路径# ===================================
注意: 路径中的反斜杠 \ 要写成双份 \\,或者用正斜杠 /。
三、测试运行
登录微信,保持窗口打开(可以最小化到任务栏,但不能关闭或缩放到托盘图标)。
切换到你的脚本目录,运行脚本:
python auto_send_msg.py now # 此命令单次执行 可进行测试python auto_send_msg.py # 正式设置定时 运行脚本
四、注意事项(必看!)
| |
|---|
| 微信不能完全隐藏 | 脚本需要模拟鼠标操作,微信窗口必须可见(最小化到任务栏OK,但托盘退出不行)。 |
| 运行期间别动鼠标键盘 | 脚本执行那几秒钟,请勿操作电脑,否则会干扰鼠标点击导致失败。 |
| 联系人名称要准确 | 支持模糊匹配,但建议用完整昵称或备注名,避免找错人。 |
| JSON格式务必正确 | |
五、完整代码(直接复制)
import timeimport pygetwindow as gwimport pyautoguiimport psutilimport scheduleimport sysimport pyperclipimport jsonfrom datetime import datetimeimport 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 Falsedef 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_windowdef 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_msgdef 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,每天生成一句暖心的话。
定时给团队发送工作日报提醒。
如果觉得本篇教程对你有帮助,欢迎点赞、在看、转发支持!有任何问题,欢迎在评论区留言交流。