你现在看到的一个简单的微信自动聊天器,当你女朋友发来消息时,它会自动帮你回复预先设置的内容,当你有多个女朋友同时来消息时,它也能应对自如,看完这个视频,你就能学会做这个。
什么是自动化
我们今天要说的自动化是单指电脑这块的,目的是为了提升工作效率或者解决重复劳动的问题,之前有个做设计同学遇到这样一个问题:一个文本文件,里面放着几十个图片素材的链接,怎么快速的保存这些图片呢?
正常人的做法一般是一个个打开这些链接,然后再保存;而使用自动化则可以自动一个个打开并保存,也可以同时打开并保存,比起手动打开不但时间更短,更避免了做一些无意义的重复劳动。
我早期实践自动化的方案
我印象中最早接触自动化,是在参加学校网页设计大赛的时候,发现了评选作品网页的bug,为了刷作品票,写了一个自动刷新并点票的程序,是使用易语言写的,最后我小心翼翼的刷票得了第二名,不敢刷的太猛!!!
还有就是在做电商运营的时候,因为经常要xx出库,所以就用按键精灵写了个自动出库的脚本,当时出错率还是蛮高的,但是经过不段的调试,最后终于完美省出每天需要30分钟手动出库的时间。
可见,自动化对我还是非常有帮助的,你遇到需要重复劳动的事情又是什么呢?欢迎在弹幕上或者评论打出你遇到的问题,大家一起讨论解决吧!
pyautogui
上面我使用了易语言和按钮精灵来解决重复劳动的事情,而今天,我要使用python库pyautogui来实现自动化的操作,这个库有三个主要的模块,鼠标操作,键盘操作和图片操作。
鼠标操作
我们日常使用鼠标的操作,无非就是从a点到b点,然后按左键点击,按右键弹出菜单,中键拖拽,这些在pyautogui都有对应的API。
键盘操作
pyautogui不光可以监听到键盘的按下和弹起,还可以模拟组合热键,如万能键复制ctrl+c,粘贴ctrl+v,还有专门输入英文的API,如输入write(\’Hello,World\’)。虽然不支持直接输入中文,但是我们可以通过pyperclip类似的库先将中文copy到剪切板,再进行粘贴,就可以输入任意中文了。
图像操作
当我们使用浏览器时,是不是得找到浏览器的图标,然后再双击打开,在pyautogui中,我们可以使用简易的图像识别功能,来实现寻找图标的功能,还支持颜色值,像素块之类的识别。
微信自动聊天器
接下来,我们要使用pyautogui来实现一个简单的微信自动聊天器,它具备以下功能:
- 可以监听到来消息,并自动回复消息
- 自动回复的消息可以自定义
- 可以同时接收多条消息时,并一条一条的自动回复
监听并回复消息
首先,我们来实现第一个功能,监听消息,并自动回复,思考一下,微信来消息时,会出现一个醒目的数量标识,我们可以把这个数量标识截图保存,然后使用locateOnScreen载入,最后用一个while循环包裹起来。
有了数量标识的坐标后,我们就可以使用moveTo来移动鼠标,使用click来点击,使用write来写入回复的内容,这样自动回复也就好了。
自定义回复内容
首先,我们要有一个数组来存放随机的内容,然后使用random库的choice来返回一个随机内容。
对了,在pyautogui中不能直接输入中文,可以引入 pyperclip 库,先copy一下,然后再使用热键粘贴就可以回复中文了。
多条消息的回复
如果你觉得上面的的自动聊天器过于简单,你也可以使用EasyOCR库,对接下图灵机器人,可以做到识别消息内容调用智能聊天机器人自动回复,像真人聊天一样的。
结尾
最后,有需要【微信自动聊天器】的可以关注 程序员小兵” 微信公众号,回复 “微信自动聊天器” 获取代码,那我们下个视频见。
列出下代码吧。
import pyautogui
import pyperclip
import random
all_pos = pyautogui.locateAllOnScreen('./chat-dot3.png')
print(list(all_pos))
msg_list = [
'嗯嗯',
'哈哈哈',
'有趣',
'可以的',
'不错',
'对对对',
'真的吗',
]
try:
while True:
all_pos = pyautogui.locateAllOnScreen('./chat-dot3.png')
for pos in all_pos:
pyautogui.moveTo(pos.left, pos.top)
pyautogui.click(button='left', clicks=1, interval=0.25)
msg = random.choice(msg_list)
pyperclip.copy(msg)
pyautogui.hotkey('ctrl', 'v')
pyautogui.press('enter')
except KeyboardInterrupt:
print('\n')
评论(0)