日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

中科大EPC自动程序(2022python版)

發布時間:2023/12/20 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中科大EPC自动程序(2022python版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一、前言
  • 二、源程序
  • 三、使用步驟
    • 1.把用到的庫都安裝了
    • 2.下載谷歌瀏覽器驅動
    • 3.改學號密碼
    • 4.改收發郵箱
    • 5.改預定時間
  • 四、運行步驟
  • 注意事項


一、前言


本程序參考了前輩 @眕眕的這篇文章
但前輩的程序不能正確運行,主要問題評論區已有人指出。
最大的問題是“預約”按鈕的自動點擊,原程序在檢測到課程時對tds[25]元素自動點擊:

if (week <=MAX) & ((day,course_time) in BOOK_TIME): #如果滿足條件,則自動選課tds[25].click() #選課

但在實測中,tds[25]元素包含:

<input type="submit" style="cursor:pointer" height="25" value="預 約" <="" td=""> # 這個是按鈕 <input type="hidden" name="submit_type" value="book_submit">

原程序沒有正確定位到預約按鈕,所以不會出現點擊預約之后的彈窗,程序運行到這一步時出錯。
本文對此處進行了修正:

tds[i + 10].find_element(By.CSS_SELECTOR, '[type="submit"]').click()

解決了此問題。由于作業還沒寫完,其他優化和改進不再詳細描述。

二、源程序

"""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列表中的索引為152739...上課時間在在tds列表中的索引為tds[18][1],tds[30][1]...操作的索引為2537...# 沒課的狀態下,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行之后
這里注意授權碼不是密碼,怎么獲取問百度。

msg_from = 'xxxxx@163.com' # 發送方郵箱passwd = 'xxxxxxxxxxx' # 填入發送方郵箱的授權碼msg_to = 'xxxxxxx@qq.com' # 收件人郵箱

第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界面,自動刷新。

注意事項

  • 做完上面的步驟,手動登錄之后,你要做的所有操作程序都會幫你做,有的時候會看到窗口顯示有課,別點,程序已經幫你點過了。
  • 預約失敗屬于正常現象,EPC網站太**了,響應極慢(不然我也不會開發這個),重新啟動程序即可。
  • 程序異常退出是因為EPC的規則,比如同一話題不能選兩次,再次運行即可
  • 不完美,可改進,后輩加油。
  • 源碼公開,使用教程完備,比某騙贊sd強多了哈^^

    總結

    以上是生活随笔為你收集整理的中科大EPC自动程序(2022python版)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。