Python实现微信自动发消息:基于鼠标模拟的解决方案
本文介绍如何利用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操作微信自动发消息的实现(微信聊天机器人)介绍完毕。更多相关技术内容可查阅本站往期文章或继续浏览后续章节,感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













