微信自动回复

微信自动回复


嗨!收到一张超级美丽的风景图,愿你每天都能顺心!

在这里插入图片描述

我们这里主要使用pyautogui库,pyperclip库和CnOcr库来实现一个简易版的微信自动回复。

注意:这三个都是外部库,分别在终端输入pip install pyautogui,pip insatll pyperclip,pip install cnocr(cnocr的安装需要有c++的环境才能安装成功)

自动回复步骤

  • 微信展开。
  • 在微信消息区进行监测,有人发消息,我们就点开。
  • 将微信聊天区截图,提取文字。
  • 判断提取的文字是否为关键字,更具关键字进行相对应的回复。

导库

import pyautogui as pg
import pyclipper as pc
from cnocr import CnOcr
import time
import random

注:pg,pc是给库名取了个别名

微信展开

  • 对本电脑的微信图标进行一个识图,找到其中心点的位置
  • 对鼠标操作点击中心点的位置打开微信

这里是在我的电脑上截的微信图标
在这里插入图片描述

将我们的微信图标的地址复制下来

# 用来保存微信的目标图片
img_chat = "image-1.png"
# 获取图标的中心点的位置
chat_center = pg.locateCenterOnScreen(img_chat , confidence=0.95)

print(chat_center)

返回了一个元组类型的坐标(注意:识别图片时一定要让我们的微信图标在电脑上可以看到,即要缩小我们的编译器窗口。因此,我们可以增加一个异常处理!!!)
在这里插入图片描述

这样我们就能保证程序如果找不到图标的话,就会直接输出程序获取异常,而不是报错。
为了更好的解决这个问题,我们可以添加一个点击编辑器最小化的方法使得整个桌面的图标都可以被寻找。
在这里插入图片描述

try:
    img_ = "image-4.png"#这是最小化的图标路径
    _center = pg.locateCenterOnScreen(img_, confidence=0.5)
    pg.click(x=_center.x, y=_center.y,duration=1)
    time.sleep(2)
    # 用来保存微信的目标图片
    img_chat = "image-1.png"
    # 获取图标的中心点的位置
    chat_center = pg.locateCenterOnScreen(img_chat , confidence=0.95)
    print(chat_center)
except:
    print("程序获取异常")

接下来就是鼠标移动并点击的操作

import pyautogui as pg
import pyclipper as pc
from cnocr import CnOcr
import time
import random


try:
    # 用来保存微信的目标图片
    img_ = "image-4.png"
    _center = pg.locateCenterOnScreen(img_, confidence=0.5)  # 由于图标小,适当降低下精确度
    pg.click(x=_center.x, y=_center.y,duration=1)
    time.sleep(2)
    img_chat = "image-1.png"
    # 获取图标的中心点的位置
    chat_center = pg.locateCenterOnScreen(img_chat , confidence=0.95)
    # print(chat_center)
    pg.click(x=chat_center.x, y=chat_center.y, clicks=2, duration=1)
    time.sleep(2)
    img_screen = "image-5.png"
    sc_center = pg.locateCenterOnScreen(img_screen, confidence=0.5)
    pg.click(x=sc_center.x, y=sc_center.y, duration=1)
    time.sleep(2)
    img_red = "image-3.png"
    red_center = pg.locateCenterOnScreen(img_red, confidence=0.7)  # confidence是识别度
    pg.click(x=red_center.x, y=red_center.y, duration=1)
except:
    print("程序获取异常")

在微信消息区进行监测

  • 由于发了消息会有一个红点,所以我们截取一个红点的图片。(建议先将微信全屏)
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    在这里插入图片描述
    在这里插入图片描述

  • 接下来就要我们的鼠标点击全屏再点击这个红点进入聊天对话框。
    代码与前面类似

try:
    # 用来保存微信的目标图片
    img_chat = "image-1.png"
    # 获取图标的中心点的位置
    chat_center = pg.locateCenterOnScreen(img_chat , confidence=0.95)
    # print(chat_center)
    pg.click(x=chat_center.x, y=chat_center.y, clicks=2, duration=1)
    time.sleep(2)
    img_red = "image-3.png"
    red_center = pg.locateCenterOnScreen(img_red, confidence=0.7)  # confidence是识别度
    pg.click(x=red_center.x, y=red_center.y, duration=1)
except:
    print("程序获取异常")

将微信聊天区截图

将微信聊天区截图,提取文字

chat = "chat_screen.png"
# 顺序为top,left,width,heigh(top,left是截屏的起始像素点width,height以起始点开始计的长高,作用是截图)
pg.screenshot(chat, region[410, 75, 1510, 800])
# 将cnocr实例化
# 作用是提取文字信息
ocr = CnOcr()
out = ocr.ocr(chat)
time.sleep(2)
print(out[-1]['text'])

程序会截取设置区域的一张图片并识别里面的文字。
print(out)是将识别到的文字打印出来,值得注意的是此时打印出来的是字典的形式,而我们要的文本是最新弹出来的,所以是最后一个,就用-1去进行索引。
这是没有加上[-1][‘text’]时打印出来的
在这里插入图片描述

这是加了索引打印出来的
在这里插入图片描述

回复信息

我么已经提取到关键字了,那么接下来就是回复信息了

pg.click(900,1000) # 点击聊天区域框
if text == '你好啊':
    pc.copy('你也好')  # ctrl + c
    pg.hotkey("ctrl", "v")
    pg.press("enter")
else:
    pg.hotkey("嗯嗯")
    pg.press("enter")

这样,一次性的微信自动回复就完成了!!!

实现多次回复(封装函数)

import pyautogui as pg
import pyperclip as pc
from cnocr import CnOcr
import time
import random


# 关键字列表
key_list = ["在干嘛", "吃了没", "出来玩", "上号"]
# 关键字回复列表
reply_list = ["忙着呢", "吃过了", "去哪玩", "马上"]
# 非关键字回复列表
random_list = ["嗯嗯", "有道理", "好"]


def center_click(img_path, clicks, region=[]):
    """
    功能:
    1.对目标图片进行识别,返回中心值
    2.接收上一步中心值,对目标中心点击
    """
    if region is None:
        region = []
    chat_center = pg.locateCenterOnScreen(img_path, confidence=0.8)
    pg.click(x=chat_center.x, y=chat_center.y, clicks=clicks, duration=1)
    time.sleep(2)


def screen_ocr():
    """
    1.将微信聊天区进行截图
    2.将微信聊天区的文字提取出来
    3.text识别要回复的文字
    """
    chat = "chat_screen.png"
    pg.screenshot(chat, region=[410, 75, 1510, 800])
    ocr = CnOcr()
    out = ocr.ocr(chat)
    # 增加识别准确的可能性
    all_text = [i["text"]for i in out if i["score"] > 0.4]
    text = all_text[-1]
    return text


def has_key():
    """
    比对识别出来的文字是否是关键字
    如果返回-1,那么就不是关键字
    如果返回是其他数字,那么就是关键字
    """
    for index, item in enumerate(key_list):
        if re_text == item:
            return index
        else:
            return -1


def ctrl(random_text):
    """
    复制粘贴输入
    """
    pc.copy(random_text)
    pg.hotkey("ctrl", "v")
    pg.press("enter")


def reply():
    """
    选择回复信息
    :return:
    """
    if re_index == -1:
        random_text = random.choice(random_list)
        ctrl(random_text)
    else:
        random_text = reply_list[re_index]
        ctrl(random_text)


try:
    img_ = "image-4.png"
    center_click(img_path=img_, clicks=1)
    img_chat = "image-1.png"
    center_click(img_path=img_chat, clicks=2)
    img_screen = "image-5.png"
    center_click(img_path=img_screen, clicks=1)
except:
    print("程序运行异常")
while True:
    try:
        img_red = "image-3.png"
        center_click(img_path=img_red, clicks=1,region=[70,80,300,1050])
        pg.click(900,1000)
        re_text = screen_ocr()
        re_index = has_key()
        reply()
        time.sleep(3)
    except:
        print("暂时没有新消息")

注:有些数据要根据自己的实际情况写,由于博客受限,动态图超过5mb上传不了,所以大家可以自己进行尝试。

结语

本次分享就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区留言,如果给小伙伴们带来了一些收获,请留下你的小赞,你的点赞和关注将会成为博主分享每日学习的动力。

  • 32
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值