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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

中科大EPC课程查询自动选课

發布時間:2023/12/20 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中科大EPC课程查询自动选课 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

中科大EPC課程查詢&自動選取

在上一學期寫了一個EPC的爬蟲,邏輯是爬到合適的課程后以郵件的方式通知自己,然后手動選取。造成的結果就是經常收到一堆垃圾郵件,每日發送郵件總是達到上限,在參考了使用Python和Splinter實現12306火車票查詢與搶票和利用Python制作自動搶火車票小程序,過年再也不要擔心沒票了!兩篇博文之后,學習有Splinter的使用,對原來的代碼作了些許修改,實現課程的查詢與自動選取。
運行環境:Python 3.6.6
所需庫:Splinter 0.10.0
Webdriver: google chrome webdrive https://chromedriver.storage.googleapis.com/index.html
我所下載的是73.0.3683.68。
程序邏輯是:確定合適的上課時間以及要選取的課程類型,當爬取到合適的課程后直接選課。
代碼如下:

# coding: utf-8 # author: zzhh@mail.ustc.edu.cnfrom splinter.browser import Browser import time MAX = 5 #最大周數''' 合適的時間, 形式 turple 列表 (周幾,時間)''' # BOOK_TIME = [ # ('周一','08:25-09:15'),('周一','09:45-11:25'),('周一','14:30-16:10'),('周一','16:40-17:30'),('周一','19:00-20:40'), # ('周二','08:25-09:15'),('周二','09:45-11:25'),('周二','14:30-16:10'),('周二','16:40-17:30'),('周二','19:00-20:40'), # ('周三','08:25-09:15'),('周三','09:45-11:25'),('周三','14:30-16:10'),('周三','16:40-17:30'),('周三','19:00-20:40'), # ('周四','08:25-09:15'),('周四','09:45-11:25'),('周四','14:30-16:10'),('周四','16:40-17:30'),('周四','19:00-20:40'), # ('周五','08:25-09:15'),('周五','09:45-11:25'),('周五','14:30-16:10'),('周五','16:40-17:30'),('周五','19:00-20:40'), # ] # 以周二周三下午,周五整天,所有晚上為例 BOOK_TIME = [ ('周一','19:00-20:40'), ('周二','14:30-16:10'),('周二','16:40-17:30'),('周二','19:00-20:40'), ('周三','09:45-11:25'),('周三','14:30-16:10'),('周三','16:40-17:30'),('周三','19:00-20:40'), ('周四','19:00-20:40'), ('周五','08:25-09:15'),('周五','09:45-11:25'),('周五','14:30-16:10'),('周五','16:40-17:30'),('周五','19:00-20:40'), ] print (BOOK_TIME)class EPC():name = '' #學號password = '' #密碼driver_name = '' #瀏覽器executable_path = '' #瀏覽器存放路徑'''網址'''url_login ='http://epc.ustc.edu.cn/n_left.asp' #登陸網站url1 = 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2001' # Situational dialogueurl2 = 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2002' # Topical discussionurl3 = 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2003' # Debateurl4 = 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2004' # Dramaurl7 = 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2007' # Pronunciation Practiceurl_book = 'http://epc.ustc.edu.cn/record_book.asp' #預約記錄#登陸def __init__(self):self.driver_name = 'chrome' #chrome瀏覽器self.executable_path = 'D:/chromedriver' #chromedriver存放路徑def start(self):self.browser = Browser(driver_name = self.driver_name,executable_path = self.executable_path) #生成Browser實例self.browser.driver.set_window_size(1000,800) #設置窗口大小self.login() #登陸while True:print(time.ctime(),' :')#if self.select(self.url1): break # Situational dialogueif self.select(self.url2): break # Topical discussion#if self.select(self.url3): break # Debateif self.select(self.url4): break # Dramaif self.select(self.url7): break # Pronunciation Practiceprint('\n')time.sleep(20)def login(self):self.browser.visit(self.url_login) self.browser.fill("name",self.name)self.browser.fill("pass",self.password)print("請手動輸入驗證碼......")while True:if self.browser.find_by_name('name')==[]:#登陸成功,已跳轉breaktime.sleep(1)def select(self,url):self.browser.visit(url)tds = list(self.browser.find_by_css('td[align="center"]'))#篩選。。。tds_left = list(self.browser.find_by_css('td[align="left"]'))course_name = tds_left[2].text #課程名稱#[int(tds[14].string[1:2]),tds[15].string,] + [string for string in tds[18].strings] #信息week = int(tds[14].text[1:-1]) #第幾周上課day = tds[15].text #星期幾上課course_date = tds[18].text.split('\n')[0] #上課日期course_time = tds[18].text.split('\n')[1] #上課時間text = 'There is a course: {} in week{},{},{},{}.'.format(course_name,week,day,course_date,course_time,end='\n')print(text)if (week <=MAX) & ((day,course_time) in BOOK_TIME): #如果滿足條件,則自動選課tds[25].click() #選課#如果選課成功,則停止選課,跳轉到已選課程界面alert = self.browser.get_alert()alert.accept()self.browser.visit(self.url_book)return Truereturn False if __name__=='__main__':epc=EPC()epc.start()

運行程序的時候需要注意兩個事情:
一是四個課時不能選滿,否則會因為已達預約上限而不能選課:

二是注意上課時間不要和已經選有的課的時間沖突,不然很可能不是選課,而是取消了,很不幸我就遇到過這種情況。這種情況有多種解決方法,最簡單的就是從BOOK_TIME中刪去該時間段,另一種方法是可以加個判斷,看操作到底是選課還是取消,或者其他的東西。

注意爬取的時候訪問不要過于頻繁,弄崩EPC就不好了。

總結

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

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