生活随笔
收集整理的這篇文章主要介紹了
中科大EPC课程查询自动选课
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
中科大EPC課程查詢&自動(dòng)選取
在上一學(xué)期寫了一個(gè)EPC的爬蟲,邏輯是爬到合適的課程后以郵件的方式通知自己,然后手動(dòng)選取。造成的結(jié)果就是經(jīng)常收到一堆垃圾郵件,每日發(fā)送郵件總是達(dá)到上限,在參考了使用Python和Splinter實(shí)現(xiàn)12306火車票查詢與搶票和利用Python制作自動(dòng)搶火車票小程序,過年再也不要擔(dān)心沒票了!兩篇博文之后,學(xué)習(xí)有Splinter的使用,對(duì)原來的代碼作了些許修改,實(shí)現(xiàn)課程的查詢與自動(dòng)選取。
運(yùn)行環(huán)境:Python 3.6.6
所需庫:Splinter 0.10.0
Webdriver: google chrome webdrive https://chromedriver.storage.googleapis.com/index.html
我所下載的是73.0.3683.68。
程序邏輯是:確定合適的上課時(shí)間以及要選取的課程類型,當(dāng)爬取到合適的課程后直接選課。
代碼如下:
from splinter
.browser
import Browser
import time
MAX
= 5 '''
合適的時(shí)間, 形式 turple 列表 (周幾,時(shí)間)'''
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
= '' '''網(wǎng)址'''url_login
='http://epc.ustc.edu.cn/n_left.asp' url1
= 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2001' url2
= 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2002' url3
= 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2003' url4
= 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2004' url7
= 'http://epc.ustc.edu.cn/m_practice.asp?second_id=2007' url_book
= 'http://epc.ustc.edu.cn/record_book.asp' def __init__(self
):self
.driver_name
= 'chrome' self
.executable_path
= 'D:/chromedriver' def start(self
):self
.browser
= Browser
(driver_name
= self
.driver_name
,executable_path
= self
.executable_path
) self
.browser
.driver
.set_window_size
(1000,800) self
.login
() while True:print(time
.ctime
(),' :')if self
.select
(self
.url2
): break if self
.select
(self
.url4
): break if self
.select
(self
.url7
): break print('\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("請(qǐng)手動(dòng)輸入驗(yàn)證碼......")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 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
()
運(yùn)行程序的時(shí)候需要注意兩個(gè)事情:
一是四個(gè)課時(shí)不能選滿,否則會(huì)因?yàn)橐堰_(dá)預(yù)約上限而不能選課:
二是注意上課時(shí)間不要和已經(jīng)選有的課的時(shí)間沖突,不然很可能不是選課,而是取消了,很不幸我就遇到過這種情況。這種情況有多種解決方法,最簡單的就是從BOOK_TIME中刪去該時(shí)間段,另一種方法是可以加個(gè)判斷,看操作到底是選課還是取消,或者其他的東西。
注意爬取的時(shí)候訪問不要過于頻繁,弄崩EPC就不好了。
總結(jié)
以上是生活随笔為你收集整理的中科大EPC课程查询自动选课的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。