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

注意

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

背景

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

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


实现前

实现目标需做到两点:

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

思考:

1. 判断是否提交签到

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

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

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

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

如下图,是这时需判断发送人。

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

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

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

2. 提交签到

这里,使程序模拟键盘按下回车来发送消息。

提前打下发送信息,保持光标在编辑框中。

  • 综上,程序流程如下:

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


具体实现

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

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

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

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

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

我进行了多次尝试。

找到位置后定义函数:

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

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

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

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

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

我使用模块pynput模拟键盘。

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

代码如下:

import pynput

def 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 Image goal = 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在微信群中签到、抢沙发(适用于任何账号)的更多相关文章

  1. 利用python进行微信好友分析

    欢迎python爱好者加入:学习交流群 667279387 本文主要利用python对个人微信好友进行分析并把结果输出到一个html文档当中,主要用到的python包为itchat,pandas,py ...

  2. 利用python实现微信小程序游戏跳一跳详细教程

    利用python实现微信小程序游戏跳一跳详细教程 1 先安装python 然后再安装pip <a href="http://newmiracle.cn/wp-content/uploa ...

  3. 如何利用Python实现自动打卡签到

    需求描述 我们需要登录考勤系统(网页端,非手机端)进行签到,如果不想每天都早早起来打卡签到,就可以通过写程序实现这一功能. 业务梳理 通过长时间的早起打卡签到发现规律,我每天只是不停的点击,签到,都是 ...

  4. 如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  5. 利用Python查看微信共同好友

    思路 首先通过itchat这个微信个人号接口扫码登录个人微信网页版,获取可以识别好友身份的数据.这里是需要分别登录两人微信的,拿到两人各自的好友信息存到列表中. 这样一来,查共同好友就转化成了查两个列 ...

  6. 利用 Python 分析微信好友性别和位置

    今天用到一个非常有意思的库——itchat,它已经完成了 wechat 的个人账号API接口,使爬取个人微信信息更加方便.  下载 爬取微信好友信息 这样就将你所有微信好友的信息都返回了,我们并不需要 ...

  7. 利用Python统计微信联系人男女比例以及简单的地区分布

    寒暄的话不多说,直接进入主题. 运行效果图: [准备环境] Python版本:v3.5及其以上 开发工具:随意,此处使用Pycharm [依赖包] 1.itchat (CMD运行:pip instal ...

  8. 利用Python玩微信跳一跳

    创建python项目jump_weixin,新建python程序jump.py 需要4个辅助文件[adb.exe,AdbWinApi.dll,AdbWinUsbApi.dll,fastboot.exe ...

  9. 利用python 实现微信公众号群发图片与文本消息功能

    在微信公众号开发中,使用api都要附加access_token内容.因此,首先需要获取access_token.如下: #获取微信access_token def get_token(): paylo ...

随机推荐

  1. python机器学习的常用算法

    Python机器学习 学习意味着通过学习或经验获得知识或技能.基于此,我们可以定义机器学习(ML)如下 - 它可以被定义为计算机科学领域,更具体地说是人工智能的应用,其为计算机系统提供了学习数据和从经 ...

  2. Scala的自定义类型标记

    Scala的自定义类型标记 Scala中有很多千奇百怪的符号标记,看起来是那么的独特,就像是一杯dry martini-好像黑夜中的萤火虫,那么耀眼,那么出众. 好了言归正传,这一篇文章我们会讲一下S ...

  3. java之重载与重写

    重写(override) 重写是子类对父类的允许访问的方法的重新编写,方法名,返回值类型和形参列表都不能改变,唯一恩能够改变的是方法体. 重写的好处是可以根据子类的需要的行为来实现父类的方法. 重写方 ...

  4. Spring Boot 整合 Spring Security,用户登录慢

    场景 Spring Boot + Spring Security搭建一个Web项目. 临时用了inMemoryAuthentication. @EnableWebSecurity public cla ...

  5. PostgreSQL 10.0 preview 性能增强 - 分区表性能增强(plan阶段加速)

    标签 PostgreSQL , 10.0 , 分区表 , 子表 , 元信息搜索性能增强 背景 PostgreSQL 10.0 增强了分区表的子表搜索性能,对于涉及分区表包含子表特别多的QUERY,可以 ...

  6. 从实践出发:微服务布道师告诉你Spring Cloud与Boot他如何选择

    背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架 ...

  7. Programming Languages_04 Deferred Substitution

    Deferred Substitution 在执行出现with时,利用"substitution",每次with的出现,它都绕着整个body置换.这一方式是由F1WAE到env再到 ...

  8. M - Little Pony and Harmony Chest 状压dp

    M - Little Pony and Harmony Chest 怎么感觉自己越来越傻了,都知道状态的定义了还没有推出转移方程. 首先这个a的范围是0~30   这里可以推出 b数组的范围 0~60 ...

  9. Codeforces Round #575 (Div. 3) 昨天的div3 补题

    Codeforces Round #575 (Div. 3) 这个div3打的太差了,心态都崩了. B. Odd Sum Segments B 题我就想了很久,这个题目我是找的奇数的个数,因为奇数想分 ...

  10. java反编译软件

    1.Java反编译插件 —— Jadclipse JadClipse是Jad的Eclipse插件,是一款非常实用而且方便地Java反编译插件,我们只需将下载的插件包复制到eclipse的plugins ...