wxauto调用文档(适用微信版本v3.9.×.×)

wxauto调用文档(适用微信版本v3.9.×.×)

  • 一、版本对比
  • 二、安装wxauto
  • 三、使用文档
    • 1、获取所有好友详情信息`wx.GetFriendDetails`
    • 2、获取聊天对象名和新消息条数(还未跑通)`wx.GetSessionAmont`
    • 3、是否有新消息`wx.CheckNewMessage`
    • 4、获取下一个新消息`wx.GetNextNewMessage`
    • 5、获取所有新消息`wx.GetAllNewMessage`
    • 6、获取当前聊天列表中的所有聊天对象(是否只获取有新消息的聊天对象)`wx.GetSessionList`
    • 7、获取当前聊天列表中的所有聊天对象`wx.GetSession`
    • 8、打开某个聊天框`wx.ChatWith`
    • 9、@所有人`wx.AtAll`
    • 10、发送文本消息`wx.SendMsg`
    • 11、向当前聊天窗口发送文件`wx.SendFiles`
    • 12、获取当前窗口中加载的所有聊天记录`wx.GetAllMessage`
    • 13、加载当前聊天页面更多聊天信息`wx.LoadMoreMessage`
    • 14、获取当前聊天对象名`wx.CurrentChat`
    • 15、获取新的好友申请列表`wx.GetNewFriends`
    • 16、添加监听对象`wx.AddListenChat`
    • 17、获取监听对象的新消息`wx.GetListenMessage`
    • 18、切换到通讯录页面`wx.SwitchToContact`
    • 19、切换到聊天页面`wx.SwitchToChat`
    • 20、获取当前聊天群成员`wx.GetGroupMembers`
    • 21、获取所有好友列表`wx.GetAllFriends`
    • 22、获取所有监听对象`wx.GetAllListenChat`
    • 23、移除监听对象`wx.RemoveListenChat`
    • 24、添加新的好友`wx.AddNewFriend`
  • 四、使用案例
    • 1. 监听指定群或好友消息并回复
    • 2. 监听所有未被屏蔽的新消息
    • 3. 消息监听与捕获
    • 4.监听过程退出
  • 五、云服务器部署
  • 六、参考
  • 七、免责声明

一、版本对比

本项目目前默认分支为微信3.9.8.15版本,使用前请先检查自己电脑微信是否为该版本,版本不同可能由于UI问题导致某些功能无法正常调用。

注:如果你的微信版本可以用的话,也不需要过多纠结这个,本文测试的微信版本为3.9.12.17。

二、安装wxauto

pip install wxauto

等待安装完成即可。

三、使用文档

# 导入
>>>from wxauto import WeChat

# 获取微信窗口对象
>>> wx = WeChat()
初始化成功,获取到已登录窗口:xxxx

上面定义了wx变量,下述文档不再重复定义和解释wx变量。

1、获取所有好友详情信息wx.GetFriendDetails

>>> DetailsList = wx.GetFriendDetails(n=None, timeout=0xFFFFF)

方法说明: 获取所有好友详情信息列表。

参数:

参数名 类型 默认值 说明
n int None 获取前n个好友详情信息。
timeout int 0xFFFFF 获取超时时间(秒),超过该时间则直接返回结果。

注:1. 该方法运行时间较长,约0.5~1秒一个好友的速度,好友多的话可将n设置为一个较小的值,先测试一下;
2. 如果遇到企业微信的好友且为已离职状态,可能导致微信卡死,需重启(此为微信客户端BUG);
3. 该方法未经过大量测试,可能存在未知问题。

2、获取聊天对象名和新消息条数(还未跑通)wx.GetSessionAmont

>>> sessionname, amount = wx.GetSessionAmont(SessionItem)
>>> print(f"会话名称: {session_name}, 新消息条数: {amount}")
>>> print(sessionname)	# 聊天对象名
>>> print(amount)		# 新消息条数

方法说明: 获取当前聊天窗口名,即聊天窗口最上方的那个名字。

参数: SessionItem (uiautomation.ListItemControl),聊天对象控件

3、是否有新消息wx.CheckNewMessage

>>> wx.CheckNewMessage()
有,则返回True;没有,则返回False

4、获取下一个新消息wx.GetNextNewMessage

>>> msgs = wx.GetNextNewMessage(savepic=False, savefile=False, savevoice=False, timeout=10)
>>> msgs
{'张三': [['张三', '哈哈哈', '42373591784181']]}

方法说明: 只获取一个未读消息内容,这样多个聊天对象有新消息时,可以逐一获取消息内容并进行回复。

参数:

参数名 类型 默认值 说明
savepic bool False 是否保存聊天图片
savefile bool False 是否保存聊天文件
savevoice bool False 是否保存聊天语音
timeout int 10 延时

注:该方法暂时只能读取未开启消息免打扰的好友的未读消息,开启消息免打扰的聊天无法获取。

5、获取所有新消息wx.GetAllNewMessage

>>> msgs = wx.GetAllNewMessage(max_round=10)

方法说明: 获取所有未读消息的内容,即存在未读数量小圆点的聊天窗。

参数: max_round (int):最大获取次数 。这里是为了避免某几个窗口一直有新消息,导致无法停止。

注:该方法暂时只能读取未开启消息免打扰的好友的未读消息,开启消息免打扰的聊天无法获取。

6、获取当前聊天列表中的所有聊天对象(是否只获取有新消息的聊天对象)wx.GetSessionList

>>> SessionDict = wx.GetSessionList(reset=False, newmessage=False)

方法说明: 聊天对象字典,键为聊天对象名,值为新消息条数。

参数:

参数名 类型 默认值 说明
reset bool False 是否重置SessionItemList
newmessage (bool) bool False 是否只获取有新消息的聊天对象

7、获取当前聊天列表中的所有聊天对象wx.GetSession

>>> SessionElement = wx.GetSession()

方法说明: 获取聊天对象列表。

8、打开某个聊天框wx.ChatWith

# 打开“文件传输助手”聊天窗口
>>> who = '文件传输助手'
>>> wx.ChatWith(who)

方法说明: 打开指定好友(群组)聊天窗口。

参数:

参数名 类型 默认值 说明
who str / 要打开的聊天框好友名或群名

9、@所有人wx.AtAll

>>> wx.AtAll(msg=None, who=None)

参数:

参数名 类型 默认值 说明
msg str None 要发送的文本消息
who str None 要发送给谁,如果为None,则发送到当前聊天页面。 *最好完整匹配,优先使用备注

10、发送文本消息wx.SendMsg

# 给“文件传输助手”发送消息
>>> who = '文件传输助手'
>>> msg = '''这是一条消息
这是第二行
这是第三行
'''
>>> wx.SendMsg(msg, who=who)

方法说明: 给指定人员(群组)发送消息。

参数:

参数名 类型 默认值 说明
msg str / 要发送的文字内容
who str None 要发送给谁,默认则发送给当前打开的页面
clear bool True 是否清除原本聊天编辑框的内容

11、向当前聊天窗口发送文件wx.SendFiles

# 给“文件传输助手”发送文件(图片同理)
>>> who = '文件传输助手'
# 指定文件路径(绝对路径)
>>> files = ['D:/test/test1.txt', 'D:/test/test2.txt', 'D:/test/test3.txt']
>>> wx.SendFiles(self, files, who=who)

方法说明: 给指定人员(群组)发送文件或者图片。

参数:

参数名 类型 默认值 说明
filepath str | list / 指定文件路径,单个文件str,多个文件list
who str None 要发送给谁,默认则发送给当前打开的页面

12、获取当前窗口中加载的所有聊天记录wx.GetAllMessage

# 获取当前窗口聊天记录,并自动保存聊天图片
>>> msgs = wx.GetAllMessage(savepic=True, savefile=False, savevoice=False)

方法说明: 获取当前窗口中加载的所有聊天记录。

参数:

参数名 类型 默认值 说明
savepic bool False 是否自动保存聊天图片
savefile bool False 是否保存聊天文件
savevoice bool False 是否保存聊天语音

13、加载当前聊天页面更多聊天信息wx.LoadMoreMessage

>>> isload = wx.LoadMoreMessage()
成功加载,返回True;否则返回False

方法说明: 利用鼠标滚动加载当前聊天页面更多聊天信息。

参数: bool:是否成功加载更多聊天信息。

14、获取当前聊天对象名wx.CurrentChat

>>> currentname = wx.CurrentChat()

15、获取新的好友申请列表wx.GetNewFriends

>>> new = wx.GetNewFriends()
>>> new
[<wxauto New Friends Element at 0x1e95fced080 (张三: 你好,我是xxx群的张三)>,
<wxauto New Friends Element at 0x1e95fced081 (李四: 你好,我是xxx群的李四)>]

方法说明: 获取好友申请列表中,状态为可接受的好友申请对象。

通过好友申请对象接受好友请求

# 获取第一个可接受的新好友对象
>>> new_friend1 = new[0]
>>> print(new_friend1.name)  # 获取好友申请昵称
张三
>>> print(new_friend1.msg)  # 获取好友申请信息
你好,我是xxx群的张三

# 接受好友请求,并且添加备注“备注张三”、添加标签wxauto
>>> new_friend1.Accept(remark='备注张三', tags=['wxauto'])

注:该方法接受好友请求后,并不会自动切换回聊天页面,需要配合调用19、切换到聊天页面,否则其他有关聊天页面的方法不可使用。

16、添加监听对象wx.AddListenChat

>>> wx.AddListenChat(who='张三', savepic=True, savefile=False, savevoice=False)

方法说明: 将指定聊天对象独立出来,并且加入监听列表中。

参数:

参数名 类型 默认值 说明
who str / 好友名/群名
savepic bool False 是否保存聊天图片
savefile bool False 是否保存聊天文件
savevoice bool False 是否保存聊天语音

17、获取监听对象的新消息wx.GetListenMessage

>>> msgs = wx.GetListenMessage(who=None)
>>> msgs
{'张三': [['张三', '哈哈哈', '42373591784181']],'李四': [['李四', '哈哈哈', '42373591784256']],'李白': []}

参数:

参数名 类型 默认值 说明
who str None 好友名/群名

18、切换到通讯录页面wx.SwitchToContact

>>> wx.SwitchToContact()

19、切换到聊天页面wx.SwitchToChat

>>> wx.SwitchToChat()

20、获取当前聊天群成员wx.GetGroupMembers

>>> wx.GetGroupMembers()
['张三', '李四', '王五'...]

注:该方法获取到的为好友昵称或备注,有备注为备注,没备注为昵称。

21、获取所有好友列表wx.GetAllFriends

>>> friends_list = wx.GetAllFriends(keywords=None)

参数:

参数名 类型 默认值 说明
keywords str None 搜索关键词,只返回包含关键词的好友列表。

注:
(1)该方法运行时间取决于好友数量,约每秒6~8个好友的速度;
(2)该方法未经过大量测试,可能存在未知问题。

22、获取所有监听对象wx.GetAllListenChat

>>> wx.GetAllListenChat()

23、移除监听对象wx.RemoveListenChat

>>> wx.RemoveListenChat(who)

参数:

参数名 类型 默认值 说明
who str None 好友名/群名

24、添加新的好友wx.AddNewFriend

>>> keywords = '13800000000'      # 微信号、手机号、QQ号
>>> addmsg = '你好,我是xxxx'      # 添加好友的消息
>>> remark = '备注名字'            # 备注名
>>> tags = ['朋友', '同事']        # 标签列表
>>> wx.AddNewFriend(keywords, addmsg=addmsg, remark=remark, tags=tags)
# wx.AddNewFriend(keywords, addmsg=None, remark=None, tags=None)

参数:

参数名 类型 默认值 说明
keywords str / 搜索关键词,微信号、手机号、QQ号
addmsg str None 添加好友的消息
remark str None 备注名
tags list None 标签列表

四、使用案例

1. 监听指定群或好友消息并回复

from wxauto import WeChat
import time

# 实例化微信对象
wx = WeChat()

# 指定监听目标
listen_list = [
    '张三',
    '李四',
    '工作群A',
    '工作群B'
]
for i in listen_list:
    wx.AddListenChat(who=i, savepic=True)  # 添加监听对象并且自动保存新消息图片

# 持续监听消息,并且收到消息后回复“收到”
wait = 10  # 设置10秒查看一次是否有新消息
while True:
    msgs = wx.GetListenMessage()
    for chat in msgs:
        msg = msgs.get(chat)   # 获取消息内容
        # ===================================================
        # 处理消息逻辑
        # 
        # 处理消息内容的逻辑每个人都不同,按自己想法写就好了,这里不写了
        # 
        # ===================================================
        
        # 回复收到
        chat.SendMsg('收到')  # 回复收到
    time.sleep(wait)
    

import time
from wxauto import *


def auto_reply():
    wx = WeChat()
    while True:
        msgs = wx.GetAllMessage()
        if msgs:
            last_msg = msgs[-1]  # 获取最新消息
            if "在吗" in last_msg:
                wx.SendMsg("不在")
        time.sleep(1)  # 等一秒再检查


if __name__ == '__main__':
    auto_reply()

2. 监听所有未被屏蔽的新消息

from wxauto import WeChat
import time

# 实例化微信对象
wx = WeChat()

# 持续监听消息,并且收到消息后回复“收到”
wait = 10  # 设置10秒查看一次是否有新消息
while True:
    msg = wx.GetNextNewMessage(savepic=True)
    # 如果获取到新消息了,则回复收到
    if msg:
        # ===================================================
        # 处理消息逻辑
        # 
        # 处理消息内容的逻辑每个人都不同,按自己想法写就好了,这里不写了
        # 
        # ===================================================

        wx.SendMsg(msg='收到', who=list(msg)[0])  # 回复收到
    time.sleep(wait)

3. 消息监听与捕获

from wxauto import *

# 初始化微信客户端连接
wx = WeChat()

# 持续监听新消息
while True:
    new_message = wx.GetNextNewMessage()

    # 提取消息详情
    if new_message:
        sender = new_message.keys()
        content = new_message.values()
        sender_list = list(sender)[0]
        content_list = list(content)[0]
        print(f"收到来自 {sender_list} 的消息:{content_list}")
        print(list(list(content)[0])[0])
        print(type(sender_list), type(content_list))

4.监听过程退出

"""按“esc”键退出"""

from wxauto import WeChat
from pynput import keyboard
import threading

# 全局标志,用于指示是否应该退出程序
exit_flag = False


# 定义当键盘事件发生时调用的回调函数
def on_press(key):
    try:
        if key == keyboard.Key.esc:
            global exit_flag
            exit_flag = True
            return False  # 停止监听
    except AttributeError:
        pass  # 忽略非按键事件


# 创建键盘监听器
listener = keyboard.Listener(on_press=on_press)

# 在单独的线程中启动监听器
listener_thread = threading.Thread(target=listener.start)
listener_thread.start()

# 初始化微信客户端连接
wx = WeChat()

# 注意:这里我们没有使用 WeChatFiles 类,因为它可能不是用于控制微信主功能的
# 如果您确实需要使用 WeChatFiles 类,请确保您了解其用途并正确实例化它

try:
    # 持续监听新消息
    while not exit_flag:
        new_message = wx.GetNextNewMessage()  # 假设这是获取新消息的正确方法
        if new_message:
            # 提取并打印消息详情(这里的代码取决于新消息的结构)
            sender = list(new_message.keys())[0]
            content = list(new_message.values())[0]
            # 注意:下面的打印语句可能是多余的或错误的,取决于 content 的结构
            # print(list(list(content)[0])[0])  # 这行代码可能是错误的,需要修正
            print(f"收到来自 {sender} 的消息:{content}")
            print(type(sender), type(content))

        # 可能需要在这里添加一些延迟,以避免循环过于紧密
        # time.sleep(0.1)  # 如果需要,可以取消注释这行代码

finally:
    # 确保在退出前停止键盘监听器
    listener.stop()
    listener_thread.join()  # 等待监听器线程结束

五、云服务器部署

1. 购买云服务器
选个便宜的新用户大概60一年的就可以部署了 【腾讯云】 【阿里云】;

内存:2G+;

系统:WindowsServer2016、2019、2022版本。

没试过1G的内存,我最小测试过2G的所以推荐至少2G。

2. 远程控制
由于windows系统自带的远程控制RDP(MSTSC)在结束远程时会自动锁屏,导致该项目无法正常运行,所以要更换其他远程控制软件。

有很多远程方案,这里推荐使用VNC:

1、登录服务器,安装RealVNC server,设置登录密码和服务端口,默认为5900端口,但是最好改一下;

2、登录云服务器服务商控制台,在防火墙打开上一步设置的vnc端口的访问权限;

3、自己电脑安装RealVNC viewer,输入云服务器ip:端口进行连接,断开连接不会锁屏;

4、服务器安装微信,部署代码即可运行。

注:1. 远程方案有很多,没有必须是VNC,只要不锁屏用什么都可以,向日葵也可以。

​ 2. 云服务器最好买你所在城市或临近城市的,因为有几率触发微信异地登录风控。

六、参考

文章:wxauto调用文档,作者:Cluic

七、免责声明

代码仅供交流学习使用,请勿用于非法用途和商业用途!如因此产生任何法律纠纷,均与作者无关!

你可能感兴趣的:(微信,python,wxauto,WeChat)