Python wxpy 操作微信 大全集
安装及导入 wxpy
安装 wxpy
pip install wxpy
导入 wxpy
import wxpy
登录微信
登录
bot = wxpy.Bot(cache_path=None, console_qr=False, qr_path=None, qr_callback=None, login_callback=None, logout_callback=None)
参数 | 说明 |
---|---|
cache_path | 设置当前会话的缓存路径,并开启缓存功能;为 None (默认) 则不开启缓存功能。开启缓存后可在短时间内避免重复扫码,缓存失效时会重新要求登陆。 设为 True 时,使用默认的缓存路径 ‘wxpy.pkl’ |
console_qr | 在终端中显示登陆二维码,需要安装 pillow 模块。可为整数(int),表示二维码单元格的宽度,通常为 2 (当被设为 True 时,也将在内部当作 2)。也可为负数,表示以反色显示二维码,适用于浅底深字的命令行界面。 例如: 在大部分 Linux 系统中可设为 True 或 2,而在macOS Terminal 的默认白底配色中,应设为 -2 |
qr_path | 保存二维码的路径 |
qr_callback | 获得二维码后的回调,可以用来定义二维码的处理方式,接收参数: uuid, status, qrcode |
login_callback | 登陆成功后的回调,若不指定,将进行清屏操作,并删除二维码文件 |
logout_callback | 登出时的回调 |
阻塞进程
在完成注册操作后,若没有其他操作,程序会因主线程执行完成而退出。 因此务必堵塞线程以保持监听状态。
wxpy 的 embed() 可在堵塞线程的同时,进入 Python 命令行。
wxpy.embed(shell=None, local=None, banner='')
参数 | 说明 |
---|---|
shell: str |
指定命令行类型,可设为 ‘ipython’,’bpython’,’python’,或它们的首字母; 若为 None,则按上述优先级进入首个可用的 Python 命令行。 |
local: dict | 设定本地变量环境,若为 None,则获取进入之前的变量环境。 |
banner: str | 设定欢迎内容,将在进入命令行后展示。 |
聊天对象
聊天对象
获取所有聊天对象
bot.chats(update=False)
参数 | 说明 |
---|---|
update | 是否更新 |
返回: 聊天对象合集
返回类型: wxpy.Chats
获取所有好友
bot.friends(update=False)
参数 | 说明 |
---|---|
update | 是否更新 |
返回:聊天对象合集
返回类型:wxpy.Chats
获取所有群聊
bot.groups(update=False, contact_only=False)
一些不活跃的群可能无法被获取到,可通过在群内发言,或修改群名称的方式来激活
参数 | 说明 |
---|---|
update | 是否更新 |
contact_only | 是否限于保存为联系人的群聊 |
返回:群聊合集
返回类型:wxpy.Groups
获取所有公众号
bot.mps(update=False)
参数 | 说明 |
---|---|
update | 是否更新 |
返回:聊天对象合集
返回类型:wxpy.Chats
其他对象
# 机器人自己
bot.self
# 文件传输助手
bot.file_helper
搜索聊天对象
.search()
搜索所有聊天对象
# 搜索名称含有 'wxpy' 的任何聊天对象
found = bot.search('wxpy')
# [<Friend: wxpy 机器人>, <Group: wxpy 交流群1>, <Group: wxpy 交流群2>]
不包括群成员
搜索好友
# 搜索名称包含 'david' 的广州男性好友
found = bot.friends().search('david', sex=MALE, city='广州')
# [<Friend: david>]# 确保搜索结果是唯一的,并取出唯一结果
david = ensure_one(found)
# <Friend: david>
搜索群聊
# 搜索名称包含 'wxpy',且成员中包含 `david` 的群聊对象
wxpy_groups = bot.groups().search('wxpy', [david])
# [<Group: wxpy 交流群 1>, <Group: wxpy 交流群 2>]
在群聊中搜索
# 在刚刚找到的第一个群中搜索
group = wxpy_groups[0]
# 搜索该群中所有广州的群友
found = group.search(province='广州')
# [<Member: 广州 群友1>, <Group: 广州 群友2>, <Group: 广州 群友3> ...]
添加聊天对象
添加用户为好友
bot.add_friend(user, verify_content='')
参数 | 说明 |
---|---|
user 或 user_name | 用户对象 |
verify_content | 验证说明信息 |
添加/关注 公众号
bot.add_mp(user)
参数 | 说明 |
---|---|
user 或 user_name | 公众号对象 |
接受用户为好友
bot.accept_friend(user, verify_content='')
参数 | 说明 |
---|---|
user 或 user_name | 用户对象 |
verify_content | 验证说明信息 |
返回:新的好友对象
返回类型:wxpy.Friend
其他属性
.mark_as_read()
# 消除当前聊天对象的未读提示小红点.pin()
# 将聊天对象置顶.unpin()
# 取消聊天对象的置顶状态.get_avatar(save_path=None)
# 获取头像
# 参数: save_path – 保存路径(后缀通常为.jpg),若为 None 则返回字节数据.uin
# 微信中的聊天对象ID,固定且唯一
# 因微信的隐私策略,该属性有时无法被获取到
# 建议使用 puid 作为用户的唯一 ID.alias
# 若用户进行过一次性的 “设置微信号” 操作,则该值为用户设置的”微信号”,固定且唯一
# 因微信的隐私策略,该属性有时无法被获取到
# 建议使用 puid 作为用户的唯一 ID.wxid
# 聊天对象的微信ID (实际为 .alias 或 .uin)
# 因微信的隐私策略,该属性有时无法被获取到
# 建议使用 puid 作为用户的唯一 ID.user_name
# 该聊天对象的内部 ID,通常不需要用到
# 注意:同个聊天对象在不同用户中,此 ID 不一致 ,且可能在新会话中 被改变!
发送消息
.send(content=None, media_id=None)
动态发送不同类型的消息,具体类型取决于 content 的前缀
参数 | 说明 |
---|---|
content |
由 前缀 和 内容 两个部分组成,若 省略前缀,将作为纯文本消息发送 前缀 部分可为: @fil@: 文件,@img@: 图片,@msg@: 纯文本,@vid@: 视频 内容 部分可为: 文件、图片、视频的路径,或纯文本的内容 |
media_id | 填写后可省略上传过程 |
返回类型:wxpy.SentMessage
发送文本
.send_msg(msg=None)
参数 | 说明 |
---|---|
msg | 文本内容 |
发送图片
.send_image(path, media_id=None)
参数 | 说明 |
---|---|
path | 文件路径 |
media_id | 设置后可省略上传过程 |
发送视频
.send_video(path=None, media_id=None)
参数 | 说明 |
---|---|
path | 文件路径 |
media_id | 设置后可省略上传过程 |
发送文件
my_friend.send_file(path, media_id=None)
参数 | 说明 |
---|---|
path | 文件路径 |
media_id | 设置后可省略上传过程 |
以原始格式发送其他类型消息
send_raw_msg(raw_type, raw_content, uri=None, msg_ext=None)
参数 | 说明 |
---|---|
raw_type: int | 原始的整数消息类型 |
raw_content: str | 原始的消息内容 |
uri: str | 请求路径,默认为 ‘/webwxsendmsg’ |
msg_ext: dict | 消息的扩展属性 (会被更新到 Msg 键中) |
处理消息
注册函数
可通过预先注册的方式,实现消息的自动处理。
预先将特定聊天对象的特定类型消息,注册到对应的处理函数,以实现自动回复等功能。
每当收到新消息时,将根据注册规则找到匹配条件的执行函数。并将消息对象作为唯一参数传入该函数。
将 bot.register() 作为函数的装饰器,即可完成注册。
bot.register(chats=None, msg_types=None, except_self=True, run_async=True, enabled=True
其中msg_types参数,是指定接收消息的类型,wxpy中支持以下消息类型:
值 | 描述 |
---|---|
TEXT 或 ‘Text’ | 文本 |
MAP 或 ‘Map’ | 位置 |
CARD 或 ‘Card’ | 名片 |
NOTE 或 ‘Note’ | 提示 |
SHARING 或 ‘Sharing’ | 分享 |
PICTURE 或 ‘Picture’ | 图片 |
RECORDING 或 ‘Recording’ | 语音 |
ATTACHMENT 或 ‘Attachment’ | 文件 |
VIDEO 或 ‘Video’ | 视频 |
FRIENDS 或 ‘Friends’ | 好友请求 |
SYSTEM 或 ‘System’ | 系统 |
其他参数
参数 | 描述 |
---|---|
chats |
消息所在的聊天对象:单个或列表形式的多个聊天对象或聊天类型,为空时匹配所有聊天对象; 既可以是聊天对象实例,也可以是对象类。当为类时,表示匹配该类型的所有聊天对象。 |
msg_types | 消息的类型:单个或列表形式的多个消息类型,为空时匹配所有消息类型 (SYSTEM 类消息除外) |
except_self | 排除由自己发送的消息 |
run_async | 是否异步执行所配置的函数:可提高响应速度 |
enabled | 当前配置的默认开启状态,可事后动态开启或关闭 |
在被注册函数中,可以通过直接 return <回复内容> 的方式来回复消息,等同于调用 msg.reply(<回复内容>)。
Message 消息对象
每当机器人接收到消息时,会自动执行以下两个步骤:
1.将消息保存到 Bot.messages 中
2.查找消息预先注册的函数,并执行(若有匹配的函数)
基本属性
消息的类型
Message.type
返回消息的类型:str
机器人对象
Message.bot
接收此消息的机器人对象
消息的唯一 ID
Message.id
(通常为大于 0 的 64 位整型)
内容数据
# 消息的文本内容
Message.text# 下载图片、视频、语音、附件消息中的文件内容
# 可与 Message.file_name 配合使用
# 参数: save_path – 文件的保存路径。若为 None,将直接返回字节数据
Message.get_file(save_path=None)# 消息中文件的文件名
Message.file_name# 消息中文件的体积大小
Message.file_size# 文件类消息中的文件资源 ID (但图片视频语音等其他消息中为空)
Message.media_id# 原始数据 (dict 数据
)Message.raw
用户相关
Message.chat
# 消息所在的聊天会话
# 对于自己发送的消息,为消息的接收者
# 对于别人发送的消息,为消息的发送者
# 返回类型:wxpy.User, wxpy.GroupMessage.sender
# 消息的发送者
# 返回类型: wxpy.User, wxpy.GroupMessage.receiver
# 消息的接收者
# 返回类型:wxpy.User, wxpy.GroupMessage.member
# 消息的实际发送人
# 若消息来自群聊,则此属性为消息的实际发送人(具体的群成员)
# 若消息来自其他聊天对象(非群聊),则此属性为 None# 返回类型:NoneType, wxpy.MemberMessage.card
#好友请求中的请求用户
#名片消息中的推荐用户
群聊相关
Message.member
# 发送人
# 若消息来自群聊,则此属性为消息的实际发送人(具体的群成员)
# 若消息来自其他聊天对象(非群聊),则此属性为 None
# 返回类型: NoneType,wxpy.MemberMessage.is_at
# 是否被 @
# 当消息来自群聊,且被 @ 时,为 True
时间相关
# 服务端发送时间
Message.create_time# 本地接收时间
Message.receive_time# 消息的延迟秒数 (发送时间和接收时间的差值)
Message.latency
不同类型消息
图片、视频、语音
# 图片高度
Message.img_height# 图片宽度
Message.img_width# 视频长度
Message.play_length# 语音长度
Message.voice_length
文章
# 分享类消息中的网页 URL
Message.url
# 公众号推送中的文章列表 (首篇的 标题/地址 与消息中的 text/url 相同)
Message.articles
其中,每篇文章均有以下属性
属性 | 说明 |
---|---|
title | 标题 |
summary | 摘要 |
url | 文章 URL |
cover | 封面或缩略图 URL |
位置消息
# 位置消息中的地理位置信息
Message.location
回复
方法一:获取聊天对象后发送消息
Message.chat.send(...)
Message.chat.send_msg(...)
# ...更多见本章 “发送消息”
方法二:直接回复
代码 | 描述 |
---|---|
Message.reply(…) | 回复 |
Message.reply_msg(…) | 回复文本 |
Message.reply_image(…) | 回复图片 |
Message.reply_file(…) | 回复文件 |
Message.reply_video(…) | 回复视频 |
Message.reply_raw_msg(…) | 以原始格式回复其他类型消息 |
具体参数见本章 “发送消息”。
转发消息
# 将本消息转发给其他聊天对象
Message.forward(chat, prefix=None, suffix=None, raise_for_unsupported=False)
支持以下消息类型
类型 | 描述 |
---|---|
TEXT | 文本 |
VIDEO | 视频 |
ATTACHMENT | 文件 |
PICTURE |
图片/自定义表情 不支持表情商店中的表情 |
CARD |
名片 仅支持公众号名片,以及自己发出的个人号名片 |
SHARING |
分享 会转化为 标题 + 链接 形式的文本消息 |
RECORDING |
语音 会以文件方式发送 |
MAP |
地图 会转化为 位置名称 + 地图链接 形式的文本消息 |
参数:
参数 | 描述 |
---|---|
chat: Chat | 接收转发消息的聊天对象 |
prefix: str | 转发时增加的 前缀 文本,原消息为文本时会自动换行 |
suffix: str | 转发时增加的 后缀 文本,原消息为文本时会自动换行 |
raise_for_unsupported: bool | 为 True 时,将为不支持的消息类型抛出 NotImplementedError 异常 |
原创不易,如果你觉得这篇文章很赞的话,
点赞收藏再走吧!
yeanky
2021/7/20
Python wxpy 操作微信 大全集相关推荐
- python自动操作微信_微信全智能机器人测试,Python代码实现自动化操作,玩转智能应答...
原标题:微信全智能机器人测试,Python代码实现自动化操作,玩转智能应答 本文为微信智能回复相关python项目,通过模拟网页端微信接口,实现跟好友之间自动的回复,并接入了图灵智能库,进行相应的内容 ...
- python自动操作微信_Python+Appium 自动化操作微信入门看这一篇就够了
简介 Appium 是一个开源的自动化测试工具,支持 Android.iOS 平台上的原生应用,支持 Java.Python.PHP 等多种语言. Appium 封装了 Selenium,能够为用户提 ...
- 用python wxpy管理微信公众号,并利用微信获取自己的开源数据。
之前了解到itchat 乃至于 wxpy时 是利用tuling聊天机器人的接口.调用接口并保存双方的问答结果可以作为自己的 问答词库 的一个 数据库累计. 这些数据可以用于自己训练. 而最近希望获取一 ...
- Python骚操作-微信远程控制电脑
Python+微信远程控制电脑 今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前电脑的使用者,然后图片会发送到你的微信上.甚 ...
- Python最新操作微信解决方案(附破解文件和代码)
本文我将给大家讲解微信机器人的制作,首先要跟大家说的就是:机器人不管是 QQ 机器人还是微信机器人,相对而言是比较灰色地带,本文中提供的几种方式,经过本人亲自测试,是很好用的!如果有需要,赶紧看看,这 ...
- python自动操作微信_Python + Appium 自动化操作微信入门
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云,作者:Python小二 简介 Appium 是一个开源的自动 ...
- python自动操作微信_Python + Appium 自动化操作微信
环境 本文主要环境如下: Win10 JDK1.8 Appium Python3.7 android-sdk mumu 模拟器 JDK 下载地址:https://www.oracle.com/java ...
- 千锋python全套视频教程400全集-千锋出品全套python视频教程,400大全集,你了解吗?...
在线观看地址: (这套视频在B站上很火) 以下是完整的视频介绍 第一章 Python语音基础简介: 通过第一章的学习,对Python有一定的了解,掌握Python语法,可以使用Python原生语言开发 ...
- 400全集python全套视频教程-千锋出品全套python视频教程,400大全集,你了解吗?...
在线观看地址: (这套视频在B站上很火) 以下是完整的视频介绍 第一章 Python语音基础简介: 通过第一章的学习,对Python有一定的了解,掌握Python语法,可以使用Python原生语言开发 ...
最新文章
- 汇编寄存器(内存访问)基础知识之三---mov指令
- python时间序列动图_手把手教你用Python进行时间序列分解和预测
- Tomcat:Connection reset by peer: socket write error
- 如何用SPY++工具查看窗体的句柄
- openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案...
- 阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录
- 12 个非常有用的 JavaScript 技巧
- 微软Azure云服务故障超过24小时,原因竟是——被雷劈了
- Java学习笔记之设计模式(5)装饰者模式
- 宝塔面板搭建ftp服务器
- python里的url是什么意思_URI和URL的简介
- win7触摸板怎么关闭_笔记本电脑触摸板快速关闭,避免误碰影响操作
- 华为eNSP模拟器vlan 隔离技术的实现
- springboot通过date_histogram 按时间统计数据
- 取消管理员取得所有权_win7怎么获取得管理员所有权
- UEFI和传统引导的区别有哪些
- 技术分享 | 使用 Zabbix + Grafana 搭建服务器监控系统
- 蜂窝移动的架构 以及省电的方法
- mysql 存储数据时,报错Cause: java.sql.SQLException: Incorrect string value: '\xF4\x80\xB3\x81\xE8\xAE...'
- 【面试题】HTML篇(一)