itchat 已彻底失效,2026年起无法登录;推荐用pywinauto(backend='win32')做GUI自动化,注意窗口定位、输入稳定性及锁屏问题。

itchat 已失效,别再试了
2026 年起,itchat 完全无法登录,扫码后立即报错 ValueError: Invalid QR code 或直接卡在“等待微信确认”。这不是你网络或二维码的问题,是微信服务端已彻底封禁其协议握手逻辑。官方文档早已 404,GitHub 仓库 last commit 停在 2022 年,社区无人维护。强行 pip install itchat 后运行 itchat.auto_login(),只会返回空会话或抛出 requests.exceptions.ConnectionError。
替代方案只有两个方向:GUI 自动化(操作真实微信窗口)或逆向新协议(风险高、门槛高、易封号)。前者稳定可控,后者不推荐个人项目使用。
pywinauto 连不上微信主窗口?检查 backend 和 title
常见错误是代码执行到 app.connect(path=...) 成功,但 app.window(title="微信", class_name="WeChatMainWndForPC") 找不到窗口,抛出 ElementNotFoundError。根本原因不是微信没开,而是:
- Windows 系统启用了“深色模式”或高 DPI 缩放,导致 UIA backend 识别 title 失败;
- 微信版本升级后 class_name 变更为
WeChatMainWndForPC2或带空格/特殊字符的变体; - 后台运行时微信被最小化或失去焦点,UIA 层级树未刷新。
实操建议:
- 改用
backend='win32'初始化 Application,它对窗口类名更宽容; - 用
app.windows()打印所有匹配进程窗口,人工确认真实title和class_name; - 加容错等待:
win.wait('visible', timeout=10); - 避免依赖“文件传输助手”这类名称含空格/标点的 ListItem,优先用索引定位或搜索框输入联系人。
立即学习“Python免费学习笔记(深入)”;
发消息总卡在输入框?type_keys 不如 send_keys + ENTER 稳定
edit_msg.type_keys('hello')在部分微信版本中会漏字、乱序或触发输入法切换,尤其中文环境下。这不是 pywinauto 的 bug,是微信编辑控件对 WM_CHAR 消息的处理异常。更可靠的做法:
- 先用
edit_msg.set_text('')清空输入框; - 再用
pyperclip.copy('你好!')+send_keys('^v')(Ctrl+V)粘贴; - 最后调用
send_keys('{ENTER}')发送; - 全程加
time.sleep(0.3)间隔,避免 Windows 消息队列溢出。示例关键片段:
from pywinauto.keyboard import send_keys<br>edit_msg.set_text('')<br>pyperclip.copy('测试消息')<br>edit_msg.click_input()<br>send_keys('^v')<br>time.sleep(0.3)<br>send_keys('{ENTER}')定时任务里跑自动发消息,微信锁屏怎么办
Windows 计划任务以“不显示界面”方式运行时,微信会被系统判定为无交互状态,几秒后自动锁屏(显示“手机解锁后才能使用”),导致后续所有控件定位失败。
必须绕过这个限制:
- 计划任务的“常规”选项卡中,勾选
不管用户是否登录都要运行→ 改为只在用户登录时运行; - “设置”选项卡中,取消勾选
如果任务已在运行,请勿启动新实例; - 脚本开头强制唤起并聚焦微信:
app.top_window().set_focus(); - 避免在锁屏状态下启动任务——可加判断:
if not win.is_visible(): win.restore()。真正难搞的从来不是代码怎么写,而是微信每次热更新都会悄悄改掉一个 class_name、一个控件 role,或者某天突然拦截 clipboard 写入。你得习惯每两周手动验证一次定位逻辑。
- 计划任务的“常规”选项卡中,勾选
- 先用
- 改用










