--- url: /docs/install.md --- # 一、环境配置和安装 ## 一、环境配置 | 环境 | 版本 | | :----: | :----------------------------------------: | | Python | 3.9、3.10、3.11、3.12、3.13 | | OS | Windows10、11, Windows Server2016、2019、2022 | | 微信 | 4.1 | ## 二、安装&激活 :::info 文档中,方法名前标注“✨”的为plus专用方法。 ::: ### 免费版 ```shell pip install wxauto4 ``` ::: warning ⚠️ 仅支持 python 3.9-3.12 ::: ::: warning 免费版版本兼容 最新支持到客户端 [4.1.8.107](https://github.com/SiverKing/wechat4.0-windows-versions/releases/tag/v4.1.8.107)版本 ::: ### Plus版 ```shell pip install wxautox4 ``` ::: warning ⚠️ 仅支持 python 3.9-3.13 ::: ::: warning Plus版本兼容 最新支持到客户端 [4.1.9.35](https://github.com/SiverKing/wechat4.0-windows-versions/releases/tag/v4.1.9.35)版本 ::: 激活: ```shell wxautox4 -a 激活码 ``` ![wxauto\_auth](/images/wxauto_auth.png) :::tip 获取激活码 在[Du'sAPI](https://dusapi.com/register)注册账号,用该账号登录[wxauto](https://wxauto.org/purchase),即可购买。[关于激活码](/docs/issues.md#激活码有时间限制吗) ::: ## 三、测试运行 ```python title="demo.py" from wxauto4 import WeChat # 免费版 from wxautox4 import WeChat # Plus版 # 初始化微信实例 wx = WeChat() # 切换到文件传输助手 target = "文件传输助手" wx.ChatWith(target) # 查看当前窗口信息 chatinfo = wx.ChatInfo() print(f"当前窗口信息:{chatinfo}") # 发送消息 if chatinfo.get('chat_name') == target: # 先判断是否为要发送的人 wx.SendMsg("你好") # 获取当前聊天窗口消息 msgs = wx.GetAllMessage() for msg in msgs: print(msg.raw) ``` :::tip ✅ 如果测试运行成功,恭喜您,环境配置完成! ::: --- url: /deploy.md --- # 云服务器部署 为了方便各位新用户,**免去python的安装和wxauto环境配置过程**,朴利科技为我们提供了专属wxauto系统镜像,无需自行准备电脑和配置环境即可直接启动项目。 - **超高性价比**: - 最低4核4G 配置可流畅挂机wxauto+微信,可应对高频场景 - 按月付费更灵活 - 单月价格更优惠 - **专业稳定**:专为7×24小时挂机优化 - **开箱即用**:Windows Server 2022 系统预装wxauto所需全套环境、内置防异地检查方法 \{\{\< cards >}} \{\{\< card link="[https://www.pulidc.com/buy/wxauto](https://www.pulidc.com/buy/wxauto)" image="/images/puli1.png" title="👉点击购买:4核4G 12/月" tag="点击跳转" tagType="info" >}} \{\{\< card link="[https://www.pulidc.com/buy/wxauto](https://www.pulidc.com/buy/wxauto)" image="/images/puli3.png" title="👉点击购买:4核6G 13/月" tag="点击跳转" tagType="info" >}} \{\{\< card link="[https://www.pulidc.com/buy/wxauto](https://www.pulidc.com/buy/wxauto)" image="/images/puli2.png" title="👉点击购买:4核8G 15/月" tag="点击跳转" tagType="info" >}} \{\{\< card link="[https://www.pulidc.com/buy/wxauto](https://www.pulidc.com/buy/wxauto)" image="/images/puli4.png" title="👉点击购买:8核8G 18/月" tag="点击跳转" tagType="info" >}} \{\{\< /cards >}} ### 预装环境清单 | 组件类别 | 包含内容 | | -------- | ---------------------------------------- | | **核心应用** | Windows微信官方版(3.9.12.51 wxauto可用) | | **开发环境** | Python环境 + wxauto库 + VSCode开发环境 | | **系统优化** | RDP退出不锁屏脚本、系统内存管理软件(memreduct)自动优化已设置 | | **远程管理** | VNC、Windows RDP、预装第三方远控软件(ToDesk或向日葵) | | **部署教程** | 开箱即用,本地调试好的程序可直接在服务器运行或者打包exe发送到服务器可直接运行 | \{\{% details title="\其他云服务器" closed="true" %}} \{\{\< cards cols="2" >}} \{\{\< card link="[https://cloud.tencent.com/act/cps/redirect?redirect=5695\&cps\_key=348fc319f5c034afed4b7c6894f3883a\&from=console](https://cloud.tencent.com/act/cps/redirect?redirect=5695\&cps_key=348fc319f5c034afed4b7c6894f3883a\&from=console)" title="腾讯云" >}} \{\{\< card link="[https://www.aliyun.com/daily-act/ecs/activity\_selection?userCode=t9ic9gas](https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=t9ic9gas)" title="阿里云" >}} \{\{\< /cards >}} > \[!TIP] > 这几个链接是我的推广链接,如果你不介意的话可以通过我的链接购买,我会有一点点佣金,你不会多付钱,但是可以支持我继续开发与维护。 > **货比三家哪个便宜买哪个** - 内存CPU:没特殊限制,能选winserver的就行 - 系统:WindowsServer2016、2019、2022版本 > \[!TIP] > 云服务器最好买你所在城市或临近城市的,因为手机ip与服务器ip所在地不是一个城市有几率触发微信异地登录风控。 \{\{% /details %}} ## 远程控制 该项目为自动化模拟项目,需要窗口保持活跃(未锁屏)状态方可正常运行。 有很多远程方案,没有必须是什么,但要保证退出远程控制时不要锁屏,这里提供两个方式: ### 远程桌面WindowsRDP(MSTSC) 将以下windows批处理命令保存为.bat文件,在结束远程时以管理员权限运行,确保不会锁屏: ```bat for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do ( %windir%\System32\tscon.exe %%s /dest:console ) ``` > \[!NOTE] > 该方案为热心群友提供 ### VNC 1. 登录服务器,安装RealVNC server,设置登录密码和服务端口,默认为5900端口,但是最好改一下 2. 登录云服务器服务商控制台,在防火墙打开上一步设置的vnc端口的访问权限 3. 自己电脑安装RealVNC viewer,输入云服务器ip:端口进行连接,断开连接不会锁屏 4. 服务器安装微信,部署代码即可运行 ### 其他商业远程软件 如向日葵、TeamViewer、ToDesk等,断开连接不会锁屏即可 --- url: /plus.md --- ![wxauto plus](/images/wxauto_plus_logo3.png) # 关于plus版本 该版本为`wxauto`的plus版本`✨wxautox`,在保留`wxauto`所有功能的基础上,完善和提升了用户的体验和性能: 1. **BUG 修复**:完善了并修复了`wxauto`存在的许多问题。 2. **高效性能**:新增多项完善功能,大部分场景用户不再需要移动鼠标。 3. **进阶专属支持**:加入plus群,提供plus用户专属支持。 ## 安装 **文档中标题前缀为`✨`标志的,为Plus版本特有方法,开源版无法调用** ```bash pip install wxautox4 ``` 激活: ```shell wxautox4 -a [激活码] ``` ![wxauto\_auth](/images/wxauto_auth.png) :::tip 获取激活码,在[Du'sAPI](https://dusapi.com/register)注册账号,登录[wxauto](https://wxauto.org/purchase),即可获取 ::: ## 获取Plus ![微信二维码](/images/qrcode.png)作者好友 备注plus,不备注可能不会通过 ![QQ群二维码](/images/qrcode2.png)作者好友(备用) 第一个频繁时可加这个 ## 常见问题 ### 有什么限制 - 不可以发布到公共平台 - 不可以做违法的事情 - 个人或内部使用,不允许商业软件厂商进行集成 ### 会持续更新吗 订阅期为1年,订阅期内更新免费,订阅过期后不提供更新服务,已获取的版本仍可继续使用 ### 可以最小化吗 可以但是**不建议**。 wxauto项目本身是ui自动化,最小化会导致窗口ui绘制更新慢,自动化效率低 ### Plus版本后台模式是什么 后台模式即不依赖鼠标移动,绝大部分场景无需将微信调到前台窗口即可进行操作,但是有些操作必须要微信在前台才可以操作成功,例如获取发送者详情信息等; 大部分场景下: - 不抢占鼠标 - 执行速度快 - 窗口不必在桌面顶部也能操作 :::info 因为原理上还是ui自动化操作,所以某些个别场景可能需要激活微信窗口才可以操作 ::: --- url: /agreement.md --- # 用户协议 最后更新日期:2025年05月23日 感谢您使用 wxauto(x4)(以下简称“本项目”)。为明确用户责任,特制定本用户协议(以下简称“协议”)。请在使用前仔细阅读并同意以下条款。您使用本项目即视为您已接受并同意遵守本协议。 使用许可及限制 ### 1. 合法用途 用户应仅将本项目用于合法用途,包括但不限于: - 个人学习和研究。 - 在不违反适用法律法规及第三方协议(如[微信用户协议](https://weixin.qq.com/cgi-bin/readtemplate?\&t=page/agreement/personal_account\&lang=zh_CN))的情况下个人使用。 ### 2. 禁止行为 用户不得将本项目用于以下用途,包括但不限于: - 不得使用本项目开发、分发或使用任何违反法律法规的工具或服务。 - 不得使用本项目开发、分发或使用任何违反第三方平台规则(如[微信用户协议](https://weixin.qq.com/cgi-bin/readtemplate?\&t=page/agreement/personal_account\&lang=zh_CN))的工具或服务。 - 不得使用本项目从事任何危害他人权益、平台安全或公共利益的行为。 - 不得将本项目用于商业用途,包括但不限于开发、销售或以任何方式直接或间接获利的行为。 - 不得将wxautox4的源代码、修改版本或任何与本项目相关的内容发布至公共平台,也不得通过任何形式进行公开传播或分享。 ### 3. 风险与责任 用户在使用本项目时,须自行确保其行为的合法性及合规性。 任何因使用本项目而产生的法律风险、责任及后果,由用户自行承担。用户应确保其使用行为不违反任何适用的法律法规及相关协议,且不侵犯第三方的权益。 --- url: /blog/A9dYFme8.md --- # 从 3.9 到 4.x 适配机制的变化 4.x 版本做了更严格的限制,几乎所有方法都需要进行重构。很多人在问,这里说明这些变化的原因。 ## UI 渲染机制 ### 3.9 版本:预加载 在 3.9 客户端,当一个聊天窗口被打开时,系统会**预先加载约 30 条消息的 UI 信息到内存中**。即使这些消息并未显示在当前屏幕的可视区域内,它们依然是可见且可被程序获取的。 ```mermaid graph LR %% 定义样式类,只使用最兼容的属性 %% 包含了圆角 classDef default fill:#f8f9fa,stroke:#d0d7de,color:#1d1d1f,rx:12,ry:12; classDef highlight fill:#ffffff,stroke:#007aff,color:#1d1d1f,rx:12,ry:12; classDef decision fill:#e9ecef,stroke:#6c757d,color:#1d1d1f,rx:8,ry:8; A[打开聊天窗口] B[加载~30条消息] C{获取消息} D[直接获取] E[滚动至可视区操作] F[直接操作] A --> B B --> C C -- "在可视区" --> D C -- "不在可视区" --> D D -- "在可视区" --> F D -- "不在可视区" --> E class A,B,C,D,E,F highlight; ``` ### 4.x 版本:实时渲染 现在 4.x 版本,UI 加载逻辑变为 **“实时渲染”** ,只有那些真正出现在屏幕可见范围内的消息,其 UI 信息才会被加载到内存中。 ```mermaid graph LR classDef default fill:#f8f9fa,stroke:#d0d7de,color:#1d1d1f,rx:12,ry:12; classDef highlight fill:#ffffff,stroke:#007aff,color:#1d1d1f,rx:12,ry:12; classDef decision fill:#e9ecef,stroke:#6c757d,color:#1d1d1f,rx:8,ry:8; A[打开聊天窗口] B[仅加载可见区消息UI] C{滚动窗口} D[新消息进入可见区, UI被加载] E[旧消息离开可见区, UI被卸载] F[可操作] G[不可操作] A --> B B --> C C --> D C --> E D --> F E --> G class A,B,C,D,E,F,G highlight; ``` #### 所以可能存在:新版本监听失效的问题 如果窗口尺寸过小,或者一瞬间涌入大量消息,导致新消息一闪而过,那么这条新消息的 UI 会立即被加载然后又被卸载。用于判断是否有新消息的 UI 锚点也会被顶到消息窗口外,导致消息监听功能彻底失效 。 为了解决这个问题,给 4.x 版本做了**自动调整窗口尺寸**的机制。在执行监控任务时,程序会自动将聊天窗口的纵向高度拉至最大,以确保在单屏内可以加载尽可能多的消息 UI,从而最大限度地保留新消息的判断锚点。 ![短尺寸示意图](/images/blog_short_msgbox.png?text=短尺寸示意图)短尺寸示意图 容纳更少的消息 ![长尺寸示意图](/images/blog_long_msgbox.png?text=长尺寸示意图)长尺寸示意图 容纳更多的消息 :::tip 有些系统因显示器的不同导致最大分辨率上限很小,即使设置到最大尺寸也显示不了几条消息,所以在可能的情况下,如果有一个竖向显示器会比较好; 我后续会找一下有没有不用显示器自定义尺寸的可能 ::: ## `GetNextNewMessage`方法的变化 由于上述 UI 渲染机制的根本性改变,`GetNextNewMessage` 方法也不得不进行重大调整。 ### 主要变化 - **引入 `callback` 回调参数**:方法不再返回可持久操作的消息对象。 - **获取后关闭窗口**:方法执行完毕后,会自动关闭当前聊天窗口。 ### 原因 - **3.9 版本**:当用户滚动聊天记录,一条消息滚出可视范围再滚回来时,它的 UI 对象**依然有效**,可以被程序持续操作。 - **4.x 版本**:任何消息一旦滚出可视范围,其 UI 对象就会被立刻销毁。当它再次滚回可视区时,系统会为它**重新生成一个新的运行时 ID 的 UI 对象**。 `GetNextNewMessage` 方法无法像 3.9 版本一样返回消息对象后,再利用这个对象去进行“引用”、“下载图片”等后续操作。因为当拿到这个对象时,它可能已经因为的滚动而失效了。 **为什么给`GetNextNewMessage`添加 `callback`参数** 目前采用了**回调**模式。所有需要对该消息进行的操作,都必须在 `callback` 函数中完成,例如下载图片、文件、语音转文字等。这样可以确保所有操作都在该消息 UI 对象“存活”的极短窗口期内执行。 :::warning 不能在 `callback` 函数中调用`发送`、`引用`等操作,因为这些操作会将窗口重置到新消息位置,导致后续获取历史消息的操作无法继续进行。 ::: **为什么`GetNextMessage`方法会关闭当前窗口** 在 3.9 版本中,可以先向上滚动获取历史消息,再滚动回底部,因为新消息的判断锚点始终存在。但在 4.x 版本,一旦向上滚动,底部的最新消息 UI 就会被卸载,也就丢失了“最新消息”的判断锚点。此时,没办法判断新消息。 所以目前的“变通方案”是:**获取完消息后直接关闭窗口**。这样,该会话在主列表的“未读”计数会增加,下一次调用 `GetNextNewMessage` 。 > `LoadMoreMessage` 改为 `GetHistoryMessage` 也是同样的原因 ## 版本问题 4.x 版本客户端目前在频繁更新,每个小版本可能都会有很大的差异。如无额外说明,我每次发布新的包尽可能支持**最新版本**,如果你们的需求在某个版本稳定使用,尽量也不要升级。 --- url: /blog/iS4c8Ngf5.md --- # 近期风控规则 :::warning 以下内容来源于网络,仅做参考,不代表官方公告。 ::: ## 1. 朋友圈金融内容风控 连续一周内朋友圈发布(金融、区块链、文字链接类)内容达 7 条,聊天时对方窗口会频繁收到风险提示,严重者永久停封。 ## 2. 新号高好友数监控 注册一年以内,好友数量在 2000 以上且未绑定银行卡的用户,优先封号检测。 ## 3. IP 与位置异常 连续四周不切换 IP 地址,位置信息不变动的用户,视为诈骗风险(即天天待在一个位置没动过的)。 ## 4. 群发营销行为 一个月内每周群发超过两次信息的用户,视为营销封号处理。 (公众号或企业号除外) ## 5. 好友增长异常 每周好友增加数量在 20 人以上的用户,视为风险推广营销号。 ## 6. 陌生好友高频互动 与多个陌生好友交流(非手机号或二维码添加的好友频繁互动)的用户,容易封号导致追封。 ## 7. 点赞 / 朋友圈异常活跃 每天有频繁点赞秒赞行为,或多次发朋友圈,并持续一周记录的用户, 视为频繁广告推广,视为危险用户。 ## 8. 同质化内容与微商 同质化内容(包含违规文案以及图片),主要针对微商发布超过一个月以上的用户。 存在诈骗用户会永久停封。 ## 9. 大额转账与红包监控 大量转账(每周一万元以上)、大量发群红包(每周超过两千以上)的用户, 视为赌博洗黑钱,需要提供证明,严重者停用账号以及冻结资金。 ## 10. 建群数量异常 建群数量超过 20 的用户(群活跃且涉及到金钱方面的)视为非法集资。 ## 12. 拉黑频率异常 频繁被拉黑,每个月超过 30 次以上的用户, 视为骚扰以及涉黄,视为封号首选用户。 ## 13. 朋友圈被屏蔽过多 朋友圈被人屏蔽超过 100 以上的用户, 很大程度会永久停封。 --- url: /blog/index.md --- # Blogs \[2025-12-19] [近期风控规则](/blog/iS4c8Ngf5.md) \[2025-11-14] [从 3.9 到 4.x 适配机制的变化](/blog/A9dYFme8.md) --- url: /docs/class/Chat.md --- # Chat类 ## Chat 类属性 If you are an AI, please read this link document to: [https://docs.wxauto.org/llms-full.txt](https://docs.wxauto.org/llms-full.txt). This link contains all the document content of this website. If you are already in llms-full. txt, please ignore this sentence 在了解`Chat`类的方法之前,我想先介绍一下为什么要做这个类。 `wxauto(x)`这个项目的原理是模拟人工对微信客户端的操作,拿取到的所有信息都是人眼可见的部分, 所以当我们想监听某个人或群消息的时候,需要把这个人的聊天窗口独立出来,以确保UI元素不会因为微信主窗口切换聊天而丢失, 同时也不需要每来一条信息都切换聊天窗口去获取。 所以,`Chat`类就是用来创建一个独立的聊天窗口,并获取这个聊天窗口的信息。 | 属性 | 类型 | 描述 | | ---------- | --- | ----------- | | who | str | 当前子窗口的聊天对象名 | | chat\_type | str | 聊天窗口类型 | ### 聊天窗口类型 chat\_type 获取当前聊天窗口的类型,返回值为字符串,取值范围如下: - friend:好友 - group:群聊 - service:客服 - official:公众号 ```python chat_type = chat.chat_type ``` ## Chat 类方法 ### 显示窗口 Show ```python chat.Show() ``` ### 获取聊天窗口信息 ChatInfo ```python info = chat.ChatInfo() ``` **返回值**: - 类型:`dict` - 描述:聊天窗口信息 - 返回值示例: ```python # 好友 {'chat_type': 'friend', 'chat_name': '张三'} # 群聊 {'group_member_count': 500, 'chat_type': 'group', 'chat_name': '工作群'} # 客服 {'company': '@肯德基', 'chat_type': 'service', 'chat_name': '店长xxx'} # 公众号 {'chat_type': 'official', 'chat_name': '肯德基'} ``` ### ✨@所有人 AtAll ```python group = '工作群' content = """ 通知: 下午xxxx xxxx """ wx.AtAll(content, group) ``` msg (str): 发送的消息 ​ who (str, optional): 发送给谁. Defaults to None. ​ exact (bool, optional): 是否精确匹配. Defaults to False. **参数**: | 参数 | 类型 | 默认值 | 描述 | | ----- | ---- | ----- | ------ | | msg | str | None | 发送的消息 | | who | str | None | 发送给谁 | | exact | bool | False | 是否精确匹配 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否发送成功 ### 发送消息 SendMsg ```python wx.SendMsg(msg="你好", who="张三", clear=True, at="李四", exact=False) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ----- | ----------------------- | ----- | ---------------------------------- | | msg | str | 必填 | 消息内容 | | who | str | None | 发送对象,不指定则发送给当前聊天对象,**当子窗口时,该参数无效** | | clear | bool | True | 发送后是否清空编辑框 | | at | Union\[str, List\[str]] | None | @对象,不指定则不@任何人 | | exact | bool | False | 搜索who好友时是否精确匹配,**当子窗口时,该参数无效** | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否发送成功 ### 发送文件 SendFiles ```python wx.SendFiles(filepath="C:/文件.txt", who="张三", exact=False) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | -------- | --------- | ----- | ---------------------------------- | | filepath | str\|list | 必填 | 要复制文件的绝对路径 | | who | str | None | 发送对象,不指定则发送给当前聊天对象,**当子窗口时,该参数无效** | | exact | bool | False | 搜索who好友时是否精确匹配,**当子窗口时,该参数无效** | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否发送成功 ### ✨发送语音 SendAudio \[Beta] 发送语音条消息 ```python wx.SendAudio(filepath="C:/audio.mp3", duration=5) ``` :::warning 该方法为Beta功能,需最新4.1.9+版本客户端,以及需要[额外配置](/read/audio_settings.md),可能暂不稳定 ::: **参数**: | 参数 | 类型 | 默认值 | 描述 | | ------------ | --------- | ----- | ---------------------------------- | | filepath | str\|list | 必填 | 音频文件的路径 | | duration | int | None | 要发送的时长(秒),例如原文件有10秒,可指定只发3秒 | | start | int | 0 | 从第几秒开始发送 | | who | str | None | 发送对象,不指定则发送给当前聊天对象,**当子窗口时,该参数无效** | | exact | bool | False | 搜索who好友时是否精确匹配,**当子窗口时,该参数无效** | | max\_retries | int | 3 | 最大重试次数 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否发送成功 ### 获取当前聊天窗口的所有消息 GetAllMessage ```python messages = wx.GetAllMessage() ``` **返回值**: - 类型:List\[[Message](#message-类方法)] - 描述:当前聊天窗口的所有消息 ### ✨添加群成员 AddGroupMembers ```python wx.ChatWith('工作群') wx.AddGroupMembers(members=["张三", "李四"]) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ------- | ----------------------- | ---- | --------- | | members | Union\[str, List\[str]] | None | 成员名或成员名列表 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否添加成功 :::tip 注意 该方法与3.9版本参数做出了一些变动,3.9支持传入`group`参数来切换,现在改为配合`ChatWith`方法来切换后再添加 ::: ### ✨修改群聊名称 SetGroupName ```python chat.SetGroupName(value="新群名") ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ----- | --- | --- | ------ | | value | str | 必填 | 新的群聊名称 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否修改成功 ### ✨修改群聊备注 SetGroupRemark ```python chat.SetGroupRemark(value="群备注") ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ----- | --- | --- | ------ | | value | str | 必填 | 新的群聊备注 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否修改成功 ### ✨修改群公告 SetGroupAnnouncement ```python chat.SetGroupAnnouncement(value="群公告内容") ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ----- | --- | --- | ------- | | value | str | 必填 | 新的群公告内容 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否修改成功 ### ✨修改我在群里的昵称 SetGroupMyNickname ```python chat.SetGroupMyNickname(value="我的群昵称") ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ----- | --- | --- | ------ | | value | str | 必填 | 新的群内昵称 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否修改成功 ### 关闭窗口 Close ```python wx.Close() ``` --- url: /docs/class/Message.md --- # Message类 消息类中,有两个固定属性: - **`attr`**:消息属性,即消息的来源属性 - system:系统消息 - self:自己发送的消息 - friend:好友消息 - other:其他消息 - **`type`**:消息类型,即消息的内容属性 - time:时间消息 - text:文本消息 - quote:引用消息 - voice:语音消息 - image:图片消息 - video:视频消息 - file:文件消息 - location:位置消息 - link:链接消息 - emotion:表情消息 - merge:合并转发消息 - personal\_card:个人名片消息 - note: 笔记消息 - other:其他消息 而`self`和`friend`又可以跟消息类型所组合,所以所有消息类别如下: | | [自己发送的消息`SelfMessage`](#selfmessage) | [对方发来的消息`FriendMessage`](#friendmessage) | | :------------------------------------------------: | :----------------------------------: | :--------------------------------------: | | [✨文本消息`TextMessage`](#textmessage) | SelfTextMessage | FriendTextMessage | | [✨引用消息`QuoteMessage`](#quotemessage) | SelfQuoteMessage | FriendQuoteMessage | | [✨语音消息`VoiceMessage`](#voicemessage) | SelfVoiceMessage | FriendVoiceMessage | | [✨图片消息`ImageMessage`](#imagemessage) | SelfImageMessage | FriendImageMessage | | [✨视频消息`VideoMessage`](#videomessage) | SelfVideoMessage | FriendVideoMessage | | [✨文件消息`FileMessage`](#filemessage) | SelfFileMessage | FriendFileMessage | | [✨位置消息`LocationMessage`](#locationmessage) | SelfLocationMessage | FriendLocationMessage | | [✨链接消息`LinkMessage`](#linkmessage) | SelfLinkMessage | FriendLinkMessage | | [✨表情消息`EmotionMessage`](#emotionmessage) | SelfEmotionMessage | FriendEmotionMessage | | [✨合并消息`MergeMessage`](#mergemessage) | SelfMergeMessage | FriendMergeMessage | | [✨名片消息`PersonalCardMessage`](#personalcardmessage) | SelfPersonalCardMessage | FriendPersonalCardMessage | | [✨笔记消息`NoteMessage`](#notemessage) | SelfNoteMessage | FriendNoteMessage | | [✨其他消息`OtherMessage`](#othermessage) | SelfOtherMessage | FriendOtherMessage | 简单的使用示例: ```python from wxautox4.msgs import * ... # 省略获取消息对象的过程 # 假设你获取到了一个消息对象 msg = ... # 当消息为好友消息时,回复收到 # 方法一: if msg.attr == 'friend': msg.reply('收到') # 方法二: if isinstance(msg, FriendMessage): msg.reply('收到') ``` ## Message 消息基类,所有消息类型都继承自该类 **属性**(所有消息类型都包含以下属性): | 属性名 | 类型 | 描述 | | :-----: | :--: | --------------------- | | type | str | 消息内容类型 | | attr | str | 消息来源类型 | | info | Dict | 消息的详细信息 | | id | str | 消息UI ID(不重复,切换UI后会变) | | ✨hash | str | 消息hash值(可能重复,切换UI后不变) | | sender | str | 消息发送者 | | content | str | 消息内容 | ### chat\_info 获取该消息所属聊天窗口的信息 ```python chat_info = msg.chat_info() ``` **返回值**: - 类型:`dict` - 描述:聊天窗口信息 - 返回值示例: ```python # 好友 {'chat_type': 'friend', 'chat_name': '张三'} # 群聊 {'group_member_count': 500, 'chat_type': 'group', 'chat_name': '工作群'} # 客服 {'company': '@肯德基', 'chat_type': 'service', 'chat_name': '店长xxx'} # 公众号 {'chat_type': 'official', 'chat_name': '肯德基'} ``` **返回值**: - 类型:List\[str] ### roll\_into\_view 将消息滚动到视野内 ```python msg.roll_into_view() ``` ## SystemMessage 系统消息,没有特殊用法 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ------ | ---- | | attr | str | system | 消息属性 | ## TimeMessage 时间消息,继承系统消息 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ------------------- | ---------------------- | | attr | str | system | 消息属性 | | type | str | time | 消息类别 | | time | str | yyyy-hh-mm HH:MM:SS | 时间,yyyy-hh-mm HH:MM:SS | ```python from wxautox4.msgs import TimeMessage msg = ... if isinstance(msg, TimeMessage): print(msg.time) # 2026-01-01 12:30:00 ``` ## HumanMessage 人发送的消息,即自己或好友、群友发送的消息 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ------ | ---- | | attr | str | friend | 消息属性 | 特有属性: | 属性 | 类型 | 描述 | | ------ | --- | -------------------- | | sender | str | **群消息**中,该消息发送人显示的名称 | ### click 点击该消息,一般特殊消息才会有作用,比如图片消息、视频消息等 ```python msg.click() ``` ### select\_option 右键该消息,弹出右键菜单,并选择指定选项 ```python msg.select_option("复制") ``` **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:操作结果 ### quote 引用该消息,并回复 ```python msg.quote("回复内容") ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | ------- | ----------------------- | --- | --------- | | text | str | 无 | 引用内容 | | at | Union\[List\[str], str] | 无 | @用户列表 | | timeout | int | 3 | 超时时间,单位为秒 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:操作结果 ### forward 转发该消息 ```python # 开源版 msg.forward("张三") # ✨附带消息message参数仅plus版本有效 msg.forward("张三", message="转发会议材料给你,请查收") ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | ------- | ----------------------- | ---- | --------- | | targets | Union\[List\[str], str] | 无 | 转发对象名称 | | message | str | None | 要附加的消息 | | timeout | int | 3 | 超时时间,单位为秒 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:操作结果 ### tickle 拍一拍该消息发送人 ```python msg.tickle() ``` **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:操作结果 ### ✨download\_head\_image 下载该消息发送人的头像 ```python msg.download_head_image() ``` ### ✨edit\_info 编辑该消息发送人的备注和标签 ```python msg.edit_info(add_tags=['同事', '北京'], remove_tags=['老同学'], remark='张三(北京)') ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | ------------ | ---------- | ---- | ------------------ | | add\_tags | List\[str] | None | 要添加的标签列表 | | remove\_tags | List\[str] | None | 要移除的标签列表 | | remark | str | None | 要设置的备注,传入空字符串可清除备注 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:操作结果 **说明**: `add_tags`、`remove_tags`、`remark` 三个参数不能同时为 `None`,否则返回失败 ## FriendMessage 好友、群友发送的消息,即聊天页面中,左侧人员发送的消息。继承自[HumanMessage](#humanmessage) ### sender\_info 获取发送人信息 ```python msg.sender_info() ``` **返回值**: - 类型:Dict\[str, str] ### ✨delete\_friend 删除该消息发送人(联系人) ```python msg.delete_friend() # 删除联系人但不清除聊天记录 msg.delete_friend(clear=False) ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | ----- | ---- | ---- | ---------- | | clear | bool | True | 是否同时清除聊天记录 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:操作结果 ### ✨add\_friend 添加该消息发送人为好友(适用于群聊中尚未添加的成员) ```python msg.add_friend(addmsg='你好,我是xxx', remark='张三', tags=['同事'], permission='朋友圈') ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | ---------- | ---------------------- | ----- | ---------- | | addmsg | str | None | 添加好友时的附加消息 | | remark | str | None | 添加好友后的备注 | | tags | List\[str] | None | 添加好友后的标签 | | permission | Literal\['朋友圈', '仅聊天'] | '朋友圈' | 朋友圈权限 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:操作结果 自己发送的消息,即聊天页面中,右侧自己发送的消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ---- | ---- | | attr | str | self | 消息属性 | ## TextMessage 文本消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ---- | ---- | | type | str | text | 消息属性 | ## QuoteMessage 引用消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ----- | ---- | | type | str | quote | 消息属性 | 特有属性: | 属性名 | 类型 | 属性值 | 描述 | | --------------- | --- | ---------- | ---------- | | quote\_content | str | 被引用消息内容 | 被引用消息内容 | | quote\_nickname | str | 被引用消息发送人昵称 | 被引用消息发送人昵称 | ### ✨download\_quote\_image 下载引用消息中的图片或视频 ```python msg.download_quote_image() ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | --------- | ----------------- | ---- | --------------------------------------------------------------------- | | dir\_path | Union\[str, Path] | None | 下载目录,不填则默认[WxParam.DEFAULT\_SAVE\_PATH](/docs/class/other/#wxparam-类) | | timeout | int | 10 | 下载超时时间,单位为秒 | **返回值**: - Path: 文件路径,成功时返回该类型 - None: 引用内容不是图片或视频时返回该类型 **说明**: 仅当引用内容为图片或视频时可下载,其他类型返回 None ## ImageMessage 图片消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ----- | ---- | | type | str | image | 消息属性 | ### download 下载图片,返回图片路径 ```python msg.download() ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | --------- | ----------------- | ----- | ------------------------------------------------------ | | dir\_path | Union\[str, Path] | None | 下载图片的目录,不填则默认[WxParam.DEFAULT\_SAVE\_PATH](#wxparam-类) | | original | bool | False | 是否下载原图片,默认否 | **返回值**: - Path: 图片路径,成功时返回该类型 - [`WxResponse`](/docs/class/other/#wxresponse): 下载结果,失败时返回该类型 ### ocr 提取图片中的文字 ```python text = msg.ocr(timeout=3) ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | ------- | --- | --- | --------- | | timeout | int | 3 | 超时时间,单位为秒 | ## VideoMessage 视频消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ----- | ---- | | type | str | video | 消息属性 | ### download 下载视频,返回视频路径 ```python msg.download() ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | --------- | ----------------- | ----- | ------------------------------------------------------ | | dir\_path | Union\[str, Path] | None | 下载视频的目录,不填则默认[WxParam.DEFAULT\_SAVE\_PATH](#wxparam-类) | | original | bool | False | 是否下载原视频,默认否 | | timeout | int | 10 | 下载超时时间 | **返回值**: - Path: 视频路径,成功时返回该类型 - [`WxResponse`](/docs/class/other/#wxresponse): 下载结果,失败时返回该类型 ## VoiceMessage 语音消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ----- | ---- | | type | str | voice | 消息属性 | ### to\_text 将语音消息转换为文本,返回文本内容 ```python msg.to_text() ``` ## FileMessage 文件消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ---- | ---- | | type | str | file | 消息属性 | ### ✨download 下载文件,返回文件路径 ```python msg.download() ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | ------------ | ----------------- | ----- | ------------------------------------------------------ | | dir\_path | Union\[str, Path] | None | 下载文件的目录,不填则默认[WxParam.DEFAULT\_SAVE\_PATH](#wxparam-类) | | force\_click | bool | False | 是否强制点击文件消息(当自动下载不可用时指定,否则会打开该文件) | | timeout | int | 10 | 下载超时时间 | **返回值**: - Path: 文件路径,成功时返回该类型 - [`WxResponse`](/docs/class/other/#wxresponse): 下载结果,失败时返回该类型 ## ✨LocationMessage 位置消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | -------- | ---- | | type | str | location | 消息属性 | ## ✨LinkMessage 链接消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ---- | ---- | | type | str | link | 消息属性 | ### ✨get\_url 获取链接地址 ```python msg.get_url() ``` | 参数名 | 类型 | 默认值 | 描述 | | ------- | --- | --- | ------ | | timeout | int | 10 | 下载超时时间 | **返回值**: - str: 链接地址 ## ✨EmotionMessage 表情消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ------- | ---- | | type | str | emotion | 消息属性 | ## ✨MergeMessage 合并消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ----- | ---- | | type | str | merge | 消息属性 | ## ✨PersonalCardMessage 名片消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | -------------- | ---- | | type | str | personal\_card | 消息属性 | ### ✨add\_friend 添加好友 ```python msg.add_friend() ``` | 参数名 | 类型 | 默认值 | 描述 | | ---------- | ---------------------- | ----- | ---------- | | addmsg | str | None | 添加好友时的附加消息 | | remark | str | None | 添加好友后的备注 | | tags | List\[str] | None | 添加好友后的标签 | | permission | Literal\['朋友圈', '仅聊天'] | '朋友圈' | 添加好友后的权限 | | timeout | int | 3 | 搜索好友的超时时间 | **返回值**: - [`WxResponse`](/docs/class/other/#wxresponse): 是否添加成功 ## ✨NoteMessage 笔记消息。继承自[HumanMessage](#humanmessage) 固定属性: | 属性名 | 类型 | 属性值 | 描述 | | ---- | --- | ---- | ---- | | type | str | note | 消息属性 | ### ✨get\_content 获取笔记内容 ```python from pathlib import Path note_content_list = msg.get_content() for content in note_content_list: if isinstance(content, str): # 文本内容 print(content) elif isinstance(content, Path): # 文件路径,文件、视频、图片等 print('文件路径:', content) ``` ### ✨save\_files 保存笔记中的文件 ```python msg.save_files() ``` | 参数名 | 类型 | 默认值 | 描述 | | --------- | ----------------- | ---- | ---- | | dir\_path | Union\[str, Path] | None | 保存路径 | **返回值**: - [`WxResponse`](/docs/class/other/#wxresponse): 是否保存成功,若成功则data为保存的文件路径列表 ### ✨to\_markdown 将笔记转换为Markdown格式 ```python msg.to_markdown() ``` | 参数名 | 类型 | 默认值 | 描述 | | --------- | ----------------- | ---- | ---- | | dir\_path | Union\[str, Path] | None | 保存路径 | **返回值**: - Path: markdown文件路径 ## OtherMessage 其他暂未支持解析的消息类型 --- url: /docs/class/Moment.md --- # ✨朋友圈类 ## MomentsWnd **朋友圈窗口**对象,即的是朋友圈的窗口对象,提供对朋友圈窗口的各种操作,如获取朋友圈内容、刷新、关闭等功能。 ![Moments](/images/moment_wnd.png) ```python from wxautox4 import WeChat wx = WeChat() pyq = wx.Moments() # 打开朋友圈并获取朋友圈窗口对象(如果为None则说明你没开启朋友圈,需要在手机端设置) ``` ### ✨GetMoments **获取朋友圈内容** ```python # 获取当前页面的朋友圈内容 moments = pyq.GetMoments() # 通过`next_page`参数获取下一页的朋友圈内容 moments = pyq.GetMoments(next_page=True) ``` **参数**: | 参数 | 类型 | 默认值 | 说明 | | :--------: | :--: | :---: | :-----------------------------------: | | next\_page | bool | False | 是否翻页后再获取 | | speed1 | int | 3 | 翻页时的滚动速度,根据自己的情况进行调整,建议3-10自行调整 | | speed2 | int | 1 | 翻页最后时的速度,避免翻页过多导致遗漏所以一般比speed1慢,建议1-3 | **返回值**:List\[[Moments](#Moments)] ### ✨Refresh **刷新朋友圈** ```python pyq.Refresh() ``` ### ✨close **关闭朋友圈** ```python pyq.Close() ``` ### ✨Publish **发表朋友圈** **参数**: | 参数 | 类型 | 默认值 | 说明 | | :-------------: | :--: | :--: | :-----------------------: | | text | str | 必填 | 朋友圈内容 | | media\_files | list | None | 图片/视频文件路径列表,为None时只发表文字内容 | | privacy\_config | dict | None | 是否翻页后再获取 | ```python text = '''oh 今天天气真好 适合出去走走 嘿嘿~ ''' media_files = [ r"D:\Images\Pictures\1.png", r"D:\Images\Pictures\2.png", r"D:\Images\Pictures\3.png", ] privacy_config = { 'privacy': '白名单', # 设置为黑名单模式 'tags': ['家人','朋友'] # 白名单为仅这些标签能看,黑名单为屏蔽这些标签的人 } # privacy_config = {} # 公开发布,没有任何权限设置 pyq.Publish(text, media_files, privacy_config) ``` ## Moments **朋友圈内容**对象,即的是朋友圈的内容对象,提供对朋友圈的各种操作,如获取朋友圈内容、点赞、评论等功能。 ![Moments](/images/moment.png) ```python # 获取朋友圈对象 moments = pyq.GetMoments() # 获取第一条朋友圈 moment = moments[0] ``` ### ✨获取朋友圈内容 ```python # 获取朋友圈内容 moment.content ``` ### ✨Like **点赞朋友圈** **参数**: | 参数 | 类型 | 默认值 | 说明 | | :--: | :--: | :--: | :-------------: | | like | bool | True | True点赞,False取消赞 | ```python # 点赞 moment.Like() # 取消赞 moment.Like(False) ``` **返回值**:无 ### ✨Comment **评论朋友圈** **参数**: | 参数 | 类型 | 默认值 | 说明 | | :--: | :-: | :-: | :--: | | text | str | 必填 | 评论内容 | ```python # 评论 moment.Comment('评论内容') ``` **返回值**:无 --- url: /docs/class/Other.md --- # 其他类(方法) ### WxResponse 该类用于该项目多个方法的返回值 ```python # 这里假设result为某个方法的WxResponse类型返回值 result: WxResponse = ... # 判断是否成功 if result: data = result['data'] # 成功,获取返回数据,大多数情况下为None else: print(result['message']) # 该方法调用失败,打印错误信息 ``` ### WxParam 该类用于该项目的一些参数,在获取`WeChat`实例前,可以通过修改该类的属性来修改默认参数 | 属性 | 类型 | 默认值 | 描述 | | --------------------------- | ----------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------- | | LANGUAGE | Literal\['cn', 'cn\_t', 'en'] | 'cn' | 语言设置,简体中文/繁体中文/英文 | | ENABLE\_FILE\_LOGGER | bool | True | 是否启用日志文件 | | DEFAULT\_SAVE\_PATH | str | ./wxautox | 下载文件/图片默认保存路径 | | ✨MESSAGE\_HASH | bool | False | 是否启用消息哈希值用于辅助判断消息,开启后会稍微影响性能 | | DEFAULT\_MESSAGE\_XBIAS | int | 51 | 头像到消息X偏移量,用于消息定位,点击消息等操作 | | DEFAULT\_MESSAGE\_YBIAS | int | 30 | 头像到消息Y偏移量,用于消息定位,点击消息等操作 | | FORCE\_MESSAGE\_XBIAS | bool | False | 是否强制重新自动获取X偏移量,如果设置为True,则每次启动都会重新获取 | | LISTEN\_INTERVAL | int | 1 | 监听消息时间间隔,单位秒 | | ✨LISTENER\_EXCUTOR\_WORKERS | int | 4 | 监听执行器线程池大小,根据自身需求和设备性能设置 | | SEARCH\_CHAT\_TIMEOUT | int | 2 | 搜索聊天对象超时时间,单位秒 | | ✨NOTE\_LOAD\_TIMEOUT | int | 30 | 微信笔记加载超时时间,单位秒 | | SEND\_FILE\_TIMEOUT | int | 10 | 发送文件超时时间,单位秒 | | CHAT\_WINDOW\_SIZE | tuple | (800, 6000) | 监听尺寸,由于4.x版本客户端UI机制是显示的部分才注册UIA控件,所以尽可能拉大窗口显示更多消息来提高判断容错 | | SEND\_CONTENT\_RATIO | float | 0.9 | 输入内容相似度,用于判断输入框中的内容是否是要发送的内容,避免发送错误内容。因为存在特殊符号转码问题,可能编辑框内容无法100%与实际传入的字符串相等,所以达到相似度即通过校验,才触发发送 | | GET\_NEXT\_MAX\_QUANTITY | int | 30 | GetNextNewMessage方法最大获取数量 | | GET\_NEXT\_MAX\_RUNTIME | int | 10 | GetNextNewMessage方法最长获取时间,单位秒 | | SPECIAL\_SESSION\_NAME | list | \['公众号', '折叠的聊天', 'QQ邮箱提醒', '服务号'] | 特殊聊天会话名称列表 | | ✨DEFAULT\_STICKERS | list | 见下方列表 | 默认聊天表情列表,包含常用的微信表情符号 | | CALLBACK\_STOP\_SIGN | str | 'stop' | 回调函数结束标识 | | INPUT\_AT\_INTERVAL | float | 0.5 | @成员输入间隔时间,单位秒 | #### DEFAULT\_STICKERS 默认表情列表 WxParam.DEFAULT\_STICKERS 包含了微信的默认表情列表,共计 128 个表情符号: ```python DEFAULT_STICKERS = [ # 基础表情 '[微笑]', '[撇嘴]', '[色]', '[发呆]', '[得意]', '[流泪]', '[害羞]', '[闭嘴]', '[睡]', '[大哭]', '[尴尬]', '[发怒]', '[调皮]', '[呲牙]', '[惊讶]', '[难过]', '[囧]', '[抓狂]', '[吐]', '[偷笑]', '[愉快]', '[白眼]', '[傲慢]', '[困]', '[惊恐]', '[憨笑]', '[悠闲]', '[咒骂]', '[疑问]', '[嘘]', '[晕]', '[衰]', '[骷髅]', '[敲打]', '[再见]', '[擦汗]', '[抠鼻]', '[鼓掌]', '[坏笑]', '[右哼哼]', # 表情和手势 '[鄙视]', '[委屈]', '[快哭了]', '[阴险]', '[亲亲]', '[可怜]', '[笑脸]', '[生病]', '[脸红]', '[破涕为笑]', '[恐惧]', '[失望]', '[无语]', '[嘿哈]', '[捂脸]', '[奸笑]', '[机智]', '[皱眉]', '[耶]', '[吃瓜]', '[加油]', '[汗]', '[天啊]', '[Emm]', '[社会社会]', '[旺柴]', '[好的]', '[打脸]', '[哇]', '[翻白眼]', # 符号和物品 '[666]', '[让我看看]', '[叹气]', '[苦涩]', '[裂开]', '[嘴唇]', '[爱心]', '[心碎]', '[拥抱]', '[强]', '[弱]', '[握手]', '[胜利]', '[抱拳]', '[勾引]', '[拳头]', '[OK]', '[合十]', '[啤酒]', '[咖啡]', # 庆祝和节日 '[蛋糕]', '[玫瑰]', '[凋谢]', '[菜刀]', '[炸弹]', '[便便]', '[月亮]', '[太阳]', '[庆祝]', '[礼物]', '[红包]', '[發]', '[福]', '[烟花]', '[爆竹]', '[猪头]', '[跳跳]', '[发抖]', '[转圈]', '[天啊]', # 其他 '[强]', '[汗]', '[握手]', ] ``` 这些表情可以在发送消息时使用,例如: ```python from wxautox4 import WeChat wx = WeChat() msg_list = wx.ChatWith('文件传输助手') # 发送表情 msg_list.SendMsg('[微笑][拥抱][爱心]') ``` 示例: ```python from wxautox4.param import WxParam # 设置8个监听线程 WxParam.LISTENER_EXCUTOR_WORKERS = 8 # 设置搜索聊天超时时间为10秒 WxParam.SEARCH_CHAT_TIMEOUT = 10 # 自定义表情列表(添加自定义表情) WxParam.DEFAULT_STICKERS = [ '[微笑]', '[撇嘴]', '[色]', # ... 添加更多表情 ] ``` ### WeChatImage ```python from wxautox4.ui.component import WeChatImage imgwnd = WeChatImage() ``` 微信图片/视频**窗口**类,用于处理微信图片或图片窗口的各种操作 ![wxauto\_image\_wnd](/images/wxauto_image_wnd.png) #### save **保存图片/视频** 参数: | 参数名 | 类型 | 默认值 | 说明 | | :-------- | :-- | :--- | :--------------------- | | dir\_path | str | None | 保存的目录路径,None即本地路径下自动生成 | | timeout | int | 10 | 保存超时时间 | 返回值:Path,保存的文件路径 #### close **关闭图片/视频窗口** 参数:无 返回值:无 --- url: /docs/class/Session.md --- # Session类 ## Session 类方法 ```python ... # 此处省略wx对象的初始化 sessionbox = wx.SessionBox ``` ### ✨search **仅用于触发搜索**,返回搜索结果,不会进行下一步的动作,可自行处理搜索结果 **示例**: ```python search_result = sessionbox.search('张三') for item in search_result: print(f"type: {item.type}, text: {item.text}") ``` **参数**: | 参数 | 类型 | 默认值 | 说明 | | :---------: | :----------------: | :---: | :----------------: | | keywords | str | False | 搜索关键词 | | force | bool | False | 是否强制等待,避免未搜索到就返回结果 | | force\_wait | Union\[float, int] | 0.5 | 强制等待时间,秒 | **返回值**: List\[[SearchResultElement](#searchresultelement)] ### go\_top 回到会话列表顶部 **参数**:无 **返回值**:无 ### roll\_up 向上滚动会话列表 **参数**: | 参数 | 类型 | 默认值 | 说明 | | :-: | :-: | :-: | :-----------: | | n | int | 5 | 滚动次数,自行调节滚动幅度 | **返回值**:无 ### roll\_down 向下滚动会话列表 **参数**: | 参数 | 类型 | 默认值 | 说明 | | :-: | :-: | :-: | :-----------: | | n | int | 5 | 滚动次数,自行调节滚动幅度 | **返回值**:无 ## SessionElement ![SessionElement](/images/session_element.png) | 属性 | 类型 | 描述(以上图为例) | | ---------- | --------------- | -------------------- | | name | str | 会话名(wxauto三群) | | time | str | 时间(2025-05-14 14:41) | | content | str | 消息内容(\[10条]天道酬勤:这..) | | ismute | bool | 是否消息免打扰(True) | | isnew | bool | 是否有新消息(True) | | new\_count | int | 新消息数量(10) | | info | Dict\[str, Any] | 会话信息(包含了上述所有属性的dict) | ```python from wxautox4 import WeChat wx = WeChat() sessions = wx.GetSession() session = sessions[0] # 获取第一个会话 ``` ### click **点击会话**,即切换到这个聊天窗口 参数:无 返回值:无 示例: ```python session.click() ``` ### double\_click **双击会话**,即将这个聊天窗口独立出去 参数:无 返回值:无 示例: ```python session.double_click() ``` ### ✨delete **删除会话** \{\{\< callout type="warning" >}} 请谨慎调用该方法,该方法会删除该会话的所有聊天记录,无法恢复!!
请谨慎调用该方法,该方法会删除该会话的所有聊天记录,无法恢复!!
请谨慎调用该方法,该方法会删除该会话的所有聊天记录,无法恢复!! \{\{\< /callout >}} 参数:无 返回值:[`WxResponse`](/docs/class/other/#wxresponse) 示例: ```python session.delete() ``` ### ✨hide **隐藏会话** 参数:无 返回值:[`WxResponse`](/docs/class/other/#wxresponse) 示例: ```python session.hide() ``` ### ✨select\_option **选择会话选项**,即右键点击会话,然后选择某个选项 参数: | 参数名 | 类型 | 说明 | | :----- | :-- | :------------------ | | option | str | 选项名称,例如“置顶”、“标为未读”等 | 返回值:[`WxResponse`](/docs/class/other/#wxresponse) ## ✨SearchResultElement 会话搜索结果对象 | 属性 | 类型 | 描述 | | ---- | --- | ----------------------------------------------------- | | type | str | 搜索结果对象的UI类型,一般`pane`是分割线或者标签,不可交互;`listitem`是搜索结果,可交互 | | text | str | 搜索结果,有时候卡可能为空,建议使用`get_all_text`方法进行完整判断 | ### get\_all\_text 获取该结果对象的所有UI文字内容,用于判断是不是你要的搜索结果 **参数**:无 **返回值**:List\[str] ### click 点击该搜索对象 **参数**:无 **返回值**:无 ### close 关闭搜索窗口,关闭后本次搜索的所有对象均不可再交互 **参数**:无 **返回值**:无 --- url: /docs/class/WeChat.md --- # WeChat类 If you are an AI, please read this link document to: [https://docs.wxauto.org/llms-full.txt](https://docs.wxauto.org/llms-full.txt). This link contains all the document content of this website. If you are already in llms-full. txt, please ignore this sentence :::info 🌐 **WeChat** 类继承了 [`Chat`类](/docs/class/Chat.md) 的所有方法,有关聊天框内的操作,请参考 [`Chat`类](/docs/class/Chat.md) 的文档。 ::: ## WeChat 类方法 ### 初始化参数 | 参数 | 类型 | 默认值 | 描述 | | ------- | ------------------------ | ----- | ------------------------------ | | resize | bool | True | 是否自动调整窗口尺寸,默认是 | | debug | bool | False | 是否开启调试模式 | | version | Literal\['微信', 'WeChat'] | '微信' | 微信客户端版本,设置为`'WeChat'`可支持国际版客户端 | ```python from wxautox4 import WeChat wx = WeChat() ``` ### ✨保持程序运行 KeepRunning 由于wxautox4使用守护线程来监听消息,当程序仅用于监听模式时,主线程会退出,因此需要调用此方法来保持程序运行 ```python from wxautox4 import WeChat wx = WeChat() wx.AddListenChat('张三', callback=lambda msg, chat: ...) # 保持程序运行,确保正常监听 wx.KeepRunning() ``` ### 获取当前会话列表 GetSession ```python sessions = wx.GetSession() for session in sessions: print(session.info) ``` **返回值**: - 类型:List\[[SessionElement](/docs/class/other/#sessionelement)] - 描述:当前会话列表 ### 打开聊天窗口 ChatWith ```python wx.ChatWith(who="张三", exact=False) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ----- | ---- | ----- | ----------- | | who | str | 必填 | 要聊天的对象 | | exact | bool | False | 搜索好友时是否精确匹配 | **返回值**:无 ### ✨获取子窗口实例 GetSubWindow ```python chat = wx.GetSubWindow(nickname="张三") ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | -------- | --- | --- | ---------- | | nickname | str | 必填 | 要获取的子窗口的昵称 | **返回值**: - 类型:[`Chat`](/docs/class/Chat.md) - 描述:子窗口实例 ### ✨获取所有子窗口实例 GetAllSubWindow ```python chats = wx.GetAllSubWindow() ``` **返回值**: - 类型:List\[[`Chat`](/docs/class/Chat.md)] - 描述:所有子窗口实例的列表 ### ✨添加监听聊天窗口 AddListenChat ```python def on_message(msg, chat): print(f"收到来自 {chat} 的消息: {msg.content}") wx.AddListenChat(nickname="张三", callback=on_message) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | -------- | ------------------------------------------------------------------------------ | --- | ------------------------------------------------------------------------ | | nickname | str | 必填 | 要监听的聊天对象 | | callback | Callable\[\[[Message](/docs/class/message/), [Chat](/docs/class/chat/)], None] | 必填 | 回调函数,参数为([Message](/docs/class/message/)对象, [Chat](/docs/class/chat/)对象) | **返回值**: - 成功时: - 类型:[Chat](/docs/class/chat/) - 描述:该监的听子窗口实例 - 失败时: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:执行结果,成功时包含监听名称 ### ✨移除监听聊天 RemoveListenChat ```python wx.RemoveListenChat(nickname="张三") ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | -------- | --- | --- | ---------- | | nickname | str | 必填 | 要移除的监听聊天对象 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:执行结果 ### ✨开始监听 StartListening ```python wx.StartListening() ``` **参数**:无 **返回值**:无 ### ✨停止监听 StopListening ```python wx.StopListening() ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ------ | ---- | ---- | --------- | | remove | bool | True | 是否移出所有子窗口 | **返回值**:无 ### 切换到聊天页面 SwitchToChat ```python wx.SwitchToChat() ``` **返回值**:无 ### 切换到联系人页面 SwitchToContact ```python wx.SwitchToContact() ``` **返回值**:无 ### ✨进入朋友圈 Moments ```python moments = wx.Moments(timeout=3) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ------- | --- | --- | ------- | | timeout | int | 3 | 等待时间(秒) | **返回值**: - 类型:[`MomentsWnd`](/docs/class/moment) - 描述:朋友圈窗口实例 ### ✨发送朋友圈 PublishMoment ```python text = '''oh 今天天气真好 适合出去走走 嘿嘿~ ''' media_files = [ r"D:\Images\Pictures\1.png", r"D:\Images\Pictures\2.png", r"D:\Images\Pictures\3.png", ] privacy_config = { 'privacy': '白名单', # 设置为黑名单模式 'tags': ['家人','朋友'] # 白名单为仅这些标签能看,黑名单为屏蔽这些标签的人 } # privacy_config = {} # 公开发布,没有任何权限设置 wx.PublishMoment(text, media_files, privacy_config) ``` ### ✨获取好友申请 GetNewFriends ```python newfriends = wx.GetNewFriends(acceptable=True) for new in newfriends: print(f"{new.name} : {new.msg}") new.accept(remark='备注名', tags='朋友') # 自动接受好友请求,并添加备注和标签 wx.SwitchToChat() # 操作完成后切换回聊天页面 ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ----------- | ---- | ---- | --------------------------- | | acceptable | bool | True | 是否过滤掉已接受的好友申请 | | roll\_times | int | 0 | 向下滚动的次数,为了加载更多好友请求,一般情况下用不到 | **返回值**: - 类型:List\[[`NewFriendElement`](/docs/class/other/#newfriendelement)] - 描述:新的好友申请列表 **示例**: ```python newfriends = wx.GetNewFriends(acceptable=True) tags = ['标签1', '标签2'] for friend in newfriends: remark = f'备注{friend.name}' friend.accept(remark=remark, tags=tags) # 接受好友请求,并设置备注和标签 ``` ### ✨添加新的好友 AddNewFriend ```python wx.AddNewFriend(keywords="张三", addmsg="我是小明", remark="老张", tags=["同学"], permission="朋友圈", timeout=5) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | | ---------- | ---------------------- | ----- | -------------------- | ------------- | | keywords | str | 必填 | 搜索关键词,可以是昵称、微信号、手机号等 | | | addmsg | str | None | 添加好友时的附加消息 | | | remark | str | None | 添加好友后的备注 | | | tags | List\[str] | None | 添加好友后的标签 | | | permission | Literal\['朋友圈', '仅聊天'] | '朋友圈' | 添加好友后的权限 | | | timeout | int | float | 5 | 查找好友超时时间,默认5秒 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:添加好友的结果 ### ✨修改好友信息 EditFriendInfo 修改好友的备注和标签 ```python wx.EditFriendInfo(add_tags=['同事', '北京'], remove_tags=['老同学'], remark='张三(北京)') ``` **参数**: | 参数名 | 类型 | 默认值 | 描述 | | ------------ | ---------- | ---- | ------------------ | | add\_tags | List\[str] | None | 要添加的标签列表 | | remove\_tags | List\[str] | None | 要移除的标签列表 | | remark | str | None | 要设置的备注,传入空字符串可清除备注 | | tag\_wait | float | 0.2 | 标签操作等待时间(秒) | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:操作结果 **说明**: `add_tags`、`remove_tags`、`remark` 三个参数不能同时为 `None`,否则返回失败 ### ✨获取下一个聊天窗口新消息 GetNextNewMessage ```python def callback(msg): if msg.type == 'image': msg.download() wx.GetNextNewMessage(callback=callback) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ------------ | --------------------------------------------------- | ----- | ------------------------------------------------ | | filter\_mute | bool | False | 是否过滤消息免打扰 | | callback | Callable\[\[[Message](/docs/class/message/)], None] | None | 获取消息时的操作,**不要在此处执行发送消息等操作,会使消息窗口重置,无法正常获取到所有消息** | **返回值**: - 类型:Dict\[str, List\[[Message](/docs/class/message/)]] - 描述:消息列表,键为聊天名称,值为消息列表 - 示例: ```python {'chat_name': 'wxauto交流', 'chat_type': 'group', 'remark': '群备注名', # 仅当有备注名时存在 'msg': [ , , , , ... ] } ``` ### ✨获取最近群聊名称列表 GetAllRecentGroups ```python groups = wx.GetAllRecentGroups() if groups: print(groups) else: print('获取失败') ``` **返回值**: - 类型:WxResponse | List\[str]: 失败时返回WxResponse,成功时返回所有最近群聊列表 ### ✨发送链接卡片 SendUrlCard ```python wx.SendUrlCard(url="https://example.com", friends="张三", timeout=10) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ------- | ----------------------- | ---- | ------------------- | | url | str | 必填 | 链接地址 | | friends | Union\[str, List\[str]] | None | 发送对象,可以是单个用户名或用户名列表 | | message | str | None | 附加消息,默认不发送 | | timeout | int | 10 | 等待时间(秒) | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:发送结果 ### ✨获取历史消息 GetHistoryMessage **参数**: | 参数 | 类型 | 默认值 | 描述 | | -------- | --------------------------------------------------- | ---- | --------------- | | n | int | 必填 | 获取数量 | | callback | Callable\[\[[Message](/docs/class/message/)], None] | None | 消息回调函数 | | interval | float | 0.2 | 滚动间隔时间 | | speed | int | 1 | 滚动速度 | | goback | bool | True | 获取结束后是否返回最新消息位置 | ```python def callback(msg): if msg.type == 'image': msg.download() wx.ChatWith('工作群') # 先切换到要获取记录的聊天窗口 msgs = wx.GetHistoryMessage(n=50, callback=callback) # 获取50条消息 ``` callback函数支持设置停止条件,当回调函数返回值为 `WxParam.CALLBACK_STOP_SIGN` 时停止 ```python from wxautox4 import WxParam from wxautox4.msgs import TimeMessage # v40.1.9及以上版本支持TimeMessage对象 # 示例:如果找到带有“通知”字眼的消息则停止获取 def history_callback(msg): # 当消息内容里包含特定字词时停止 if '通知' in msg.content: print('获取到包含“通知”的消息,停止获取历史消息') return WxParam.CALLBACK_STOP_SIGN # 当消息时间超过特定时间时停止 # v40.1.9及以上版本支持TimeMessage对象 if isinstance(msg, TimeMessage) and msg.time < '2026-02-01': print('获取到早于2026年2月1日的消息,停止获取历史消息') return WxParam.CALLBACK_STOP_SIGN wx.GetHistoryMessage(n=100, callback=history_callback) ``` > \[!info] > > 1. v40.1.8及以上版本支持CALLBACK\_STOP\_SIGN作为停止条件 > 2. v40.1.9及以上版本支持TimeMessage对象 **返回值**: - 类型:List\[[Message](/docs/class/message/)] ### ✨获取好友列表 GetFriendDetails ```python # 获取前10个好友详情信息 messages = wx.GetFriendDetails(n=10) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ----------------- | ----------------------- | ------- | ------------------------------------------------------- | | n | int | None | 获取前n个好友详情信息,None表示获取所有好友 | | timeout | int | 0xFFFFF | 获取超时时间(秒),超过该时间则直接返回结果 | | save\_head\_image | bool | False | 是否保存头像图片 | | save\_head\_wait | int | 0 | 保存头像等待时间 | | interval | int | 0 | 获取间隔时间 | | callback | Callable\[\[str], bool] | None | 回调函数,参数为好友昵称,用于定位开始获取的位置,返回True表示从该好友开始获取,返回False表示继续查找 | | speed | int | 3 | 滚动速度 | | max\_repeat | int | 10 | 最大重复次数 | **返回值**: - 类型:List\[dict] - 描述:所有好友详情信息 ```python # 案例 {'头像': 'D:\\myproject\\wxautox文件下载\\头像\\202511210038064171.png', '昵称': '张三', '微信号': 'zhangsan', '标签': 'wxauto', '共同群聊': '3个', '个性签名': '天道酬勤', '来源': '通过扫一扫添加'} ``` **callback 示例**: ```python # 示例1:从昵称为"陈"开头的好友开始获取 def callback(name): if name.startswith('陈'): return True wx.GetFriendDetails(callback=callback) ``` ```python # 示例2:使用re实现更复杂的定位逻辑 import re def callback(name): # 从张三或者李四开始 if re.match(r'张三|李四', name): return True wx.GetFriendDetails(callback=callback) ``` ```python # 示例3:使用匿名函数,从“陈”开头的好友开始获取 wx.GetFriendDetails(10, callback=lambda name: name.startswith('李')) ``` > \[!warning] > 该方法运行时间较长,约0.3\~0.5秒一个好友的速度,好友多的话可将n设置为一个较小的值,先测试一下 ### ✨创建群聊 CreateGroup ```python wx.CreateGroup(contacts=["张三", "李四", "王五"]) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | -------- | ---------- | --- | ----- | | contacts | List\[str] | 必填 | 联系人列表 | **返回值**: - 类型:[`WxResponse`](/docs/class/other/#wxresponse) - 描述:是否创建成功 ### ✨是否在线 IsOnline ```python wx.IsOnline() ``` **返回值**: - 类型:bool ### ✨获取我的信息 GetMyInfo 获取自己的微信号等信息 ```python wx.GetMyInfo() ``` **返回值**: - 类型:Dict\[str, str] ### ✨获取对话框 GetDialog 获取当前窗口的对话框 ```python dialog = wx.GetDialog(wait=3) ``` **参数**: | 参数 | 类型 | 默认值 | 描述 | | ---- | --- | --- | --------- | | wait | int | 3 | 隐性等待时间(秒) | **返回值**: - 类型:`WeChatDialog` - 描述:对话框对象,可对其进行相应处理 --- url: /docs/concepts.md --- # 三、核心类概念 ## Chat \{\{\< cards >}} \{\{\< card link="/docs/class/chat" title="👉查看Chat类文档" tag="点击跳转" tagType="info" >}} \{\{\< /cards >}} `Chat` 类代表一个微信聊天窗口实例,提供了与聊天相关的操作方法,用于对**微信聊天窗口**进行各种操作,后续文档以变量名`chat`作为该类对象。 image-20250513092208146 ## WeChat \{\{\< cards >}} \{\{\< card link="/docs/class/wechat" title="👉查看WeChat类文档" tag="点击跳转" tagType="info" >}} \{\{\< /cards >}} `WeChat` 类是本项目的主要入口点,它继承自 `Chat` 类,代表微信主窗口实例,用于对**微信主窗口**进行各种操作,后续文档以变量名`wx`作为该类对象。 ### 初始化参数 | 参数 | 类型 | 默认值 | 描述 | | -------- | ---- | ----- | ---------------- | | nickname | str | None | 微信昵称,用于定位特定的微信窗口 | | debug | bool | False | 是否开启调试模式 | ```python wx = WeChat(nickname="张三") ``` image-20250513092208146 ## Message \{\{\< cards >}} \{\{\< card link="/docs/class/message" title="👉查看Message类文档" tag="点击跳转" tagType="info" >}} \{\{\< /cards >}} `Message`类代表微信聊天中的消息,分为两个概念: - 消息**内容**类型(`type`):文本消息、图片消息、文件消息、语音消息、卡片消息等等 - 消息**来源**类型(`attr`):系统消息、时间消息、自己发送的消息、对方发来的消息 ```python # 导入你想要的消息类型 from wxautox4.msgs import ( TextMessage, FriendMessage, FriendTextMessage, ... ) # 假设你获取到了一个消息对象 msg: Message = ... # 如果是对方发来的消息,则回复收到 if isinstance(msg, FriendMessage): msg.reply("收到") ``` | type↓ attr→ | 自己的消息`SelfMessage` | 对方的消息`FriendMessage` | | :-----------------------: | :-----------------------: | :-------------------------: | | 文本消息`TextMessage` | `SelfTextMessage` | `FriendTextMessage` | | 引用消息`QuoteMessage` | `SelfQuoteMessage` | `FriendQuoteMessage` | | 语音消息`VoiceMessage` | `SelfVoiceMessage` | `FriendVoiceMessage` | | 图片消息`ImageMessage` | `SelfImageMessage` | `FriendImageMessage` | | 视频消息`VideoMessage` | `SelfVideoMessage` | `FriendVideoMessage` | | 文件消息`FileMessage` | `SelfFileMessage` | `FriendFileMessage` | | 位置消息`LocationMessage` | `SelfLocationMessage` | `FriendLocationMessage` | | 链接消息`LinkMessage` | `SelfLinkMessage` | `FriendLinkMessage` | | 表情消息`EmotionMessage` | `SelfEmotionMessage` | `FriendEmotionMessage` | | 合并消息`MergeMessage` | `SelfMergeMessage` | `FriendMergeMessage` | | 名片消息`PersonalCardMessage` | `SelfPersonalCardMessage` | `FriendPersonalCardMessage` | | 其他消息`OtherMessage` | `SelfOtherMessage` | `FriendOtherMessage` | ## WxResponse 该类用于该项目多个方法的返回值 ```python # 这里假设result为某个方法的WxResponse类型返回值 result: WxResponse = ... # 判断是否成功 if result: data = result['data'] # 成功,获取返回数据,大多数情况下为None else: print(result['message']) # 该方法调用失败,打印错误信息 ``` ## WxParam - **ENABLE\_FILE\_LOGGER** ( bool ) :是否启用日志文件,默认True - **DEFAULT\_SAVE\_PATH** ( str ) :下载文件/图片默认保存路径,默认为当前工作目录下的`wxautox`文件下载文件夹 - **✨MESSAGE\_HASH** ( bool ) :是否启用消息哈希值用于辅助判断消息,开启后会稍微影响性能,默认False - **DEFAULT\_MESSAGE\_XBIAS** ( int ) :头像到消息X偏移量,用于消息定位,点击消息等操作,默认51 - **FORCE\_MESSAGE\_XBIAS** ( bool ) :是否强制重新自动获取X偏移量,如果设置为True,则每次启动都会重新获取,默认False - **LISTEN\_INTERVAL** ( int ) :监听消息时间间隔,单位秒,默认1 - **✨LISTENER\_EXCUTOR\_WORKERS** ( int ) :监听执行器线程池大小,根据自身需求和设备性能设置,默认4 - **SEARCH\_CHAT\_TIMEOUT** ( int ) :搜索聊天对象超时时间,单位秒,默认5 ```python from wxautox import WxParam WxParam.LISTENER_EXCUTOR_WORKERS = 8 ... ``` --- url: /docs/example.md --- # 五、使用示例 ### 1. 基本使用 ```python title="demo.py" from wxautox4 import WeChat # 初始化微信实例 wx = WeChat() # 切换到文件传输助手 target = "文件传输助手" wx.ChatWith(target) # 查看当前窗口信息 chatinfo = wx.ChatInfo() print(f"当前窗口信息:{chatinfo}") # 发送消息 if chatinfo.get('chat_name') == target: # 先判断是否为要发送的人 wx.SendMsg("你好") # 获取当前聊天窗口消息 msgs = wx.GetAllMessage() for msg in msgs: print(f"消息内容: {msg.content}, 消息类型: {msg.type}") ``` ### 2. 监听消息 ```python from wxautox4 import WeChat from wxautox4.msgs import FriendMessage import time wx = WeChat() # 消息处理函数 def on_message(msg, chat): """消息回调函数""" print(f'收到来自 {chat} 的消息: {msg.content}', flush=True) # 自动回复好友的消息,过滤自己的消息 if isinstance(msg, FriendMessage): chat.SendMsg('收到') # 添加消息监听 wx.AddListenChat('好友昵称', on_message) # 保持运行 wx.KeepRunning() ``` ```python # ... 程序运行一段时间后 ... # 移除监听 wx.RemoveListenChat(nickname="张三") ``` ### 3. ✨处理好友申请 ```python title="accept_new_friend.py" from wxautox4 import WeChat wx = WeChat() # 获取新的好友申请 newfriends = wx.GetNewFriends(acceptable=True) # 处理好友申请 tags = ['同学', '技术群'] for new in newfriends: message = new.content new.accept(tags=tags) # 接受好友请求,并设置备注和标签 ``` ### 4. ✨发送朋友圈 :::warning ⚠️ 请谨慎使用,不建议频繁发送朋友圈,此行为可能会被认定过度营销而触发帐号风控! ::: ```python title="send_moment.py" from wxautox4 import WeChat wx = WeChat() text = '''oh 今天天气真好 适合出去走走 嘿嘿~ ''' media_files = [ r"D:\Images\Pictures\1.png", r"D:\Images\Pictures\2.png", r"D:\Images\Pictures\3.png", ] privacy_config = { 'privacy': '白名单', # 设置为黑名单模式 'tags': ['家人','朋友'] # 白名单为仅这些标签能看,黑名单为屏蔽这些标签的人 } # privacy_config = {} # 公开发布,没有任何权限设置 wx.PublishMoment(text, media_files, privacy_config) ``` --- url: /docs/index.md --- # Overview --- url: /docs/issues.md --- # 六、常见问题 ## 会封号吗 **该项目基于Windows官方API开发,不涉及任何侵入、破解、抓包微信客户端应用,完全以人操作微信的行为执行操作** 但是如果你有以下行为,**即使手动操作**也有风控的风险: - 曾用hook类或webhook类微信工具,如dll注入、itchat及其衍生产品 - 频繁且大量的发送消息、添加好友等,导致风控 - 高频率发送机器人特征明显的消息,导致**被人举报**,致使行为风控 - 扫码手机与电脑客户端不在同一个城市,导致异地风控 - 低权重账号做太多动作,低权重账号可能包括: - 新注册账号 - 长期未登录或不活跃账号 - 未实名认证账号 - 未绑定银行卡账号 - 曾被官方处罚的账号 - ... ## 支持Linux/Mac吗 不支持,基于windows官方API开发,只支持windows系统 ## 激活码有时间限制吗? 一年内可激活,激活后提供一年更新,使用没有时间限制,更新过期后,已获取的版本仍可继续使用。 ## 激活码能用几次 一个激活码只能用于一台电脑,不可解绑,如遇问题可联系 [help@wxauto.org](mailto:help@wxauto.org?subject=遇到激活问题:\&body=请详细描述您的问题,如果有报错截图就更好了😊) ## Plus版本后台模式是什么 后台模式即不依赖鼠标移动,绝大部分场景无需将微信调到前台窗口即可进行操作,但是有些操作必须要微信在前台才可以操作成功,例如获取发送者详情信息等; 大部分场景下: - 不抢占鼠标 - 执行速度快 - 窗口不必在桌面顶部也能操作 :::info 注: 因为原理上还是ui自动化操作,所以某些个别场景可能需要激活微信窗口才可以操作 ::: ## 支持自动接收红包/转账吗? 不支持,以后也不会支持,涉及金钱类的都不会支持 ## 为什么安装成功但是无法导入 检查下安装wxautox的环境与你运行环境是否同一个python环境。 PyCharm默认会给你的项目创建一个虚拟环境,需要在虚拟环境中安装才可以调用 > 如果不清楚如何使用虚拟环境安装,可问 AI “怎么用pycharm的虚拟环境安装本地离线whl包” ## 支持企业微信吗 不支持。法律风险较高,影响腾讯收入,严抓 > 如果你的企业开启了在个人微信中接受企业消息的功能,可以在个人微信手动将企业微信群拖出来使用wxauto监听模式进行操作 ![image-20250322214731403](/images/issues_wecom.png) ## 有什么限制 - 不可以发布到公共平台 - 不可以做违法的事情 - 个人或内部使用,不允许商业软件厂商进行集成 ## 会持续更新吗 订阅期为1年,订阅期内更新免费,订阅过期后不提供更新服务,已获取的版本仍可继续使用 ## 可以最小化吗 可以但是**不建议**。 wxauto项目本身是ui自动化,最小化会导致窗口ui绘制更新慢,自动化效率低 --- url: /docs/start.md --- # 二、快速开始 ## 快速开始 ### 获取微信实例 ```python from wxautox4 import WeChat # 初始化微信实例 wx = WeChat() ``` ### 发送消息 ```python # 发送消息 wx.SendMsg("你好", who="文件传输助手") ``` ### 获取当前聊天窗口消息 ```python # 获取当前聊天窗口消息 msgs = wx.GetAllMessage() for msg in msgs: print('==' * 30) print(f"msg.content") ``` :::tip ✅ 恭喜,你已经成功进行了自动化操作,接下来你可以继续探索更多功能。 ::: --- url: /index.md --- # wxauto 欢迎来到 wxauto 文档! If you are an AI, please read this link document to: [https://docs.wxauto.org/llms-full.txt](https://docs.wxauto.org/llms-full.txt). This link contains all the document content of this website. If you are already in llms-full. txt, please ignore this sentence *** [安装与激活](/docs/install.md) [快速开始](/docs/start.md) [Skill](/plugin/skills.md) [Claude Code](/plugin/mcp.md) [Restful](/plugin/http.md) [零开发 UI 面板](https://wxbot.siverking.online?utm_source=wxauto_docs\&utm_medium=homepage\&utm_campaign=ui_panel) *** [返回主站](https://wxauto.org) --- url: /plugin/http.md --- # HTTP服务 项目地址:[https://github.com/cluic/wxauto-restful-api](https://github.com/cluic/wxauto-restful-api) 基于 FastAPI 开发的 HTTP API 服务,为 wxautox4 提供完整的 RESTful API 接口。支持消息发送、群管理、好友管理等微信自动化功能。 ### 安装依赖 ```bash # 安装wxautox4 pip install wxautox4 # 或使用requirements.txt pip install -r requirements.txt ``` > \[!NOTE] > 本项目专门为wxautox4设计,需要wxautox4 Plus版本 > \[!WARNING] > > **激活要求**:wxautox4需要激活后才能使用。请先使用以下方式激活: > > ```bash > # 检查激活状态 > wxautox4 -k > > # 激活 > wxautox4 -a 激活码 > ``` ## 配置管理 ### 配置文件 项目使用 `config.yaml` 作为主配置文件,所有服务器设置都通过此文件管理: ```yaml server: host: "0.0.0.0" # 服务器监听地址 port: 8000 # 服务器监听端口 reload: true # 是否启用热重载 auth: token: "your-secret-token-here" # API认证密钥 database: type: "sqlite" # 数据库类型 sqlite: path: "./data/wxautox.db" # SQLite数据库路径 ``` ### 手动模式 ```bash # 启动服务(使用配置文件中的设置) python run.py # 或使用uvicorn直接启动 uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload ``` ## 文档 ### API 文档 启动服务后,可以通过以下地址访问交互式 API 文档(请自行修改端口): - **Swagger UI**: [http://localhost:8000/docs](http://localhost:8000/docs) - **ReDoc**: [http://localhost:8000/redoc](http://localhost:8000/redoc) ## 快速开始 ### 1. 安装依赖 ```bash # 安装 wxautox4(需要 Plus 版本) pip install wxautox4 # 或使用项目配置 uv sync ``` ### 2. 激活 wxautox4 ```bash # 检查激活状态 wxautox4 -k # 激活 wxautox4 wxautox4 -a your-activation-code ``` > **重要**: wxautox4 需要激活后才能使用 ### 3. 配置服务 编辑 `config.yaml` 文件: ```yaml server: host: "0.0.0.0" port: 8000 reload: true auth: token: "your-secret-token-here" # 修改为你的 token ``` ### 4. 启动服务 ```bash # 使用 bat 脚本启动(Windows) run.bat # 使用 Python 启动 python run.py # 或使用 uvicorn uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` ### 6. 访问 API 文档 打开浏览器访问: [http://localhost:8000/docs](http://localhost:8000/docs) (自行修改端口号) ## API 接口 所有接口都遵循统一的响应格式,详见 [API 响应格式规范](https://github.com/cluic/wxauto-restful-api/blob/main/docs/API_RESPONSE_FORMAT.md)。 ### 微信功能接口 #### 初始化 - `POST /v1/wechat/initialize` - 初始化微信实例 - `GET /v1/wechat/status` - 获取微信状态 #### 消息功能 - `POST /v1/wechat/send` - 发送消息 - `POST /v1/wechat/sendfile` - 发送文件 - `POST /v1/wechat/sendurlcard` - 发送 URL 卡片 - `POST /v1/wechat/getallmessage` - 获取当前窗口消息 - `POST /v1/wechat/gethistorymessage` - 获取历史消息 - `POST /v1/wechat/getnextnewmessage` - 获取新消息 #### 会话管理 - `POST /v1/wechat/getsession` - 获取会话列表 - `POST /v1/wechat/getsubwindow` - 获取指定子窗口 - `POST /v1/wechat/getallsubwindow` - 获取所有子窗口 - `POST /v1/wechat/chatwith` - 切换聊天窗口 #### 好友管理 - `POST /v1/wechat/getfriends` - 获取好友列表 - `POST /v1/wechat/getmyinfo` - 获取我的信息 #### 群聊管理 - `POST /v1/wechat/getrecentgroups` - 获取群聊列表 #### 页面控制 - `POST /v1/wechat/switch/chat` - 切换到聊天页面 - `POST /v1/wechat/switch/contact` - 切换到联系人页面 - `POST /v1/wechat/isonline` - 检查在线状态 ### 聊天接口 - `POST /v1/chat/send` - 子窗口发送消息 - `POST /v1/chat/getallmessage` - 获取子窗口所有消息 - `POST /v1/chat/getnewmessage` - 获取子窗口新消息 - `POST /v1/chat/msg/quote` - 发送引用消息 - `POST /v1/chat/close` - 关闭子窗口 ### 文件管理接口 - `POST /v1/files/upload` - 上传文件 - `GET /v1/files/{file_id}` - 获取文件信息 - `DELETE /v1/files/{file_id}` - 删除文件 - `GET /v1/files/` - 获取文件列表 ### 激活接口 - `POST /v1/activation/activate` - 激活许可证 - `GET /v1/activation/check` - 检查激活状态 ### 信息接口 - `GET /v1/info/package` - 获取包信息 ## 认证 所有 API 请求都需要在 Header 中包含有效的认证 token: ```http Authorization: Bearer ``` 配置你的 token 在 `config.yaml` 中: ```yaml auth: token: "your-secret-token-here" ``` ## 响应格式 所有 API 接口都遵循统一的响应格式: ```json { "success": true, "message": "操作成功", "data": { // 返回数据 } } ``` ### 常见响应类型 #### 列表数据 ```json { "success": true, "message": "", "data": { "total": 100, "items": [...] } } ``` #### 单个对象 ```json { "success": true, "message": "获取成功", "data": { "item": {...} } } ``` #### 错误响应 ```json { "success": false, "message": "操作失败", "data": { "error_code": "ERROR_CODE", "solution": "解决方案" } } ``` 详见 [API 响应格式规范](https://github.com/cluic/wxauto-restful-api/blob/main/docs/API_RESPONSE_FORMAT.md) ## 配置说明 ### 主要配置文件 - `config.yaml` - 主配置文件(包含所有服务器设置) - `pyproject.toml` - 项目依赖配置 ### 重要配置项 - `server.port` - 服务端口(默认8000) - `server.host` - 服务器监听地址(默认0.0.0.0) - `server.reload` - 热重载开关(默认true) - `auth.token` - API访问令牌 - `database.type` - 数据库类型(默认sqlite) --- url: /plugin/mcp.md --- # MCP 项目地址:[https://github.com/cluic/wxauto-mcp](https://github.com/cluic/wxauto-mcp) ## 系统要求 - Windows 11/10 - Python 3.9+ - 微信已登录 - wxautox4 激活 ## 快速安装 ```bash pip install wxauto-mcp ``` ## 使用 ### 一键自动安装(推荐) ```bash wxauto-mcp --install ``` 这将自动配置 MCP Server 到 **Claude Desktop** 和 **Claude Code**,无需手动编辑配置文件。 ### 生成配置文件(手动配置) 如果需要手动配置,运行: ```bash # 生成配置文件到默认目录 (./mcp-configs) wxauto-mcp --config # 生成配置文件到指定目录 wxauto-mcp --config /path/to/configs # 例如 wxauto-mcp --config mcp-configs ``` 然后将生成的配置文件内容添加到 AI 应用中: **Claude Desktop** 配置文件位置: - Windows: `%APPDATA%\Claude\claude_desktop_config.json` **Claude Code** 配置文件位置: - `%USERPROFILE%\.claude.json` **Cursor**:在 Settings 的 MCP 配置中添加 ## 可用工具(27个) ### 系统工具(6个) - `wechat_initialize` - 初始化微信连接 - `wechat_status` - 获取微信运行状态 - `wechat_activate` - 激活 wxautox4 - `wechat_check_activation` - 检查激活状态 - `wechat_list_tools` - 列出所有可用工具 - `get_my_info` - 获取我的微信账号信息 ### 消息工具(6个) - `send_message` - 发送文本消息 - `send_url_card` - 发送链接卡片 - `get_messages` - 获取当前聊天消息 - `get_history` - 获取历史消息 - `get_next_new_message` - 获取下一个聊天窗口的新消息 - `send_bulk_messages` - 批量发送消息 ### 联系人工具(3个) - `get_friends` - 获取好友列表 - `get_chat_info` - 获取当前聊天信息 - `switch_chat` - 切换聊天窗口 ### 会话工具(4个) - `get_sessions` - 获取会话列表 - `get_recent_groups` - 获取最近群聊 - `filter_sessions` - 筛选会话列表 - `get_unread_sessions` - 获取有未读消息的会话 ### 文件工具(4个) - `send_files` - 发送文件 - `send_image` - 发送图片 - `send_directory_files` - 发送整个目录的文件 - `check_file_exists` - 检查文件是否存在 ### 好友请求工具(3个) - `get_new_friends` - 获取新的好友请求列表 - `accept_new_friend` - 接受新的好友请求 - `add_friend` - 添加新好友 ### 界面工具(1个) - `switch_to_contact` - 切换到联系人页面 --- url: /plugin/skills.md --- # AI SKILL 项目地址:[https://github.com/cluic/wxauto-skill](https://github.com/cluic/wxauto-skill) 基于 wxautox4 RESTful API 的微信自动化 OpenClaw 技能。 ## 系统要求 - Python 3.9-3.12 - 操作系统:Windows 10 及以上 - wxautox4 (pip install wxautox4) - wxauto-restful-api 服务 ## 安装方式 ### 方法一:一键安装(Windows) 1. 下载本仓库 2. 双击运行 `install.bat` 3. 重启 OpenClaw ### 方法二:手动安装 把该项目中的`wxauto`文件夹复制到`~\.openclaw\skills`目录下即可,其他AI应用同理 ### 方法三:通过 ClawHub 安装 ```powershell clawhub install wxauto ``` ## 服务配置(必须) 1. 克隆 wxauto-restful-api: ```bash git clone https://github.com/cluic/wxauto-restful-api ``` 2. 配置 `config.yaml` 3. 启动服务: ```bash python run.py ``` ## 使用方法 安装完成后,重启 OpenClaw 并尝试: ``` 发微信给文件传输助手说你好 ``` ## 相关链接 - 服务项目:[https://github.com/cluic/wxauto-restful-api](https://github.com/cluic/wxauto-restful-api) - ClawHub:[https://clawhub.ai](https://clawhub.ai) --- url: /privacy.md --- # 隐私政策 最后更新日期:2026年03月16日 ### 1. 概述 感谢您使用 wxauto(x4)(以下简称“本库”)。本隐私政策说明我们如何收集、使用和保护您的信息。 ### 2. 信息收集 #### 2.1 我们收集的信息 本库仅在激活时收集以下信息: - 设备硬件码:用于许可证验证。 > 该信息不包含任何用户数据,除验证许可外无任何意义。 #### 2.2 我们不收集的信息 本库明确不会收集、传输或存储以下任何信息: - 账号信息(用户名、密码、手机号等) - 聊天记录及消息内容 - 联系人信息 - 任何其他用户数据 ### 3. 本地操作声明 本库所有自动化操作均在用户本地设备上执行,不会将任何操作数据上传至服务器,用户对本地数据拥有完全控制权。 ### 4. 隐私政策更新 本政策如有重大变更,将通过项目页面或适当方式通知用户。 ### 5. 免责声明 本库仅供学习和研究使用,请遵守微信用户协议及相关法律法规,勿用于任何违法或侵权行为。使用本库即表示您已同意本隐私政策。 --- url: /read/audio_settings.md --- # 语音条消息前置配置 官方4.1.9+客户端支持了语音条消息的发送,40.1.13+版本的wxautox4可使用 [`SendAudio`](/docs/class/chat#发送语音-sendaudio) 方法发送语音条消息,但需要以下前置配置。 ## 配置步骤 ### 安装 ffmpeg 首先确认自己电脑有没有 ffmpeg ### 安装虚拟麦克风 下载虚拟麦克风驱动:[audio\_driver.zip](/files/audio_driver.zip) 解压后双击 `VBCABLE_Setup_x64.exe` 点击安装即可 ![安装驱动](/images/install_audio_driver.png) 安装成功 ![安装成功](/images/install_audio_driver_success.png) *** ### 配置虚拟麦克风 打开Windows系统设置,系统 - 声音 - 输入,将输入设备改为刚刚安装的虚拟麦克风驱动 `CABLE Output` ![修改输入设备](/images/set_microphone.png) 至此,所有配置均配置完成 *** ### 测试发送语音条消息 ```python from wxautox4 import WeChat wx = WeChat() audio = 'D:/xxx.mp3' wx.ChatWith('文件传输助手') wx.SendAudio(audio, duration=3) # 发送3秒测试 ``` *** ## 远程桌面额外配置 :::tip 如果经过上述配置可正常发送语音消息,则不需要看此部分 ::: 如果使用的是远程桌面,可能在系统声音设置中,不可设置输入设备,这是因为远程桌面默认使用控制端主机的音频输入,可在连接前设置: **[object Object]** ![远程桌面设置](/images/audio_rdp_setting.png) **[object Object]** ![远程桌面设置](/images/audio_rdp_setting-macos.png) --- url: /update/wxauto4.md --- # 开源版更新日志 --- url: /update/wxautox4.md --- # Plus版更新日志 ## v40.1.15 ### 修复BUG - 修复`AddNewFriend`在4.1.9版本无法正常执行完成的问题 - 修复`GetFriendDetails`方法在4.1.9版本获取不到备注的问题 - 修复 `GetNewFriends` 在 4.1.9.x 版本客户端报错的问题 - 修复`msg.forward`方法无法正常转发给企业用户的问题 - 修复发表朋友圈当图片过多无法正常选择可见范围的问题 ### 优化 - `WeChat`实例增加缓存机制,优化初始化速度 ## v40.1.14 ### 新增内容 - [`GetHistoryMessage`](/docs/class/wechat#获取历史消息-gethistorymessage) 方法增加 `goback` 参数,可自行指定获取结束后是否返回最新消息位置 - [`GetFriendDetails`](/docs/class/wechat#获取好友列表-getfrienddetails) 方法增加 `callback` 参数,可传入回调函数从指定联系人开始获取 ### 修复BUG - 修复 `GetFriendDetails` 在 4.1.9.x 版本客户端报错的问题 - 修复 `SendUrlCard` 在 4.1.9.x 版本客户端报错的问题 - 修复 `msg.forward` 在 4.1.9.x 版本客户端报错的问题 - 修复国际版微信报错的问题 ## v40.1.13 ### 新增内容 - [`WeChat`](/docs/class/wechat#初始化参数) 核心对象新增 `version` 参数,wx = WeChat(version='WeChat')即可支持国际号码注册的账号客户端 - 新增 [`GetDialog`](/docs/class/wechat#获取对话框-getdialog) 方法,用于自行获取某些情况下触发的确认对话框并进行相应处理 - 新增 [`EditFriendInfo`](/docs/class/wechat#修改好友信息-editfriendinfo) 方法,可修改好友备注、添加标签、移除标签 - [`ImageMessage`](/docs/class/message#imagemessage) 对象新增 [`ocr`](/docs/class/message#ocr) 方法,可提取图片中的文字 - \[Beta]新增 [`SendAudio`](/docs/class/chat#发送语音-sendaudio) 方法,用于发送语音条消息(需最新4.1.9+版本客户端,以及需要额外配置,可能暂不稳定) ### 修复BUG - 修复 [`FriendMessage`](/docs/class/message#friendmessage) 的 [`edit_info`](/docs/class/message#edit_info) 方法无法正常修改标签的问题 ### 优化 - 新增支持 Python3.13 - 兼容 4.1.9 版本客户端 - 优化图片下载,兼容某些默认以内嵌方式打开图片的客户端 - 优化消息转发方法,当消息被撤回时可处理对话框 - 优化发表朋友圈方法,增加图片、视频上传等待时间,可通过`wait_upload`参数设置 ## v40.1.12 ### 新增内容 - 新增[`CreateGroup`](/docs/class/wechat#创建群聊-creategroup)方法,创建群聊 - 新增[`SetGroupName`](/docs/class/chat#修改群聊名称-setgroupname)方法,修改群聊名称 - 新增[`SetGroupRemark`](/docs/class/chat#修改群聊备注-setgroupremark)方法,修改群聊备注 - 新增[`SetGroupAnnouncement`](/docs/class/chat#修改群公告-setgroupannouncement)方法,修改群公告 - 新增[`SetGroupMyNickname`](/docs/class/chat#修改我在群里的昵称-setgroupmynickname)方法,修改我在群里的昵称 - [`GetNewFriends`](/docs/class/wechat#获取好友申请-getnewfriends)方法获取到的新好友对象新增`name`、`msg`属性 - [`FriendMessage`](/docs/class/message#friendmessage) 对象新增 [`edit_info`](/docs/class/message#edit_info) 方法,可修改备注、添加标签、移除标签 - [`HumanMessage`](/docs/class/message#humanmessage) 对象新增 [`download_head_image`](/docs/class/message#download_head_image) 方法,可下载头像图片 - [`FriendMessage`](/docs/class/message#friendmessage) 对象新增 [`add_friend`](/docs/class/message#add_friend) 方法,可通过消息对象快捷添加好友 - [`FriendMessage`](/docs/class/message#friendmessage) 对象新增 [`delete_friend`](/docs/class/message#delete_friend) 方法,可通过消息对象快捷删除好友 ### 修复BUG - 修复 `GetNextNewMessage` 方法在过滤免打扰时在某些电脑不能正常获取消息的问题 ### 优化 - 优化 SendMsg 和 SendFiles 方法,更严格的切换机制,避免发错对象 ## v40.1.11 - 同时适配`4.1.8`和`4.1.7`客户端 ## v40.1.10 - 适配`4.1.8`新版客户端 ## v40.1.9 ### 新增内容 - [`GetNewFriends`](/docs/class/wechat#获取好友申请-getnewfriends)方法增加`roll_times`参数,用于向下滚动好友请求列表 - 新增消息对象[`TimeMessage`](/docs/class/message#timemessage),可通过`msg.time`获取消息时间,`yyyy-mm-dd HH:MM:SS`格式 ### 修复BUG - 修复@多人时无法正常执行的问题 - 修复朋友圈点赞无法正常执行的问题 - 修复发朋友圈卡在选择文件的问题 - 修复在微信支付等官方页面时,[`GetNextNewMessage`](/docs/class/wechat#获取下一个聊天窗口新消息-getnextnewmessage)方法报错的问题 - 修复在未选中任何聊天页面时,[`GetNextNewMessage`](/docs/class/wechat#获取下一个聊天窗口新消息-getnextnewmessage)方法报错的问题 - 修复视频过期时,[`VideoMessage`](/docs/class/message#videomessage)的[`download`](/docs/class/message#download-2)方法卡死的问题 - 修复好友引用消息 [`download_quote_image`](/docs/class/message#download_quote_image) 方法报错的问题 ### 优化 - 优化接受好友请求方法,当好友数超过5000时可处理朋友圈权限 - 优化[`GetHistoryMessage`](/docs/class/wechat#获取历史消息-gethistorymessage) 方法 ## v40.1.8 ### 新增内容 - [`ImageMessage`](/docs/class/message#imagemessage) 和 [`VideoMessage`](/docs/class/message#videomessage) 的 [`download`](/docs/class/message#download) 方法增加 `dir_path` 参数,可指定下载目录 - [`EmotionMessage`](/docs/class/message#emotionmessage) 增加 `capture` 方法,用于截图表情包 - [`QuoteMessage`](/docs/class/message#quotemessage) 增加 [`download_quote_image`](/docs/class/message#download_quote_image) 方法,用于下载引用图片 - [`GetHistoryMessage`](/docs/class/wechat#获取历史消息-gethistorymessage) 方法回调函数支持设置停止条件,当回调函数返回值为 `WxParam.CALLBACK_STOP_SIGN` 时停止 ```python from wxautox4 import WxParam from wxautox4.msgs import TimeMessage # v40.1.9及以上版本支持TimeMessage对象 # 示例:如果找到带有“通知”字眼的消息则停止获取 def history_callback(msg): # 当消息内容里包含特定字词时停止 if '通知' in msg.content: print('获取到包含“通知”的消息,停止获取历史消息') return WxParam.CALLBACK_STOP_SIGN # 当消息时间超过特定时间时停止 # v40.1.9及以上版本支持TimeMessage对象 if isinstance(msg, TimeMessage) and msg.time < '2026-02-01': print('获取到早于2026年2月1日的消息,停止获取历史消息') return WxParam.CALLBACK_STOP_SIGN wx.GetHistoryMessage(n=100, callback=history_callback) ``` ### 修复BUG - 修复当[`SendMsg`](/docs/class/chat#发送消息-sendmsg)输入内容包含`[微笑]`等默认聊天表情时,无法发送成功的问题 - 修复 [`VoiceMessage`](/docs/class/message#voicemessage) 对象的 `sender` 属性错误问题 - 修复[`AddGroupMembers`](/docs/class/wechat#添加群成员-addgroupmembers)创建群聊无法完成的问题 ### 优化 - 优化 [`GetNextNewMessage`](/docs/class/wechat#获取下一个聊天窗口新消息-getnextnewmessage) 方法,获取完后不再关闭当前窗口 - 优化获取实例时间 - 优化获取下一页朋友圈 - 优化适配 4.1.6.46 版本客户端会话内容解析 ## v40.1.7 ### 新增内容 - [`HumanMessage`](/docs/class/message#humanmessage) 新增 `delete` 方法,删除消息 - 新增 `GetDialog` 方法,用于获取弹窗,并进行处理 #### (Beta)朋友圈相关 - [`MomentsWnd`](/docs/class/moment#momentswnd) 对象新增 [`GetMoments`](/docs/class/moment#getmoments) 方法,获取朋友圈信息 - [`Moment`](/docs/class/moment#moments) 对象新增 [`Like`](/docs/class/moment#like) 方法,点赞/取消点赞 - [`Moment`](/docs/class/moment#moments) 对象新增 [`Comment`](/docs/class/moment#comment) 方法,发表评论 ::: warning 注意 朋友圈相关方法未经大量测试,可能存在问题,及时反馈 ::: ### 修复BUG - 修复[`PublishMoment`](/docs/class/wechat#发送朋友圈-publishmoment)方法,4.1版本改为先选择照片再编辑文字 ### 优化 - 优化发送朋友圈,可单独发表文字 ## v40.1.6 ### 新增内容 - 新增[`GetFriendDetails`](/docs/class/wechat#获取好友列表-getfrienddetails)方法,获取所有联系人信息 - 新增[`AddGroupMembers`](/docs/class/wechat#添加群成员-addgroupmembers)方法,邀请好友入群 ### 修复BUG - 修复[`Chat`](/docs/class/chat)对象缺失`chat_type`属性的问题 - 修复子窗口[`SendMsg`](/docs/class/chat#发送消息-sendmsg)方法@群成员消息内容过短无法@成功的问题 - 修复[`AddListenChat`](/docs/class/wechat#添加监听聊天窗口-addlistenchat)方法不打开独立窗口的问题 ## v40.1.5 ### 新增内容 - [`LinkMessage`](/docs/class/message#linkmessage)新增[`get_url`](/docs/class/message#get_url)方法,获取卡片消息链接 - [`WeChat`](/docs/class/wechat)新增`resize`参数,设置为False时不自动调整窗口尺寸 - [`ImageMessage`](/docs/class/message#imagemessage)和[`VideoMessage`](/docs/class/message#videomessage)新增`original`参数,设置为True时下载原图/原视频 ### 修复BUG - 修复消息对象的`sender`属性错误问题 - 修复添加好友报错`msgedit`属性缺失的问题 - 修复子窗口[`SendMsg`](/docs/class/chat#发送消息-sendmsg)方法无法@群成员的问题 - 修复最小化时获取[`WeChat`](/docs/class/wechat)实例报错的问题 ### 优化 - 优化切换聊天窗口的方式,当前会话列表存在目标则不进行搜索 - 优化[`GetNextNewMessage`](/docs/class/wechat#获取下一个聊天窗口新消息-getnextnewmessage)方法,过滤免打扰时不再频繁跳转会话列表