用python 自动给微信好友发消息

之前网页端的微信可以用时,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)

 

                 

                 

你可能感兴趣的:(个人感悟,python)