女友经常大半夜缠着你,让你陪她来聊天该咋办?
不要慌……会Python的我不会被这点小事所难倒
今天教你用Python开发一个AI消息自动回复机器人
基于pyautogui模块开发
本文仅消息回复内容,并不是十分丰富,你可以在此基础上自行扩展
比如接入第三方机器人API
程序设计流程
如何获取坐标位置? 获取坐标位置,我们可以使用wx自带的截图工具,通过移动鼠标来确定坐标位置
代码实战 先来观察一番,发现微信在收到新消息时会有一个特征:在聊天列表会有一条新消息并带一个红色的小“1”图标;如下所示
我们把这个小“1”图标截图,并放至项目的目录里
发现这个规律后,我们可以使用pyautogui这个包的
locateCenterOnScreen() 方法来找到小“1”图标在整个屏幕中的坐标位置。一:找到图标了我们需要去点击这条新消息在屏幕中的坐标位置:
location = pg.locateCenterOnScreen('img/newmsg.png', confidence=0.9)
二:右击复制消息至剪切板
pg.click(pos[0], pos[1], button='right') x, y = pg.locateCenterOnScreen('img/copy.png', confidence=0.9) pg.click(x, y, button='left')
三:获取剪切板中的内容,并获取的内容传给自定义消息函数
text = getCliText().decode('GB2312') msg = message(text)
四:点击输入框所在坐标位置,并复制最后一条消息内容
pg.click(inputPos[0], inputPos[1], button='left') pc.copy(msg)
五:粘贴匹配到的消息内容,并发送新消息
pg.hotkey('ctrl', 'v') pg.hotkey('enter') print(f'收到消息:{text}') print(f'发送消息:{msg}')
六:重新右击消息联系人,并点击不显示该聊天(避免下次最新消息变成已读状态)
pg.click(location.x, location.y, button='right') dispos = pg.locateCenterOnScreen('img/undisplay.png', confidence=0.9) pg.click(dispos.x, dispos.y, button='left')
上述步骤三中的函数:
获取剪切板
def getCliText(): wc.OpenClipboard() text = wc.GetClipboardData(win32con.CF_TEXT) wc.CloseClipboard() return text
自定义消息函数
def message(msg): try: keyword = { '你是谁': '我是你的宝贝啊~', '哈哈哈': '什么事情这么开心?', '早安': '早安呀~', '在干吗': '在想你呀宝' } return keyword[msg] except: return '暂时还不能理解你在说什么……'
最后奉上全部代码:
import time, win32con import win32clipboard as wc import pyperclip as pc import pyautogui as pg # 设置操作间隙为1s pg.PAUSE = 1 # 最后一条消息所在坐标位置 pos = (1349, 754) # 输入框所在坐标位置 inputPos = (1304, 875) # 获取剪切板内容 def getCliText(): wc.OpenClipboard() text = wc.GetClipboardData(win32con.CF_TEXT) wc.CloseClipboard() return text # 自定义消息函数(如果为匹配到消息则返回暂时还不理解你在说什么…… def message(msg): try: keyword = { '你是谁': '我是你的宝贝啊~', '哈哈哈': '什么事情这么开心?', '早安': '早安呀~', '在干吗': '在想你呀宝' } return keyword[msg] except: return '暂时还不能理解你在说什么……' def send_msg(): while True: # 获取新消息在屏幕中的坐标位置 location = pg.locateCenterOnScreen('img/newmsg.png', confidence=0.9) # 如果找到新消息的坐标位置 if location is not None: print(f'\r{location}') # 点击新消息所在坐标位置并右键复制最后一条消息在屏幕中的坐标位置 pg.click(location.x, location.y, button='left') pg.click(pos[0], pos[1], button='right') x, y = pg.locateCenterOnScreen('img/copy.png', confidence=0.9) pg.click(x, y, button='left') # 获取剪切板中的内容,并获取的内容传给自定义消息函数 text = getCliText().decode('GB2312') msg = message(text) # 点击输入框所在坐标位置 pg.click(inputPos[0], inputPos[1], button='left') pc.copy(msg) # 粘贴新匹配到消息,并发送 pg.hotkey('ctrl', 'v') pg.hotkey('enter') print(f'收到消息:{text}') print(f'发送消息:{msg}') # 重新右击消息联系人,并点击不显示该聊天(避免下次最新消息变成已读状态) pg.click(location.x, location.y, button='right') dispos = pg.locateCenterOnScreen('img/undisplay.png', confidence=0.9) pg.click(dispos.x, dispos.y, button='left') if __name__ == '__main__': send_msg()