您好,登錄后才能下訂單哦!
這篇文章主要介紹了python如何實(shí)現(xiàn)自動打卡小程序,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
具體內(nèi)容如下
from selenium import webdriver from selenium.webdriver.chrome.options import Options from PIL import Image from bs4 import BeautifulSoup import requests from aip import AipOcr import time from datetime import datetime import re class DailyAttend(object): def __init__(self, browser, stu_id, passwd, t, address, tmp_yesterday, tmp_today): self.browser = browser self.stu_id = stu_id self.passwd = passwd self.t = t self.address = address self.tmp_yesterday = tmp_yesterday self.tmp_today = tmp_today self.img_path = "captcha.png" def get_captcha_img(self): url = "https://fangkong.hnu.edu.cn/app/#/login?redirect=%2Fhome" self.browser.get(url) self.browser.find_element_by_class_name("vcdoe-tips").click() # 模擬點(diǎn)擊使驗(yàn)證碼加載出來 time.sleep(2) webpage = self.browser.page_source soup = BeautifulSoup(webpage, features="html.parser") div = soup.find("div", attrs={"class": "login-content"}) src = div.find_all("img")[2].attrs["src"] # 從html中解析出圖片鏈接 r = requests.get(src) if r.status_code == 200: open(self.img_path, "wb").write(r.content) else: print("網(wǎng)絡(luò)不佳,無法加載驗(yàn)證碼圖片") def recog_captcha_img(self): img = Image.open(self.img_path) img = img.convert('L') # P模式轉(zhuǎn)換為L模式(灰度模式默認(rèn)閾值127) count = 165 # 設(shè)定閾值 table = [] for i in range(256): if i < count: table.append(0) else: table.append(1) img = img.point(table, '1') img.save(self.img_path) # 保存處理后的驗(yàn)證碼 ## 調(diào)用百度ocr # 識別碼 APP_ID = "23779944" API_KEY = "FPgsSXsuqXk3twpqVHmNNK6g" SECRET_KEY = "nG08oGzErk8CdMvDAynAiGdzfBjHr3NO" # 初始化對象 client = AipOcr(APP_ID, API_KEY, SECRET_KEY) # 讀取圖片 def get_file_content(file_path): with open(file_path, 'rb') as f: return f.read() image = get_file_content(self.img_path) # 定義參數(shù)變量 options = {'language_type': 'ENG', } # 識別語言類型,默認(rèn)為'CHN_ENG'中英文混合 # 調(diào)用通用文字識別 result = client.basicGeneral(image, options) # 高精度接口 basicAccurate for word in result['words_result']: self.captcha = (word['words']) def login(self): ## 登錄 while True: self.browser.find_element_by_css_selector("[type=text]").send_keys(self.stu_id) self.browser.find_element_by_css_selector("[type=password]").send_keys(self.passwd) self.browser.find_element_by_css_selector("[type=number]").send_keys(self.captcha) self.browser.find_element_by_tag_name("button").click() time.sleep(2) page = self.browser.page_source html = BeautifulSoup(page, features="html.parser") err_message = html.find("p", attrs={"class": "el-message__content"}) if err_message.text == "登錄成功": print("登錄成功!") break elif err_message.text == "賬號或密碼錯誤": print("賬號或密碼錯誤!請重新輸入!") self.stu_id = input("請輸入學(xué)號:") self.passwd = input("請輸入密碼:") continue else: self.get_captcha_img() self.recog_captcha_img() continue def attend(self): success_messages = self.browser.find_elements_by_css_selector('p[class=el-message__content]') success_messages = [message.text for message in success_messages] if "今日已打卡" in success_messages: print("今日已打卡!") time.sleep(60) else: ## 選擇打卡定位 self.browser.find_elements_by_xpath('//div/span[text()="正在獲取定位..."]')[1].click() time.sleep(1) for i in range(17): self.browser.find_elements_by_xpath('//ul/li')[i + 1].click() time.sleep(1) self.browser.find_element_by_xpath('//ul/li[text()="岳麓區(qū)"]').click() time.sleep(1) self.browser.find_element_by_xpath('//div/button[text()="確認(rèn)"]').click() time.sleep(1) ## 輸入相關(guān)打卡信息并點(diǎn)擊打卡按鈕 self.browser.find_elements_by_css_selector('input[placeholder="街道門牌、樓層房間號等信息"]')[1].send_keys(self.address) temp = self.browser.find_elements_by_css_selector("input[placeholder=請輸入]") temp[0].send_keys(self.tmp_yesterday) temp[1].send_keys(self.tmp_today) self.browser.find_elements_by_css_selector( 'button[class="btnDaka van-button van-button--info van-button--normal van-button--block"]')[1].click() today = datetime.now().strftime("%Y-%m-%d") print(today + "打卡成功!") time.sleep(60) if __name__ == "__main__": ## 歡迎界面 print("=" * 100) print("打卡小程序") print("歡迎你湖南大學(xué)的朋友!開始使用吧!") print("=" * 100) ## 用戶輸入 while True: t = input("請輸入你的每日打卡時間(24小時制, 例如:00:10):") if re.search('^(([0-1][0-9])|(2[1-3])):[0-5][0-9]$', t) == None: print("你輸入的時間格式有誤,請重新輸入!") continue stu_id = input("請輸入你的學(xué)號:") passwd = input("請輸入個人門戶密碼:") address = input("請輸入你的打卡詳細(xì)地址(例如:湖南大學(xué)北校區(qū)1舍):") tmp_yesterday = input("請輸入你的昨日體溫:") tmp_today = input("請輸入你的今日體溫:") print("=" * 100) if input("請檢查你的輸入是否無誤,若有誤則輸入y并重新輸入,若無誤則輸入n:") == "n": print("=" * 100) break user_info = { 't': t, 'stu_id': stu_id, 'passwd': passwd, 'address': address, 'tmp_yesterday': tmp_yesterday, 'tmp_today': tmp_today } ## 瀏覽器設(shè)置 chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_experimental_option('excludeSwitches', ['enable-logging']) browser = webdriver.Chrome(executable_path="chromedriver.exe", options=chrome_options) ## 打卡 app = DailyAttend(browser, **user_info) # 實(shí)例化打卡器 print("正在等待打卡時間到來...") while True: if datetime.now().strftime("%H:%M") == t: app.get_captcha_img() app.recog_captcha_img() app.login() app.attend() else: time.sleep(10)
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“python如何實(shí)現(xiàn)自動打卡小程序”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。