第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 使用Python实现微信发送文本消息 图片以及附件

使用Python实现微信发送文本消息 图片以及附件

时间:2019-08-17 20:52:01

相关推荐

使用Python实现微信发送文本消息 图片以及附件

使用Python实现微信发送文本消息、图片以及附件

因为目前很多微信账号已经不支持网页版的操作了,因此无法使用之前的itchat这一类对微信进行操作。

为此,选择对微信PC端进行开发。

选择的方式比较笨拙,主要是通过windows的剪切板和通过位置定位模拟各种操作来实现的。

针对文本格式,比较简单,只需要直接调用剪贴板即可。

def setText(aString):w.OpenClipboard()w.EmptyClipboard()w.SetClipboardData(win32con.CF_UNICODETEXT, aString)w.CloseClipboard()

win32con.CF_UNICODETEXT表示采用文本的方式写入数据,可以避免中文乱码。

对于图片格式的,因为剪切板的特性,需要将图片保存成流的形式,然后进行写入的操作。

def setImage(pathfile):img = Image.open(pathfile)output = BytesIO() argument expected, got 'bytes'img.convert("RGB").save(output, "BMP") # 以BMP格式保存流data = output.getvalue()[14:] # bmp文件头14个字节丢弃output.close()w.OpenClipboard()w.EmptyClipboard()w.SetClipboardData(win32con.CF_ENHMETAFILE, data)w.CloseClipboard()

针对附件,实现起来比较困难,选择通过PyQt5来辅助实现。

def setFile(pathfile):app = QtWidgets.QApplication([])data = QtCore.QMimeData()url = QtCore.QUrl.fromLocalFile(pathfile)data.setUrls([url])app.clipboard().setMimeData(data)clipboard = QtWidgets.QApplication.clipboard()

在实现数据存入剪切板后,需要进行微信的模拟操作。

模拟移动鼠标的操作、单击操作、回车操作、复制操作和发送操作。

#模拟鼠标移动def movePos(x, y):win32api.SetCursorPos((x, y))# 模拟单击def click():win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)# 模拟回车def enter():win32api.keybd_event(13, 0, 0, 0)win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)# 模拟复制操作def ctrlV():win32api.keybd_event(17, 0, 0, 0) # ctrlwin32api.keybd_event(86, 0, 0, 0) # Vwin32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)#模拟发送快捷键 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)

最后,通过调用上述函数,实现微信发送的功能。

mes是发送的内容。如果是文本类型,就直接将消息写入;如果是图片类型或者附件,则写入的是对应文件的路径,绝对路径和相对路径均可,建议写成绝对路径。

senders是要发送的人,可以选择批量发送给多个人或者群。

types是要发送的内容的类型。如果是文本格式,则置为1;如果是图片格式,则置为2;如果是附件格式,则置为3.

def SendWeChat(mes,senders,types):hwnd = win32gui.FindWindow("WeChatMainWndForPC", "微信")if not hwnd:return Falsehwnd_fore = win32gui.GetForegroundWindow()#将窗体置为最前if hwnd!=hwnd_fore:win32gui.SetForegroundWindow(hwnd)time.sleep(2)win_hd=win32gui.GetForegroundWindow()#将窗体放在左上角win32gui.MoveWindow(hwnd, 0, 0, 1000, 700, True)time.sleep(2)for name in senders:# 1.移动鼠标到通讯录位置,单击打开通讯录movePos(28, 147)click()# 2.移动鼠标到搜索框,单击,输入要搜索的名字,即微信名movePos(148, 35)click()setText(name)ctrlV()time.sleep(2)enter()time.sleep(2)# 3.复制要发送的消息,发送if types == 1:setText(mes)elif types== 2:setImage(mes)elif types==3:setFile(mes)ctrlV()altS()

最后只需要调用SendWeChat函数即可完成微信的发送。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。