python爬虫笔记:微信自发机器人2之微信自动发送

前言

上篇讲到已经得到了需要爬取的商品信息,还需要怎么通过微信自动化发送出去。
本来想使用web版微信,使用ichat模块,尝试了一番发现,竟然已经被官方给封了,那只能通过微信window版尝试自动化发送。

找到微信聊天窗口

首先需要打开微信windows版,然后把我们需要的发送的聊天窗口,单独打开,不能合并在一起
不然会检测不到窗口,如图:
python爬虫笔记:微信自发机器人2之微信自动发送_第1张图片

def FindWindow(title_name):
    win = win32gui.FindWindow(None, title_name)
    print("find the window:%x" % win)
    if win != 0:
        win32gui.ShowWindow(win, win32con.SW_SHOWMINIMIZED) #enable and minimize window
        win32gui.ShowWindow(win, win32con.SW_SHOWNORMAL)    #enable and show window
        win32gui.ShowWindow(win, win32con.SW_SHOW)  #enable window
        win32gui.SetWindowPos(win, win32con.HWND_TOPMOST, 100, 100, 300, 300, win32con.SWP_SHOWWINDOW)
        win32gui.SetForegroundWindow(win)  # get control
        time.sleep(1)
    else:
        print('please note:cannot find [%s] this person(or group),please activate the window!'%title_name)
        exit()

控制剪切板

打开windows的剪贴板,先清空再将文本复制在剪贴板里,文本格式为:CF_UNICODETEXT
图片的格式为: CF_DIB

def cp_txt_clipboard(txt):  #place text file to clipboard
    clipboard.OpenClipboard()
    clipboard.EmptyClipboard()
    clipboard.SetClipboardData(win32con.CF_UNICODETEXT,txt)
    clipboard.CloseClipboard()

def cp_pic_clipboard(img):  #place pic file to clipboard
    clipboard.OpenClipboard()
    clipboard.EmptyClipboard()
    clipboard.SetClipboardData(win32con.CF_DIB,img)
    clipboard.CloseClipboard()

ctrl + V 和Alt + S的组合键

通过模拟这2个组合键,把需要粘贴的txt放到聊天窗口并发送

def ctrl_v():
    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 alt_s():
    win32api.keybd_event(18, 0, 0, 0)    #Alt  
    win32api.keybd_event(83,0,0,0) #s
    win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
    win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)

微信发送文字

def send_txt(txt):  #place text file to clipboard
    cp_txt_clipboard(txt)
    ctrl_v()
    alt_s()
    time.sleep(1)

微信发送图片

def send_pic(pathfile):
    img = Image.open(pathfile)
    output = BytesIO()
    img.convert("RGB").save(output, "BMP")
    data = output.getvalue()[14:]# remove bmp file header
    output.close()
    cp_pic_clipboard(data)
    ctrl_v()
    alt_s()
    time.sleep(1)

发送消息大致流程就是这样了,文字和图片的发送过程也都已经准备就绪。

实现自动化发送消息

def main():
	title_name='File Transfer'#单独打开,好友名称
	get_windows(title_name)
    url_data = get_meiguang()
    index = 0
    for i in url_data:
        send_pic('%s.jpg'%str(index))
        index = index + 1
        send_txt(i['TaoBaoTitle'])
        send_txt(i['Recommend'])
        send_txt(i['koulin'])
        time.sleep(5)

简单定义一个main函数,然后直接调用,写的比较粗糙,只是实现可基础功能,还可以增加更多功能,让它变得更加智能,跟人性化。

后续还有时间再继续优化优化。。。

你可能感兴趣的:(微信控制,自动化脚本,数据分析)