中科大EPC自动程序(2022python版)
生活随笔
收集整理的這篇文章主要介紹了
中科大EPC自动程序(2022python版)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 一、前言
- 二、源程序
- 三、使用步驟
- 1.把用到的庫都安裝了
- 2.下載谷歌瀏覽器驅動
- 3.改學號密碼
- 4.改收發郵箱
- 5.改預定時間
- 四、運行步驟
- 注意事項
一、前言
…
本程序參考了前輩 @眕眕的這篇文章
但前輩的程序不能正確運行,主要問題評論區已有人指出。
最大的問題是“預約”按鈕的自動點擊,原程序在檢測到課程時對tds[25]元素自動點擊:
但在實測中,tds[25]元素包含:
<input type="submit" style="cursor:pointer" height="25" value="預 約" <="" td=""> # 這個是按鈕 <input type="hidden" name="submit_type" value="book_submit">原程序沒有正確定位到預約按鈕,所以不會出現點擊預約之后的彈窗,程序運行到這一步時出錯。
本文對此處進行了修正:
解決了此問題。由于作業還沒寫完,其他優化和改進不再詳細描述。
二、源程序
"""USTC_EPC_BOTVersion : 1.0Function : 通過chrome循環訪問EPC,自動搶課。Instructions: 1. 一次性使用。完成一次搶課操作后程序終止,需再次運行。2. 極少數情況下異常退出,再次啟動即可。本學期EPC規則為:單日學時 ≤ 3, 同一老師的同一主題不可重復選, 同時段只能選一節課。上述情況出現時程序會因為無法選課異常退出。Author : 星島僧2021/11/3 """ import datetime import smtplib import time from email.mime.text import MIMETextfrom selenium import webdriver from selenium.webdriver.common.by import By# 學號密碼 username = 'SC2101xxxx' password = 'xxxxx'# 可選時間 BOOK_TIME = [['周一', '19:00-20:30'],['周二', '10:00-11:30'], ['周二', '19:00-20:30'],['周三', '16:00-17:30'], ['周三', '19:00-20:30'],['周四', '14:00-15:30'], ['周四', '16:00-17:30'], ['周四', '19:00-20:30'],['周五', '14:00-15:30'], ['周五', '08:00-09:30'], ['周五', '19:00-20:30'], ] # Topic url url = 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2002'# 創建 WebDriver 對象,指明使用chrome瀏覽器驅動 wd = webdriver.Chrome(r'd:\chromedriver.exe')# 打開首頁 def login():wd.get('http://epc.ustc.edu.cn/n_left.asp')name = wd.find_element(By.NAME, 'name')name.send_keys(username)passwd = wd.find_element(By.NAME, 'pass')passwd.send_keys(password)# 手動輸入驗證碼,登錄成功后跳出此循環while True:if wd.find_elements(By.NAME, 'name') == []: # 登陸成功,已跳轉print('Log in')breaktime.sleep(1)# 發郵件通知 def Send_mail(text):msg_from = 'xxxxxxn@163.com' # 發送方郵箱passwd = 'xxxxxxxx' # 填入發送方郵箱的授權碼msg_to = 'xxxxxxxx' # 收件人郵箱subject = "您的EPC bot" # 主題msg = MIMEText(text)msg['Subject'] = subjectmsg['From'] = msg_frommsg['To'] = msg_totry:s = smtplib.SMTP_SSL("smtp.163.com", 465)s.login(msg_from, passwd)s.sendmail(msg_from, msg_to, msg.as_string())print('succeed')except:print("發送失敗")# def pick_class(web, a): # i = 15 # while 1: # # 從第一行開始向下遍歷,尋找合適課程 # day = a[i].text # hour = a[i + 3].text.split('\n')[1] # # 找到預定時間段,點擊預定 # if [day, hour] in BOOK_TIME: # a[i + 10].click() # # 處理彈窗 # alert = web.get_alert() # alert.accept() # # 發送郵件 # Send_mail('Picked a EPC for you just now') # # 計數器+1 # CONT = CONT + 1 # i = i + 12 # if i > len(a) - 1: # break # # 選兩節課 # if CONT == 2: # breaklogin() # 登錄 wd.implicitly_wait(15)# 選課進行標志位 status = True # 進入TD界面 wd.get(url) while status:# 刷新界面wd.refresh()# 查看所有課程# wd.find_element(By.NAME, 'check_all_class').click()# 查找元素tds = list(wd.find_elements(By.CSS_SELECTOR, 'td[align="center"]'))# for i in range(50):# print(i, tds[i].text)# “星期幾”在tds列表中的索引為15,27,39...上課時間在在tds列表中的索引為tds[18][1],tds[30][1]...操作的索引為25,37...# 沒課的狀態下,tds索引長度為15if len(tds) > 15:i = 15while 1:# 從第一行開始向下遍歷,尋找合適課程day = tds[i].texthour = tds[i + 3].text.split('\n')[1]# 找到預定時間段,點擊預定if [day, hour] in BOOK_TIME:# Send_mail('There is a class in EPC')tds[i + 10].find_element(By.CSS_SELECTOR, '[type="submit"]').click()# 處理彈窗# wd.switch_to.active_element.click()dig_alert = wd.switch_to.alerttime.sleep(0.5)dig_alert.accept()# 發送郵件Send_mail('Picked a EPC class for you just now')# 選到課了就退出程序 給網頁充足的響應時間status = Falsei = i + 12# 遍歷完了退出循環if i > len(tds) - 1:breakelse:now = datetime.datetime.now()print(now.strftime("%Y-%m-%d %H:%M:%S"))print('No class')# 訪問間隔time.sleep(8)# <input type="submit" style="cursor:pointer" height="25" value="預 約" <="" td=""> 這個是按鈕 # <input type="hidden" name="submit_type" value="book_submit">三、使用步驟
1.把用到的庫都安裝了
這一步如果不會建議百度
2.下載谷歌瀏覽器驅動
確保電腦上有谷歌瀏覽器,下載與瀏覽器版本匹配的chromedriver,并將程序第36行的路徑改為chromedriver的存放路徑。
wd = webdriver.Chrome(r'd:\chromedriver.exe')3.改學號密碼
程序第22、23行
username = 'xxxxxxx' password = 'xxxxxxx'4.改收發郵箱
程序第56行之后
這里注意授權碼不是密碼,怎么獲取問百度。
第66行,如果發件郵箱是163就不變,如果是QQ郵箱就把163改為qq
s = smtplib.SMTP_SSL("smtp.163.com", 465)5.改預定時間
第25行之后:
BOOK_TIME = [['周一', '19:00-20:30'],['周二', '10:00-11:30'], ['周二', '19:00-20:30'],['周三', '16:00-17:30'], ['周三', '19:00-20:30'],['周四', '14:00-15:30'], ['周四', '16:00-17:30'], ['周四', '19:00-20:30'],['周五', '14:00-15:30'], ['周五', '08:00-09:30'], ['周五', '19:00-20:30'], ]就按這個格式改你預定的時間。
四、運行步驟
運行程序后會彈出一個chrome窗口:
賬號密碼已經自動填好,手動填寫驗證碼并點擊log in,窗口會轉入Topic Discussion界面,自動刷新。
注意事項
源碼公開,使用教程完備,比某騙贊sd強多了哈^^
總結
以上是生活随笔為你收集整理的中科大EPC自动程序(2022python版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab拟合例子,MATLAB数据拟
- 下一篇: SPSS图文教程:两个率的比较(卡方检验