假期的最后8天开了一门双学位的计算机网课————Android程序设计,从早上8点一直上到下午5点30,不定时的在群里发布课程签到,每次我都倒霉的错过,于是在网上google有没有啥自动签到的东东,可以救救孩子,结果却发现全是上班族的钉钉打卡,算了那就自己搜搜轮子拼装一个吧,哈哈哈哈。遂有此文。


用到的库:

import sys
from time import sleep
import tkinter as tk
import pyautogui
import pyscreeze
import cv2
import threading
import urllib.request as urllib

python实现思路:

  1. 用opencv+pyscreeze扫描屏幕,找到"立即签到"四字所在位置。
  2. 计算中心点,pyautogui调用点击。
  3. 设置扫描屏幕时间,默认为30S扫描一次。
  4. tkinter编一个 丑陋 的可视化页面。

"立即签到"按钮长这个样子


话不多说,上代码

import sys
from time import sleep
import tkinter as tk
import pyautogui
import pyscreeze
import cv2
import threading
import urllib.request as urllibdef method1():# print("执行了方法1")screenScale=1target= cv2.imread(r'targe.png',cv2.IMREAD_GRAYSCALE)screenshot=pyscreeze.screenshot('./my_screenshot.png')temp = cv2.imread(r'my_screenshot.png',cv2.IMREAD_GRAYSCALE)theight, twidth = target.shape[:2]tempheight, tempwidth = temp.shape[:2]print("目标图宽高:"+str(twidth)+"-"+str(theight))print("模板图宽高:"+str(tempwidth)+"-"+str(tempheight))scaleTemp=cv2.resize(temp, (int(tempwidth / screenScale), int(tempheight / screenScale)))stempheight, stempwidth = scaleTemp.shape[:2]print("缩放后模板图宽高:"+str(stempwidth)+"-"+str(stempheight))res = cv2.matchTemplate(scaleTemp, target, cv2.TM_CCOEFF_NORMED)mn_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)if(max_val>=0.9):# 计算出中心点top_left = max_locbottom_right = (top_left[0] + twidth, top_left[1] + theight)tagHalfW=int(twidth/2)tagHalfH=int(theight/2)tagCenterX=top_left[0]+tagHalfWtagCenterY=top_left[1]+tagHalfH#左键点击屏幕上的这个位置pyautogui.click(tagCenterX,tagCenterY,button='left')print("位置是:",tagCenterX,tagCenterY)pyautogui.moveTo(tagCenterX-500, tagCenterY)else:print("未发现")def method2():# print("执行了方法2")root = tk.Tk()root.title('Qust钉钉自动签到')root.geometry('480x400')index = tk.Label(root, text='开始运行了。。。。', bg='#D3D3D3', font=('微软雅黑', 10))index.place(relx=0.25, rely=0.1, relwidth=0.5, relheight=0.15)btn1 = tk.Button(root, text='点击停止', bg='#D3D3D3', font=('微软雅黑', 13), command=sys.exit)btn1.place(relx=0.25, rely=0.5, relwidth=0.5, relheight=0.15)root.mainloop()def method3():# print("执行了方法3")while (1 == 1):method1()sleep(30)#等待30s运行一次,这里你可以自己改def thread_it():  # 多线程thread1 = threading.Thread(target=method3)# thread2 = threading.Thread(target=method2)thread1.setDaemon(True)# thread2.setDaemon(True)thread1.start()# thread2.start()method2()if __name__ == '__main__':urllib.urlretrieve('https://s4.ax1x.com/2022/03/03/bYWMon.png','./targe.png')#这里面的地址是“立即签到”这张图片root = tk.Tk()root.title('Qust钉钉自动签到')root.geometry('480x400')index = tk.Label(root, text='编不出好看的UI,>0< ...', bg='#D3D3D3', font=('微软雅黑', 10))index.place(relx=0.25, rely=0.1, relwidth=0.5, relheight=0.15)# 第一个按钮btn1 = tk.Button(root, text='点击这里运行就完了', bg='#D3D3D3', font=('微软雅黑', 13), command=lambda:[root.destroy(),thread_it()])btn1.place(relx=0.25, rely=0.5, relwidth=0.5, relheight=0.15)root.mainloop()

期间踩过的坑有:

  • 1.鼠标点击后会停留在"立即签到"上,遮挡部分字体,影响识别时间,于是设置了点击后鼠标位置自动左移500个像素,遂解决,识别速度嘎嘎快。
  • 2.tkinter 在默认运行主线程时会等待子线程运行完毕才继续,使得程序无响应(如上图),引入多线程后解决。

结果:

最终呈现出来的效果还是非常令人满意的,当天晚上我开了一个小群,不间断的发送了几十条签到,在程序不间断运行6个小时后依然能准确搞定。(虽然python运行就是慢,但抵不住它编的快啊!!!!)

附上截图:

就这样,下次见。

2.#技术|Python实现钉钉课程自动签到, opencv+threading+tkinter相关推荐

  1. 利用腾讯云Python函数实现机场每日自动签到领流量

    利用腾讯云Python函数实现机场每日自动签到领流量 基于项目 https://github.com/zhjc1124/ssr_autocheckin 修改 sspanel自动签到脚本(腾讯云函数) ...

  2. python玩微信小程序游戏_使用python实现微信小程序自动签到功能

    功能描述目标 完成多账号微信小程序每天自动签到 输出 签到成功则向微信群发送签到成功的信息 否则提示用户签到失败,需手动签到 包管理 requests itchat time threading 程序 ...

  3. Python + GitHub Actions 实现 CSDN 自动签到与抽奖(非 selenium 版本)

    文章目录 [1x00]技术栈 [2x00]代码实现签到与抽奖 [3x00]签到结果通知 [03x01]Server 酱 [03x02]企业微信 [03x03]钉钉 [4x00]自动签到 [5x00]完 ...

  4. 使用python实现微信小程序自动签到2.0

    微信小程序自动签到 功能描述 目标 输出 包管理 程序的结构设计 步骤1 步骤2 步骤3 步骤4 代码实现 使用findler抓包工具查看请求类型 再次使用findler抓包,查看请求内容 使用多线程 ...

  5. Python实现云之家自动签到

    起因 偶然看到一个同事设置闹钟,提醒自己下班打开.就突发奇想,既然身为后台开发是不是可以用程序来实现自动打卡的功能呢? 于是开起来fiddler进行抓包,发现设置代理,云之家无法进行签到功能.既然电脑 ...

  6. python+selenium百度贴吧自动签到

    #-*- coding:utf-8 -*- from selenium import webdriver import time import os import random from seleni ...

  7. python之百度贴吧自动签到

    # -*- coding: utf-8 -*- '''#百度错误代码: err_code:40 请输入验证码完成发帖 ''' import urllib,urllib2,cookielib,re; i ...

  8. 原来实现钉钉自动签到如此简单,每天准时上下班不是梦

    本文主要介绍了如何利用现成软件快速实现钉钉自动签到功能,核心思路非常简单,甚至无任何编程基础的小白也能轻松实现定时自动打卡功能. 通过本节课程,你将学习到以下内容: 怎么开启钉钉极速打卡功能; 如何唤 ...

  9. app推送是怎么实现的_原来实现钉钉自动签到如此简单,每天准时上下班不是梦

    本文主要介绍了如何利用现成软件快速实现钉钉自动签到功能,核心思路非常简单,甚至无任何编程基础的小白也能轻松实现定时自动打卡功能. 通过本节课程,你将学习到以下内容: 怎么开启钉钉极速打卡功能; 如何唤 ...

  10. 如何利用python实现自动签到

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

最新文章

  1. GD32通用定时器、高级定时器PWM输出例程
  2. codeforces 15C. Industrial Nim
  3. vue设置标签自定义属性_Vue组件化开发之插槽
  4. CVPR2021 最具创造力的那些工作成果!
  5. jekins创建ssh_linux – Jenkins SSH slave无法创建/ home // jenkins
  6. 编辑器Sublime Text安装配置
  7. 华为交换机命令基础入门学习,菜鸟也能看得懂!
  8. 《小岛经济学》读书笔记摘录
  9. 读取图像数据:通过append方法
  10. 忆我的大学老师----(一)
  11. 【如何7天写完一篇发明专利】
  12. Python操作json文件
  13. 计算机组成原理实验报告 算术逻辑单元ALU实验(源代码全)
  14. OBS软件转发直播他人直播画面方式方法(包含插件下载地址)
  15. 人工智能有哪些优点和缺点?
  16. Java媒体框架(JMF)资料
  17. 关于PolarCode方案被5G标准采纳这件事
  18. 国王3个囚犯戴帽子,帽子不是黑色就是白色---逻辑题。
  19. 【181023】VC++牛顿法解方程之混沌情况图形示例源代码
  20. PHP接口开发加密技术实例原理与例子

热门文章

  1. Python编写微信打飞机小游戏(一)
  2. 利用ENVI自带全球DEM数据计算区域平均高程
  3. silverlight自定义安装客户端插件
  4. Android+TensorFlow+CNN+MNIST实现手写数字识别
  5. 负载均衡与服务器架构
  6. 读书笔记——并行处理器架构
  7. mac上iphone4刷机与越狱(一)
  8. 表白js特效 html爱情表白网站 html爱心代码
  9. jar转apk专辑 android,jar转apk格式转换器
  10. 复制百度文库内容chrome插件