Python实现微信自动发消息:基于鼠标模拟的解决方案

周叙
周叙
发布时间:2026-10-14| 2人浏览过
原创

本文介绍如何利用Python模拟鼠标和键盘操作来实现微信自动发消息。针对itchat库因网页版接口失效无法使用的现状,以及duilib界面难以获取控件的问题,文章提出通过固定窗口坐标、模拟点击通讯录、搜索联系人及发送消息的步骤。文中提供了基于win32gui和win32api的核心代码片段,展示了如何控制剪贴板、模拟快捷键及窗口移动,为无法使用官方API的用户提供了一种可行的替代方案。

Python微信自动发消息实现概述

前言

技术难点与解决方案分析

近期在探索Python编程时,发现了一个微信自动发消息的示例Demo,起初尝试运行却未能成功。主要原因在于该Demo依赖itchat库,该库通过微信网页版接口进行交互,而目前微信网页版登录功能已停用,导致程序失效。随后尝试第二种方案,试图定位微信界面中的搜索框控件,通过控件交互来查找联系人并发送消息,但再次失败。经深入排查发现,微信客户端界面由duilib构建,其控件仅为逻辑存在,实际界面通过绘制实现,程序无法直接获取底层控件句柄。因此,最终只能采用模拟鼠标移动和点击的方式来完成任务。

自动化操作步骤详解

1.启动微信程序,并将其窗口固定于屏幕左上角,以便后续通过固定坐标精准定位微信内的各个功能区域。

2.将鼠标光标移动至微信左侧的“通讯录”按钮位置,执行单击操作以打开通讯录列表。

3.将鼠标移动至搜索框区域,输入目标联系人的微信名称后按回车键,从而打开与该联系人的聊天对话框。此处需说明,先打开通讯录再进行搜索比直接搜索更稳定,直接搜索可能存在Bug,若读者有其他更优解决方案,欢迎交流。

4.将预设的发送内容复制到聊天输入框,随后按回车键或组合键Alt+S即可发送消息。

上述流程即为基本操作步骤,以下是实现该功能的部分核心代码。

核心代码实现解析


import win32clipboard as w
import win32con
import win32api
import win32gui
import time
 
 
#把文字放入剪贴板
def setText(aString):
  w.OpenClipboard()
  w.EmptyClipboard()
  w.SetClipboardData(win32con.CF_UNICODETEXT,aString)
  w.CloseClipboard()
 
#模拟ctrl+V
def ctrlV():
  win32api.keybd_event(17,0,0,0) #ctrl
  win32api.keybd_event(86,0,0,0) #V
  win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0)#释放按键
  win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)
 
#模拟alt+s
def altS():
  win32api.keybd_event(18,0,0,0)
  win32api.keybd_event(83,0,0,0)
  win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0)
  win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)
# 模拟enter
def enter():
  win32api.keybd_event(13,0,0,0)
  win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
#模拟单击
def click():
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
#移动鼠标的位置
def movePos(x,y):
  win32api.SetCursorPos((x,y))
 
if __name__=="__main__":
  
  #获取鼠标当前位置
  #hwnd=win32gui.FindWindow("MozillaWindowClass",None)
  hwnd = win32gui.FindWindow("WeChatMainWndForPC", None)
  win32gui.ShowWindow(hwnd,win32con.SW_SHOW)
  win32gui.MoveWindow(hwnd,0,0,1000,700,True)
  time.sleep(0.01)
  #1.移动鼠标到通讯录位置,单击打开通讯录
  movePos(28,147)
  click()
  #2.移动鼠标到搜索框,单击,输入要搜索的名字
  movePos(148,35)
  click()
  setText('胡歌')
  ctrlV()
  time.sleep(1) #别问我为什么要停1秒,问就是给微信一个反应的时间,他反应慢反应不过来,其他位置暂停的原因同样
  enter()
  time.sleep(1)
  #3.复制要发送的消息,发送
  setText('你好啊')
  ctrlV()
  altS()

完整代码已托管于GitHub仓库,欢迎下载参考:https://github.com/p910/python

至此,关于Python操作微信自动发消息的实现(微信聊天机器人)介绍完毕。更多相关技术内容可查阅本站往期文章或继续浏览后续章节,感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。