首页 技术 正文
技术 2022年11月6日
0 收藏 590 点赞 398 浏览 1786 个字

利用python在微信群中签到、抢沙发

注意

  • 程序仅能在电脑上运行,运行时需要保证群界面在最前端且不被移动。

背景

我是一名高中生(2020年),疫情期间,在家上网课,有的老师让我们在班群里签到。

其中一个群反应速度特别快,老师一说“签到吧”,不到1秒,近半个班的人就回复了。所以,要是抢到了沙发,就特别有成就感。


实现前

实现目标需做到两点:

  1. 判断是否提交签到,
  2. 提交签到。

思考:

1. 判断是否提交签到

也就是判断老师是否发表了签到消息。

由观察可知,在微信群中,若拉动条在最下端,这时群里来了新消息,且行数一定时,新消息会出现在固定位置。

而我们老师在发布签到通知时,总是发“签到吧”或者“同学们签到吧”之类文字,不会超过一行。因此消息行数固定为一行。

接下来通过分析新消息的头像,就可以判断信息是否是老师发送的,避免在有同学手滑提前回复时,程序出现误判;

如下图,是这时需判断发送人。
利用python在微信群中签到、抢沙发(适用于任何账号)

消息若是老师发的,那十有八九是通知签到,不是的话,发送就发送了吧。这么做可以省去程序对文本的分析。

所以,我们只要不断截屏检测该固定位置,判断是否是老师的头像,就可以判断是否应该签到了。

至于如何实现,我稍后说,下面介绍第二个需求的思考。

2. 提交签到

这里,使程序模拟键盘按下回车来发送消息。
利用python在微信群中签到、抢沙发(适用于任何账号)
提前打下发送信息,保持光标在编辑框中。

  • 综上,程序流程如下:

利用python在微信群中签到、抢沙发(适用于任何账号)

用PPT做的,我没能用Markdown做出来。


具体实现

首先是截屏,这里我使用的是pyautogui
截图用法如下:

pyautogui.screenshot(region=[710, 720, 500, 250])
# x, y , x1, y1

运行上述代码会截取屏幕 (x, y)(x + x1, y + y1) 区间的内容。

用IPython的话,图像会直接显示在控制台上。

然后,多次尝试,找到头像的坐标。

我进行了多次尝试。
利用python在微信群中签到、抢沙发(适用于任何账号)

找到位置后定义函数:

def getscreenshot():
return pyautogui.screenshot(region=[425,590,45,47])

注意,这个坐标不一定适用于你的电脑哦。

接下来,截取老师的头像,留作正确结果。用返回图像的save方法,保存图片到和程序的相同路径下,如XXX.save('老师的头像.png')

在加载时,用PIL模块的Image的open方法加载图片就好,如:

goal = Image.open('老师的头像.png')

我使用模块pynput模拟键盘。

这个模块也可以控制、监听鼠标和键盘,并且是跨平台的。这里只用到了一点。

代码如下:

import pynputdef enter():
ctr = pynput.keyboard.Controller() #获得控件。
ctr.press(pynput.keyboard.Key.enter) #按下回车。
ctr.release(pynput.keyboard.Key.enter)#松开回车。

最后,定义main函数:

def main():
while getscreenshot() != goal:
pass
enter()
print("Success.")

全部代码如下:

import pynput
from PIL import Imagegoal = Image.open('老师的头像.png')
#加载目标文件,需要你自己提前用getscreenshot函数截取。def getscreenshot():
return pyautogui.screenshot(region=[425,590,45,47])def enter():
ctr = pynput.keyboard.Controller()
ctr.press(pynput.keyboard.Key.enter)
ctr.release(pynput.keyboard.Key.enter)def main():
while getscreenshot() != goal:#如果截图和目标不相同,就一直循环。
pass
enter()
print("Success.")if __name__ == '__main__':
main()

闲谈

写完程序,感觉用python实现这种简单的图像识别并不太困难。

而我们那位老师,每次让我们签到,然后手动核对、填写Excel在上交学校,做了很多重复的机械性工作。

如果他会python,上网课这么长时间,足够把这项工作自动化了,毕竟elif足够胜任了。

学编程真好。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898