# -*- coding: utf-8 -*- # Author : Charley # Python : 3.12.10 # Date : 2026/08/02 """通过 PC 版微信(wxauto4)把文件/图片发送给指定好友或群。 前置条件: 1. 已装 wxauto4:pip install wxauto4 (原 wxauto 已从 PyPI 下架;wxauto4 对应微信 4.0 PC 客户端,免费,支持 Python 3.9~3.13) 2. Windows PC 版微信(4.0+) 已登录,窗口未最小化(wxauto4 靠 UI 自动化操作微信窗口, 运行期间尽量别抢占鼠标/键盘)。 3. 目标好友/群的备注名或昵称须与传入的 who 完全一致(测试用 "backup")。 用法: - 作为模块:from deca_wechat import send_files; send_files("xx.png", who="backup") - 命令行: python deca_wechat.py <文件路径> [好友名(默认backup)] """ import sys from loguru import logger # 目标匹配是否精确:True=按 who 精确匹配备注/昵称(推荐,避免误发给名字相近的人) EXACT_MATCH = True def send_files(paths, who: str = "backup") -> bool: """发送一个或多个文件给微信好友/群。 Args: paths (str | list[str]): 单个文件路径或路径列表。 who (str, optional): 目标好友备注名/昵称或群名。Defaults to "backup"。 Returns: bool: 全部发送成功返回 True;库缺失、连不上微信或发送异常返回 False。 """ try: from wxauto4 import WeChat except ImportError: logger.error("未安装 wxauto4,请执行: pip install wxauto4") return False if isinstance(paths, str): paths = [paths] try: wx = WeChat() # 绑定当前已登录的 PC 微信(未登录/窗口不可见会失败) except Exception as e: logger.error(f"连接 PC 微信失败(确认微信4.0已登录且窗口可见): {e}") return False ok = True for p in paths: try: resp = wx.SendFiles(str(p), who=who, exact=EXACT_MATCH) logger.info(f"微信已发送: {p} -> {who} | 返回: {resp}") except Exception as e: ok = False logger.error(f"微信发送失败 {p} -> {who}: {e}") return ok def send_text(msg: str, who: str = "backup") -> bool: """发送一条文本消息给微信好友/群。 Args: msg (str): 要发送的文本内容(可含换行,微信里会自动识别明文 URL 为可点蓝字)。 who (str, optional): 目标好友备注名/昵称或群名。Defaults to "backup"。 Returns: bool: 发送成功返回 True;库缺失、连不上微信或发送异常返回 False。 """ try: from wxauto4 import WeChat except ImportError: logger.error("未安装 wxauto4,请执行: pip install wxauto4") return False try: wx = WeChat() # 绑定当前已登录的 PC 微信(未登录/窗口不可见会失败) except Exception as e: logger.error(f"连接 PC 微信失败(确认微信4.0已登录且窗口可见): {e}") return False try: resp = wx.SendMsg(msg, who) # wxauto4: SendMsg(消息, 目标) 位置参数 logger.info(f"微信文本已发送 -> {who} | 返回: {resp}") return True except Exception as e: logger.error(f"微信文本发送失败 -> {who}: {e}") return False if __name__ == "__main__": logger.remove() logger.add(sys.stderr, level="INFO") if len(sys.argv) < 2: print("用法: python deca_wechat.py <文件路径> [好友名(默认backup)]") sys.exit(1) target = sys.argv[2] if len(sys.argv) > 2 else "backup" send_files(sys.argv[1], target)