| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- # -*- 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 = "得卡-通知") -> 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
- 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)
|