中科大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课程查询自动选课相关推荐

  1. 分布式算法(中科大分布式算法课程笔记)

    分布式算法 消息传递系统中的基本算法 形式化模型 生成树上的广播和汇集 构造生成树 构造DFS生成树(指定根) 不指定根时构造DFS生成树 环上选举算法 leader选举问题 匿名环 异步环 同步环 ...

  2. 上Github,北大、清华、浙大、中科大4大名校课程在线学,加星总数超1.8万

    [导读]因为大学生找课程资料很麻烦,直到有人把搜集到的资料放在了Github上!现在,你不光都可以自由免费的获取北大.清华.浙大.中科大的相关课程资源进行自学,也可以对资源进行补充. 读过大学的人,对 ...

  3. 12C 新特性 | 标量子查询自动转换

    有超过6年超大型数据库专业服务经验,擅长数据库解决方案设计与项目管理:在多年的技术实践中,先后为运营商(移动.电信).银行.保险.制造业等各行业客户的业务关键型系统提供了运维.升级.性能优化.项目实施 ...

  4. 穷清华,富北大,不要命的中科大,是什么意思?

    IT考研(微信号:itkaoyan)整编 在大学中,流传着这么一句话,穷清华.富北大.不要命的中科大.这句话我相信很多人都不会理解其中的意思,也不知道其中的曲折,那今天我就来和大家讲一讲这句话的含义. ...

  5. 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的

    <JAVA数据库课程设计学生选课管理系统的>由会员分享,可在线阅读,更多相关<JAVA数据库课程设计学生选课管理系统的(59页珍藏版)>请在人人文库网上搜索. 1.一.课程设计 ...

  6. 中科大郑烇、杨坚《计算机网络》课程 第一章笔记

    中科大郑烇.杨坚全套<计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)>课程 链接:https://pan.baidu.com/s/14dxVgx ...

  7. 个人学习笔记:中科大郑烇、杨坚《计算机网络》课程 第1章笔记

    配套教材:中科大郑烇.杨坚全套<计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)>课程 计算机网络 第一章 第一章目录 计算机网络 第一章 0.课 ...

  8. 拿下中科大的计算机课程全靠它了!

    整理 | 琥珀 出品 | AI科技大本营(ID: rgznai100) 人工智能的现状及今后发展趋势如何?  https://edu.csdn.net/topic/ai30?utm_source=cs ...

  9. 7-5 查询自动售货机中商品的价格

    7-5 查询自动售货机中商品的价格 给定四种商品,分别是薯片(crisps).爆米花(popcorn).巧克力(chocolate)和可乐(cola),单价分别对应为3.0元/公斤.2.5元/公斤.4 ...

  10. 中科大凌青老师凸优化课程——目录

    视频链接: 中科大-凸优化_哔哩哔哩_bilibili 课程对应目录: 1-2:推荐书目,引言,常见例子,优化问题分类,发展史 3-4:仿射/凸/凸锥 + 集/组合/包 5-6:几种重要的凸集:超平面 ...

最新文章

  1. ASP.netcore MVC钉钉H5微应用(一)准备工作
  2. 腾讯的人工智能大战已然打响!
  3. c语言if(!k1)x=1,C语言选择题题库2
  4. Linux中常见服务对应的端口号
  5. session_unset()和session_destroy()用法分析
  6. rxjs里的Observable对象如何消费
  7. conda 换成清华的源_conda/pip 使用国内镜像安装第三方库
  8. 计算机数学渤海船舶职业学院,渤海船舶职业学院2020年高职扩招录取原则
  9. Quick-Cocos2d-x初学者游戏教程(五) --------------------- 辅助工具和跳转场景
  10. 高级气泡图——R语言简单实现
  11. 上海车展:17.88万圆百万跑车梦,哪吒GT开启跑车新纪元
  12. 为什么机器人运动学逆解最好采用双变量反正切函数atan2而不用反正/余弦函数?
  13. 两台服务器公用一个显示器,两台服务器链接一台显示器
  14. Android P系统设置之默认打开定位开关(默认使用位置服务)
  15. 在新一年里提升你的工作效率,收下这 6 款协作工具
  16. java http异步调用_HttpClient的异步调用,你造吗?
  17. 典雅大方实用中国风PPT模板
  18. java pos机到服务器之间的通信
  19. 北邮某牛人找工作切身感受
  20. 类化工原料罐使用凉凉胶隔热中间漆 增加漆膜厚度

热门文章

  1. Android PreferenceScreen介绍
  2. xvid-core1.1.2编译方法(vc6,vs2005)
  3. hibernate二级缓存(一)一级缓存与二级缓存
  4. 2005/2006/2007/2008/2009/2010/2012/2013/2014/2015/2016/2017/2018/2019/2020高德poi一级类别 二级类别 三级类别
  5. OpenCore黑苹果引导配置说明-基于OpenCore-0.7.0-06-08正式版
  6. 2020年中国人口出生率为8.52‰,首次跌破10‰,创下1978来新低
  7. Visual studio2012密钥 vs2012密钥 本人亲测 真实有效
  8. [Android实例] 【eoeAndroid社区索引】android开发基础之定位篇
  9. 第3.4节 通过GPIB控制频谱仪
  10. 艾默生Ovation DCS OPC服务分析