微信自动回复

微信自动回复

文章目录

  • 微信自动回复
    • 自动回复步骤
    • 微信展开
    • 在微信消息区进行监测
    • 将微信聊天区截图
    • 回复信息
    • 实现多次回复(封装函数)
  • 结语

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

在这里插入图片描述

我们这里主要使用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 randomtry:# 用来保存微信的目标图片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 + cpg.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 textdef has_key():"""比对识别出来的文字是否是关键字如果返回-1,那么就不是关键字如果返回是其他数字,那么就是关键字"""for index, item in enumerate(key_list):if re_text == item:return indexelse:return -1def 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上传不了,所以大家可以自己进行尝试。

结语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/384289.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百日筑基第二十八天-23种设计模式-行为型总汇

百日筑基第二十八天-23种设计模式-行为型总汇 文章目录 百日筑基第二十八天-23种设计模式-行为型总汇前言模板方法模式简介模板方式的特点模板方法模式结构类图模板方式模式案例分析模板方法模式应用源码分析模板方法模式的注意事项和细节 迭代器模式迭代器模式结构类图迭代器模…

MySQL 约束 (constraint)

文章目录 约束(constraint)列级约束和表级约束给约束起名字(constraint)非空约束(no null)检查约束(check)唯一性约束 (unique)主键约束 (primary key)主键分类单一主键复合主键主键自增 (auto_increment) 外键约束外什…

cpp程序设计实践,类实现树链刨分以及计算几何类

程序设计要求 是某个cq高校期末程序设计实践作业,全部自己做的比较小众分值90。  试建立一个继承结构,以栈、队列为派生类,建立它们的抽象基类-Bag类,写出各个类的声明及定义,并实现如下功能:  统一命名…

C++基础知识:函数重载相关注意事项:1.引用作为重载条件,2.2.函数重载遇见函数默认参数。

1.引用作为重载条件 #include<iostream>using namespace std;//1.引用作为重载的条件 //int 和 const int 类型不同&#xff0c;所以可以作用重载条件 void fn(int &a) //int &a10;不合法 //10放在了常量区&#xff0c;而引用要么在栈区&#xff0c;要么在堆区{…

【Python】sqlite加密库pysqlcipher3编译安装步骤

目录 说明准备工作openssl编译sqlitetcl setup.py修改quote_argumentopenssl路径 安装加密示例代码测试附录参考 说明 pysqlcipher3是针对Python 3使用的pysqlcipher的一个分支&#xff0c; 尽管仍然维护对Python 2的支持。它仍然处于测试阶段&#xff0c; 尽管这个库包含的最…

网络安全常见错误及解决办法(更新中)

# 开启代理&#xff0c;无法连接网络 把代理关掉 # 上一秒还在安装tree&#xff0c;下一秒xshell就连接不上了 —》sshd服务的key这个文件权限过高&#xff0c;跟装tree没有关系&#xff0c;装一个epel 源&#xff0c;epel-release​ 部分命令&#xff1a;chmod 600 /etc/ssh…

pikauchu之Unsafe Fileupload(不安全的文件上传)

Client check&#xff08;客户检查&#xff09; 第一步先新建一个一句话木马 <?php eval($_POST[1]);?> 然后上传文件 有限制&#xff0c;只能上传那几种类型 现在看看源代码 我们将一句话木马文件的后缀改为png 然后用burp抓包&#xff0c;将png改成php 就能上传成功 …

Android Studio导入源码

在有源码并且编译环境可用的情况下&#xff1a; 1.生成导入AS所需的配置文件 在源码的根目录执行以下命令&#xff1a; source build/ensetup.sh lunch 要编译的项目 make idegen //这一步会生成out/host/linux-x86/framework/idegen.jar development/tools/idegen/idegen.sh…

Spring Boot集成canal快速入门demo

1.什么是canal&#xff1f; canal 是阿里开源的一款 MySQL 数据库增量日志解析工具&#xff0c;提供增量数据订阅和消费。 工作原理 MySQL主备复制原理 MySQL master 将数据变更写入二进制日志&#xff08;binary log&#xff09;, 日志中的记录叫做二进制日志事件&#xff…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十七章 Linux中断实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Spring AI (三) 提示词对象Prompt

3.提示词对象Prompt 3.1.Prompt Prompt类的作用是创建结构化提示词, 实现了ModelRequest<List<Message>>接口 Prompt(String contents)&#xff1a;创建一个包含指定内容的Prompt对象。 Prompt(String contents, ChatOptions modelOptions)&#xff1a;创建一个…

基于Qt的上位机通用框架

0.前言 最近一年多的时间一直在开发设备控制相关的软件&#xff0c;加上之前在聚光的两年时间&#xff0c;前前后后开发这种设备控制类型的上位机软件也有三年的时间了。总结出了一套基于Qt的上位机编程框架&#xff0c;核心思想类似于C#的依赖注入&#xff0c;对象的初始化都…

java计算机毕设课设—记账管理系统(附源码和安装视频)

这是什么系统&#xff1f; java计算机毕设课设—记账管理系统&#xff08;附源码和安装视频&#xff09; 记账管理系统主要用于财务人员可以从账务中判断公司的发展方向。对个人和家庭而言&#xff0c;通过记账可以制定日后的 消费计划&#xff0c;这样才能为理财划出清晰合理…

ATF-541M4全解析(一)

目录 一、描述二、规格三、各参数最大值四、25℃下的典型值 一、描述 安华高科技 (Avago Technologies) 的 ATF-541M4 是一款高线性度、低噪声、单电源供电的E-PHEMT&#xff0c;封装在一个微型无引脚封装中。 ATF-541M4 的小尺寸和低外形使其非常适合用于混合模块和其他空间…

C++:类和对象2

1.类的默认成员函数 默认成员函数就是用户没有显示实现编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们在不写的情况下编译器会默认生成6个默认成员函数&#xff0c;分别是构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;拷贝赋值运算…

Spark RPC框架详解

文章目录 前言Spark RPC模型概述RpcEndpointRpcEndpointRefRpcEnv 基于Netty的RPC实现NettyRpcEndpointRefNettyRpcEnv消息的发送消息的接收RpcEndpointRef的构造方式直接通过RpcEndpoint构造RpcEndpointRef通过消息发送RpcEndpointRef Endpoint的注册Dispatcher消息的投递消息…

masscan 端口扫描——(Golang 简单使用总结)

1. 前言 最近要做一个扫描 ip 端口的功能 扫描的工具有很多&#xff0c;但是如何做到短时间扫描大量的 ip 是个相对困难的事情。 市场上比较出名的工具有 masscan和nmap masscan 支持异步扫描&#xff0c;对多线程的利用很好&#xff0c;同时仅仅支持 syn 半开扫描&#xff…

【C++】——红黑树(手撕红黑树,彻底弄懂红黑树)

目录 前言 一 红黑树简介 二 为什么需要红黑树 三 红黑树的特性 四 红黑树的操作 4.1 变色操作 4.2 旋转操作 4.3 插入操作 4.4 红黑树插入代码实现 4.5 红黑树的删除 五 红黑树迭代器实现 总结 前言 我们之前都学过ALV树&#xff0c;AVL树的本质就是一颗平…

magento2 安装win环境和linux环境

win10 安装 安装前提&#xff0c;php,mysql,apach 或nginx 提前安装好 并且要php配置文件里&#xff0c;php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息&#xff0c;如果ssl信息没有&#xff0c;则可以忽略 填写域名和后台地址&#xff0…

Vue入门(二)常用指令

一、Vue 常用指令 Vue 常用指令 - 指令&#xff1a;是带有 v- 前缀的特殊属性&#xff0c;不同指令具有不同含义。例如 v-html&#xff0c;v-if&#xff0c;v-for。 - 使用指令时&#xff0c;通常编写在标签的属性上&#xff0c;值可以使用 JS 的表达式。 - 常用指令 二、常用…