當前位置:
首頁 >
2.#技术|Python实现钉钉课程自动签到, opencv+threading+tkinter
發布時間:2023/12/2
28
豆豆
生活随笔
收集整理的這篇文章主要介紹了
2.#技术|Python实现钉钉课程自动签到, opencv+threading+tkinter
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
假期的最后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 urllibpython實現思路:
"立即簽到"按鈕長這個樣子
話不多說,上代碼
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有道云笔记自动签到
- 下一篇: python模拟手机app签到_Pyth