Weixin
主入口类,连接并操作单个微信客户端实例。
构造方法
Weixin(
pid=None, # 微信进程 PID,None 自动查找
on_login=None, # 登录回调 callback(login: Login)
default_login_timeout=60, # 默认登录等待超时(秒)
background=False, # 后台模式
offscreen=True, # 后台模式下窗口移到屏幕外
idle_wait=0, # 物理输入等待时间(秒)
lock_input=False, # 操作期间锁定物理输入
resize=False, # 自动调整窗口大小
install_path=None, # 微信安装路径
ocr="wcocr", # OCR 引擎 "wcocr" | "rapidocr"
wxocr_weixin_install_path=None, # 微信 OCR 插件所需的带版本号安装路径
wxocr_plugin_path=None, # 微信 OCR 插件 wxocr.dll 路径
)| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
pid | int | None | None | 微信进程 PID,传入时精确绑定该进程,None 自动查找或启动 |
on_login | callable | None | None | 登录回调函数,签名 callback(login: Login) |
default_login_timeout | float | 60 | 等待手动登录超时(秒) |
background | bool | False | 后台模式(通过 SendMessage 发送虚拟鼠标/键盘消息) |
offscreen | bool | True | 后台模式下窗口移到屏幕外,仅 background=True 时生效 |
idle_wait | float | 0 | 人类操作等待时间(秒),>0 时自动启动物理输入监控 |
lock_input | bool | False | 操作期间锁定物理键盘鼠标(需管理员权限) |
resize | bool | False | 自动调整窗口大小(宽高为桌面的 1/3 × 1/2) |
install_path | str | None | None | 微信安装路径,None 自动从注册表检测 |
ocr | str | "wcocr" | OCR 引擎:"wcocr"(微信自带)或 "rapidocr" |
wxocr_weixin_install_path | str | None | None | 微信 OCR 所需的带版本号安装路径,None 自动检测 |
wxocr_plugin_path | str | None | None | wxocr.dll 路径,None 自动检测 |
属性
| 属性 | 类型 | 说明 |
|---|---|---|
pid | int | 微信进程 PID |
version | str | 微信版本号 |
language | str | 界面语言代码("cn" / "cn_t" / "en") |
status | str | 状态:"online" / "locked" / "login" / "offline" |
is_online | bool | 是否在线(主窗口是否存在) |
has_session | bool | 会话列表是否可见 |
chat | Chat | None | 当前主窗口激活的聊天对象 |
chats | List[Chat | SeparateChat] | 所有已打开的聊天窗口 |
current_version | str | 当前微信版本号(通过设置页获取) |
子模块
| 属性 | 类型 | 说明 |
|---|---|---|
navigator | Navigator | 导航栏 |
session | Session | 会话列表 |
moment | Moment | 朋友圈 |
collections | Collections | 收藏 |
file_manager | FileManager | 文件管理器 |
contacts | Contacts | 通讯录 |
settings | Settings | 设置 |
preview | Preview | 图片/视频预览 |
browser | Browser | 内置浏览器 |
消息发送
send_text(nickname, content, quote=None, timeout=0)
发送文本消息。
- nickname
str— 联系人/群聊名称 - content
str— 文本内容 - quote
Message | int | None— 引用消息(Message 对象或 msg_id) - timeout
float— 状态检测超时(秒),0 不等待 - 返回
MessageStatus
send_file(nickname, file_path, quote=None, timeout=0)
发送文件。
- file_path
str | List[str]— 文件路径或路径列表,支持 URL
send_image(nickname, file_path, quote=None, timeout=0)
发送图片。
- file_path
str | List[str]— 图片路径或路径列表
send_video(nickname, file_path, quote=None, timeout=0)
发送视频。
- file_path
str | List[str]— 视频路径或路径列表
send_at(nickname, content, at_members, quote=None, timeout=0)
发送@消息(群聊)。
- at_members
List[str]— 要@的成员列表,["所有人"]可@全员
send_emotion(nickname, keyword=None, index=1, quote=None, timeout=0)
发送表情。
- keyword
str | None— 搜索关键词,None 发送自定义表情 - index
int— 第几个表情(从 1 开始)
send_collection(nickname, keyword, quote=None, timeout=0)
发送收藏内容。
send_card(nickname, share)
发送名片。将 share 联系人的名片发送给 nickname。
会话操作
chat_with(nickname, chat_type=None, force_search=False)
获取与指定联系人的聊天窗口对象。优先查找已打开的独立窗口。
- nickname
str— 联系人或群聊名称 - chat_type
List[str] | None— 搜索时优先匹配的分类,如["联系人", "群聊"] - force_search
bool— 是否强制走搜索流程 - 返回
Chat | SeparateChat
open_session(nickname)
通过在会话列表中查找并点击来打开指定会话。
- 返回
Chat
open_session_by_search(nickname, chat_type=None, force_search=False)
通过搜索打开会话。
- 返回
Chat
close_session(nickname)
关闭指定会话(从会话列表中隐藏)。
get_separate_chat(contact_name)
获取独立窗口的聊天会话。
- contact_name
str— 联系人名称 - 返回
SeparateChat | None— 窗口不存在则返回 None
get_separate_chats()
获取所有已打开的独立聊天窗口(按 PID 过滤)。
- 返回
List[SeparateChat]
create_room(nicknames)
创建群聊。
- nicknames
List[str]— 至少 2 个好友昵称
create_note(content)
创建笔记并写入内容,完成后关闭笔记窗口。
- content
str— 笔记文本内容
add_friend(keyword, message=None, remark=None, permission=None, hide_my_posts=False, hide_their_posts=False)
添加好友。
- 返回
dict—{"result": bool, "reason": str | None}
联系人管理
get_contact_profile(nickname)
获取联系人资料。
- 返回
dict
set_contact_info(nickname, *, remark=None, labels=None, phones=None, description=None, images=None)
一次性设置联系人信息。
set_contact_remark(nickname, remark)
设置备注名。
set_contact_label(nickname, labels)
为联系人设置标签(覆盖式)。
- labels
List[str]— 标签列表
set_contact_phone(nickname, phones)
为联系人设置电话号码(覆盖式)。
- phones
List[str]— 电话号码列表
set_contact_description(nickname, description)
设置联系人的描述信息。
set_contact_image(nickname, images)
设置联系人的备注图片(覆盖式)。
- images
List[str]— 图片路径列表
add_contact_label(nickname, labels)
为联系人添加标签(增量式)。
add_contact_phone(nickname, phones)
为联系人添加电话号码(增量式)。
add_contact_image(nickname, images)
为联系人添加备注图片(增量式)。
remove_contact_label(nickname, labels)
移除联系人的标签。
remove_contact_phone(nickname, phones)
移除联系人的电话号码。
remove_contact_image(nickname, images)
删除联系人的备注图片。
- images
List[int]— 要删除的图片序号列表
collect_contact_image(nickname, images)
收藏联系人的指定备注图片。
- images
List[int]— 图片序号列表 - 返回
int— 成功收藏的数量
save_contact_image(nickname, images, save_path)
保存联系人的指定备注图片到指定目录。
- images
List[int]— 图片序号列表 - save_path
str— 保存目录路径 - 返回
int— 成功保存的数量
set_contact_star(nickname) / cancel_contact_star(nickname)
设为/取消星标朋友。
black_contact(nickname) / unblack_contact(nickname)
加入/移出黑名单。
delete_contact(nickname)
删除联系人。
recommend_contact(nickname, receiver_nickname)
将指定联系人推荐给另一个朋友(发送名片)。
- 返回
bool
get_friend_permission(nickname)
获取联系人的朋友权限设置。
- 返回
dict
set_friend_permission(nickname, permission="all", hide_my_posts=False, hide_their_posts=False)
设置朋友权限。
- permission
str—"all"或"chatonly"
群聊管理
set_room_info(nickname, name=None, announcement=None, remark=None, my_nickname=None, mute=None, pin=None, save_address_book=None, display_member_nickname=None, fold=None)
一次性设置群聊信息。
| 参数 | 类型 | 说明 |
|---|---|---|
name | str | None | 群名称 |
announcement | str | None | 群公告 |
remark | str | None | 群备注 |
my_nickname | str | None | 我在群中的昵称 |
mute | bool | None | 消息免打扰 |
pin | bool | None | 置顶 |
save_address_book | bool | None | 保存到通讯录 |
display_member_nickname | bool | None | 显示群成员昵称 |
fold | bool | None | 折叠会话 |
set_room_name(nickname, name)
设置群聊名称。
set_room_announcement(nickname, content)
设置群公告。
set_room_remark(nickname, remark)
设置群聊备注。
set_room_nickname(nickname, my_nickname)
设置我在群中的昵称。
add_room_members(nickname, members) / remove_room_members(nickname, members)
添加/移除群成员。
exit_room(nickname)
退出群聊。
pin_chat(nickname) / unpin_chat(nickname)
置顶/取消置顶会话。
mute_chat(nickname) / unmute_chat(nickname)
消息免打扰。
fold_chat(nickname) / unfold_chat(nickname)
折叠/取消折叠会话。
pin_room_chat(nickname) / unpin_room_chat(nickname)
置顶/取消置顶群聊会话。
mute_room_chat(nickname) / unmute_room_chat(nickname)
开启/关闭群聊消息免打扰。
fold_room_chat(nickname) / unfold_room_chat(nickname)
折叠/取消折叠群聊会话。
add_room_address_book(nickname) / remove_room_address_book(nickname)
将群聊保存到/从通讯录移除。
display_room_member_nickname(nickname) / hidden_room_member_nickname(nickname)
显示/隐藏群成员昵称。
clear_chat_history(nickname)
清空指定会话的聊天记录。
clear_room_chat_history(nickname)
清空指定群聊会话的聊天记录。
朋友圈
get_moments(count=10, position="top")
获取朋友圈动态列表,操作完自动关闭朋友圈窗口。
- count
int— 获取数量 - position
"top" | "current"— 起始位置 - 返回
list
iter_moments(count=10, position="top")
逐条获取朋友圈动态(生成器),操作完自动关闭朋友圈窗口。
publish_moment(text=None, images=None, video=None, remind_contacts=None, permission=None, permission_contacts=None, permission_labels=None)
发布朋友圈,操作完自动关闭朋友圈窗口。支持纯文字、图文、视频三种模式(图片和视频互斥)。
| 参数 | 类型 | 说明 |
|---|---|---|
text | str | None | 文本内容 |
images | List[str] | None | 图片路径列表(最多 9 张,与 video 互斥) |
video | str | None | 视频路径(与 images 互斥) |
remind_contacts | List[str] | None | 提醒谁看的联系人列表 |
permission | str | None | "公开" / "私密" / "谁可以看" / "不给谁看" |
permission_contacts | List[str] | None | 隐私联系人列表 |
permission_labels | List[str] | None | 隐私标签列表 |
- 返回
bool
like_moment(moment_item) / unlike_moment(moment_item)
对指定动态点赞/取消点赞,操作完自动关闭朋友圈窗口。
- moment_item
MomentItem— 朋友圈动态对象 - 返回
bool
comment_moment(moment_item, content)
对指定动态评论,操作完自动关闭朋友圈窗口。
- 返回
bool
like_moment_when(func, count=10, position="top")
条件批量点赞:遍历朋友圈,回调返回 True 时点赞。
- func
callable— 签名func(liked_count: int, item: MomentItem) -> bool - 返回
List[MomentItem]— 成功点赞的动态列表
comment_moment_when(func, count=10, position="top")
条件批量评论:遍历朋友圈,回调返回评论内容时评论。
- func
callable— 签名func(commented_count: int, item: MomentItem) -> str | None - 返回
List[MomentItem]— 成功评论的动态列表
capture_moment(moment_item)
对指定动态截图,操作完自动关闭朋友圈窗口。
- 返回
bytes— PNG 格式
消息监听
on(events=None)
注册事件处理器(装饰器)。
@wx.on(Event.TEXT)
def handler(weixin, chat, message):
print(message.content)
@wx.on([Event.TEXT, Event.IMAGE])
def on_multi(weixin, chat, message):
print(message.type_label)
@wx.on() # 监听所有消息
def on_all(weixin, chat, message):
print(message)once(events=None)
注册一次性事件处理器。
off(events=None, func=None)
移除事件处理器。
add_chat_listen(names)
注册要监听的聊天窗口。
- names
str | List[str] - 返回
List[SeparateChat]
add_all_chats_listen()
自动发现并注册所有已打开的独立聊天窗口。
- 返回
List[SeparateChat]
remove_chat_listen(names)
移除指定聊天的监听。
- names
str | List[str]
remove_all_chats_listen()
移除所有聊天监听。
run(interval=0.1, idle_interval=0.1, auto_scan=False, listen_mode="ui")
启动消息监听(阻塞运行,Ctrl+C 退出)。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
interval | float | 0.1 | 有新消息时的轮询间隔(秒) |
idle_interval | float | 0.1 | 无新消息时的轮询间隔(秒) |
auto_scan | bool | False | UI 模式下是否自动扫描新窗口 |
listen_mode | str | "ui" | 监听模式:"ui"(UI 自动化)或 "db"(数据库监听) |
数据库模式(listen_mode="db"):
- 通过监控微信 SQLite WAL 文件变化检测新消息
- 无需打开独立窗口,自动监听所有会话
- 需要指定
pid参数和管理员权限 - 回调中
chat固定为None,message为dict字典 - 详见 消息监听 - 数据库监听模式
数据库模式 message 字段:
| 字段 | 说明 |
|---|---|
id | local_id(本地消息 ID) |
msg_id | server_id(服务器消息 ID) |
type | 消息类型(对应 DBEvent 枚举值) |
is_sender | 是否为自己发送(1=是, 0=否) |
msg | 消息内容(文本或解析后的字典) |
from_wxid | 发送者 wxid |
sender | 发送者昵称 |
to_wxid | 接收者 wxid |
receiver | 接收者昵称 |
room_wxid | 群聊 wxid |
room_nickname | 群聊昵称 |
at_user_list | @用户列表 |
create_time | 消息创建时间戳 |
stop()
停止监听。
通话
voice_call(nickname)
发起语音通话。
- 返回
VoipCall
video_call(nickname)
发起视频通话。
- 返回
VoipCall
设置
账号与登录
| 方法 | 返回 | 说明 |
|---|---|---|
get_account_info() | dict | 获取账号信息(昵称、微信号、登录方式等) |
get_login_method() | str | 获取当前登录方式 |
set_login_method(method) | — | 切换登录方式 |
logout() | — | 退出登录 |
存储
| 方法 | 返回 | 说明 |
|---|---|---|
get_storage_info() | dict | 获取存储空间详情 |
get_storage_path() | str | 获取当前存储位置路径 |
change_storage_path(storage_path) | — | 更改微信存储位置 |
manage_storage() | — | 打开存储空间管理窗口 |
clean_redundant_data() | — | 清理历史版本冗余数据 |
clean_cache() | — | 清理缓存 |
clear_all_chats_history() | — | 清空全部聊天记录 |
get_keep_chat_history() | bool | 获取"保留聊天记录"开关状态 |
set_keep_chat_history(enable) | — | 设置"保留聊天记录"开关 |
外观与语言
| 方法 | 返回 | 说明 |
|---|---|---|
get_language() | str | 获取当前语言设置 |
set_language(language) | — | 切换语言 |
get_appearance() | str | 获取外观设置 |
set_appearance(appearance) | — | 设置外观 |
get_font_size() | int | 获取当前字体大小 |
set_font_size(size) | — | 设置字体大小(0~80,步长 10) |
通用设置
| 方法 | 返回 | 说明 |
|---|---|---|
get_auto_start() | bool | 开机自启动状态 |
set_auto_start(enable) | — | 设置开机自启动 |
get_auto_update() | bool | 自动更新状态 |
set_auto_update(enable) | — | 设置自动更新 |
get_auto_download() | dict | 自动下载设置 {"enabled": bool, "size_mb": int} |
set_auto_download(enable, size_mb=None) | — | 设置自动下载 |
聊天设置
| 方法 | 返回 | 说明 |
|---|---|---|
get_translate_language() | str | 文字翻译目标语言 |
set_translate_language(language) | — | 设置翻译目标语言 |
get_auto_translate() | bool | 自动翻译开关 |
set_auto_translate(enable) | — | 设置自动翻译 |
get_readonly_file() | bool | 以只读方式打开文件 |
set_readonly_file(enable) | — | 设置只读打开文件 |
get_show_search_history() | bool | 显示网络搜索历史 |
set_show_search_history(enable) | — | 设置搜索历史显示 |
get_auto_voice_to_text() | bool | 语音消息自动转文字 |
set_auto_voice_to_text(enable) | — | 设置语音自动转文字 |
get_use_system_browser() | bool | 使用系统浏览器打开网页 |
set_use_system_browser(enable) | — | 设置使用系统浏览器 |
窗口与截图设置
| 方法 | 返回 | 说明 |
|---|---|---|
get_keep_window_on_screenshot() | bool | 截图时保留当前窗口 |
set_keep_window_on_screenshot(enable) | — | 设置截图时保留窗口 |
get_hide_on_screen_share() | bool | 演示屏幕时隐藏微信 |
set_hide_on_screen_share(enable) | — | 设置演示时隐藏微信 |
通知设置
| 方法 | 返回 | 说明 |
|---|---|---|
get_notification_info() | dict | 获取通知设置信息 |
set_notification_info(**kwargs) | — | 设置通知信息 |
get_message_notification_sound() | bool | 新消息通知声音 |
set_message_notification_sound(enable) | — | 设置通知声音 |
get_voip_notification_sound() | bool | 语音/视频通话通知声音 |
set_voip_notification_sound(enable) | — | 设置通话通知声音 |
get_moment_notification_badge() | bool | 通知标记朋友圈 |
set_moment_notification_badge(enable) | — | 设置朋友圈通知标记 |
get_game_notification_badge() | bool | 通知标记游戏 |
set_game_notification_badge(enable) | — | 设置游戏通知标记 |
get_only_friend_interaction_reminder() | bool | 仅提醒朋友与我的互动 |
set_only_friend_interaction_reminder(enable) | — | 设置仅朋友互动提醒 |
快捷键设置
| 方法 | 返回 | 说明 |
|---|---|---|
get_shortcut_info() | dict | 获取快捷键设置信息 |
reset_shortcuts() | — | 恢复快捷键默认设置 |
插件
| 方法 | 返回 | 说明 |
|---|---|---|
get_plugins() | List[dict] | 获取插件列表 |
download_plugin(plugin_name) | bool | 下载插件 |
关于与更新
| 方法 | 返回 | 说明 |
|---|---|---|
get_about_info() | dict | 获取关于微信页面信息 |
check_update() | WeixinUpdate | 检查微信更新 |
open_help() | — | 打开微信帮助页面 |
upload_log() | — | 上传微信日志 |
open_feedback() | — | 打开意见反馈页面 |
open_privacy_agreement() | — | 打开隐私协议 |
open_service_agreement() | — | 打开服务协议 |
收藏
get_collections(category="全部收藏", count=None, speed=5)
获取收藏列表。
- category
str— 收藏分类 - count
int | None— 获取数量,None 获取全部 - speed
int— 滚动速度 - 返回
List[Collection]
search_collections(keyword)
搜索收藏。
- 返回
List[Collection]
create_collection_note(content=None)
新建收藏笔记。
- 返回
NoteEditor
聊天文件
open_file_manager(filter_type=None)
打开聊天文件管理器。
- filter_type
str | None— 文件类型过滤 - 返回
bool
search_files(keyword)
搜索聊天文件。
- 返回
List[ChatFile]
get_files(filter_type=None)
获取聊天文件列表。
- 返回
List[ChatFile]
状态与检查
is_locked()
检查微信是否已锁定。
- 返回
bool
check_new_messages() / check_new_contacts() / check_new_moments()
检查是否有新通知(通过导航栏红点像素检测)。
- 返回
bool
get_self_profile()
获取当前登录账号信息。
- 返回
dict—{"nickname": str, "account": str}
get_self_info()
获取当前登录账号信息(含头像)。
- 返回
dict
快捷键
shortcut(name)
通过快捷键名称执行对应的键盘快捷键。
支持的名称(见 Weixin.SHORTCUTS):
| 名称 | 快捷键 |
|---|---|
"发送消息" | Enter |
"语音输入文字" | Ctrl+Win |
"截图" | Alt+A |
"锁定" | Ctrl+L |
"显示窗口" | Ctrl+Alt+W |
也可以直接传入按键组合字符串,如 "Ctrl+Shift+A"。
wakeup()
唤醒微信窗口(Ctrl+Alt+W)。
lock()
锁定微信(Ctrl+L)。
capture()
调用截图快捷键(Alt+A)。
voice_input()
语音输入文字(Ctrl+Win)。
enter()
发送消息(Enter)。
窗口操作
继承自 WeixinWindow:
wx.activate() # 激活窗口
wx.minimize() # 最小化
wx.maximize() # 最大化
wx.restore() # 还原
wx.close() # 关闭
wx.pin() # 置顶
wx.unpin() # 取消置顶
wx.move_offscreen() # 移到屏幕外
wx.move_back() # 移回原位click(control, button="left", click="once")
点击 uiautomation 控件。根据 background 属性选择点击方式。
- control
Control— uiautomation 控件对象 - button
str—"left"/"right"/"middle" - click
str—"once"/"double"
微信更新
find_new_version_window()
检测是否弹出了新版本更新窗口。
- 返回
bool
ignore_version_update()
忽略本次更新。
update_new_version()
更新新版本。
process_later()
稍后处理。
OCR
ocr(image) / get_image_text(image)
识别图片中的文字。
- image
bytes | str— 图片字节数据或文件路径 - 返回
dict—{text: {center, left_top, right_bottom, width, height}}
截图
get_screenshot()
对微信主窗口截图。
- 返回
bytes— PNG 格式
screenshot(save_path)
截图并保存到文件。
类方法
Weixin.open(install_path=None, timeout=30)
启动一个新的微信客户端,返回 PID(支持多开)。
- install_path
str | None— 微信安装路径 - timeout
float— 等待启动超时(秒) - 返回
int— 新进程 PID