之前网页端的微信可以用时,python用itchat库就可以很好的自动给联系人发消息,现在网页端不可用了,而且微信客户端的通信协议我们是不可能知道的,所以模拟客户端给微信服务器发数据太过麻烦,需要不停的抓包,微信信息肯定是加密的,还需要破解加密信息等,工程量太大,另一个可行的方案是反编译微信,不过你没相关的知识,工具 也是不可能完成的。
有个替代的方法就是用python去模拟鼠标键盘操作,然后在微信窗口发送消息就行了。(仅限微信电脑版)
步骤如下,1.找到微信窗口,点击下放到最前端
2.在输入框中点一下
3.输入信息(或者按下ctrl v)(剪切板里面有提前设置好的语句)
4.点击发送或者输入回车
附上代码如下:
需要安装的库 pywin32 win32gui win32con
代码简要说明:win32gui.FindWindow(None,"微信")找到微信窗口,就是微信主窗口,你想和谁聊天就在主窗口中点击到那个界面,一切准备好后,再来执行代码,这样代码只能永远给一个人发消息,不支持切换人
如果你想在代码里面和n个人聊天,要双击这n个人,这样会有n(n个人)+1个窗口(主窗口),
比如张三好友 可以这样zhangsan=win32gui.FindWindow(None,"张三")就是找到张三的微信聊天界面,后面可以用zhangsan这个handle去给张三发消息了,原理同上,执行上述步骤
写到这个是不是有个大胆的想法了,然后每天定时给妹子表白呢,可以每天爬取特定网页的数据,比如天气,咳咳,自己组织下肉麻的语句。然后写个定时任务,到固定时间运行下。
import win32gui
import win32api
import win32con
import time
import random
import win32clipboard as w
def getClipBoardText():
w.OpenClipboard()
d=w.GetClipboardData(win32con.CF_TEXT)
w.CloseClipboard()
return d
def setClipBoardText(data):
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardText(data)
w.CloseClipboard()
def ctrlV():
win32api.keybd_event(17, 0, 0, 0) # ctrl键位码是17
win32api.keybd_event(86, 0, 0, 0) # v键位码是86
win32api.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) # Alt键位码
win32api.keybd_event(83, 0, 0, 0) # s键位码
win32api.keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
win32api.keybd_event(83, 0, win32con.KEYEVENTF_KEYUP, 0)
weixin=win32gui.FindWindow(None,"微信")
win32gui.SetForegroundWindow(weixin)
left, top, right, bottom = win32gui.GetWindowRect(weixin)
print(left,top,right,bottom)
theWordYouWantToSay=("hahhahhahhahhahahahhhahahahahahhhhhahhhahhhahahahahha","hhahahhahhahahahahhaha")
for i in range(0,50):
click_x=732-423+left+80#亲测不管怎么改变微信窗口打下,click_x 和clilck_y总能点到输入框
click_y=bottom-(918-775)+60
win32api.SetCursorPos([click_x,click_y])
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
setClipBoardText(theWordYouWantToSay[random.randint(0,len(theWordYouWantToSay)-1)])
ctrlV()
# 发送回车
win32api.keybd_event(13,0,0,0)
win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
time.sleep(0.3)