Python爬虫应用——实现某中学选修课网上自动选课

#https://****.****.***.**/为该学校选课网站域名
import requests
from lxml import etree
import time
from getverifycode import GetVerifyCode #云打码API
import reif __name__ == '__main__':print("自动选课程序")print("————————————————————————————————————————————")print("请不要百分百相信本程序的有效性")print("请在选课开始时,使用本程序的同时,也要在网站中进行手动选课,以防程序无效耽误选课")print("如果程序有效,运行本程序时手动选课不影响本程序的运行")print("————————————————————————————————————————————")while True:username = input("请输入学号:")password = input("请输入密码:")headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"}session = requests.Session()session.get("https://****.****.***.**/")verifypic = session.get("https://****.****.***.**/yzm.jsp",headers=headers).contentverifycode = GetVerifyCode.getCode(verifypic) #使用云打码(验证码识别平台)API对验证码进行识别print("验证码(自动识别):"+verifycode)data = {"user_id": username,"user_password": password,"stu_level": "H","verifycode": verifycode}session.post("https://****.****.***.**/action/login1.jsp",data=data,headers=headers)a = session.get("https://****.****.***.**/student/StudentWelcome.jsp",headers=headers).textetr = etree.HTML(a)includename = etr.xpath('/html/body/table/tbody/tr[1]/td/div/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/span/text()')[0]name = re.findall('当前用户: (.*)(',includename)[0]if len(name)==0:print("用户名/密码错误")continueelse:breakinput("确认您的姓名:"+name+"(按回车继续)")print("————————————————————————————————————————————")classchart = ["新闻采访与写作","电影欣赏与影评写作","戏剧表演","英语影视作品赏析","天文爱好者","生活中的心理","木工制作","科技项目过山车","化学实验","非洲鼓","古筝","游泳","足球","户外篮球"] #本次选课所有课程名称(顺序与网站表格相同)for i in range(len(classchart)):print(str(i)+":"+classchart[i])while True:classcodestr = input("输入您想选的课前的编号:")try:classcode = int(classcodestr)if classcode > 13: #课程数量-1raise ValueErrorchoosepage = session.get("https://****.****.***.**/student/CourseSesp.jsp", headers=headers).textetr2 = etree.HTML(choosepage)classposit = classcode + 2testifgood = etr2.xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tr/td/table/tr[" + str(classposit) + "]/td[2]/div/text()")[0]print("确认已选课程:" + testifgood)if input("输入y并点击回车继续,输入其他键重新选择:") == "y":breakelse:continueexcept Exception:print("请输入0-13之间的数字!(也有可能是网络连接问题)")continueprint("————————————————————————————————————————————")print("就绪(请不要关闭程序)")while True:ticks = time.time()if ticks >= 1615555800:breakelse:time.sleep(0.001)continueprint("开始操作")mal = 0while True:try:if mal != 0:print("运行中......")mal+=1choosepage = session.get("https://****.****.***.**/student/CourseSesp.jsp", headers=headers).textetr2 = etree.HTML(choosepage)chooselinkdict = etr2.xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tr/td/table/tr["+str(classposit)+"]/td[8]/div/a/@href")except AttributeError:continueif len(chooselinkdict) == 0:time.sleep(0.05)selectedpage = session.get("https://****.****.***.**/student/RelationPage.jsp", headers=headers).textetr3 = etree.HTML(selectedpage)successjudge = etr3.xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tr/td/table/tr[2]")if len(successjudge) >= 1:print("成功")print("信息:")infotype = ['课程编号', '课程名称', '上课时间', '上课地点', '课程容量', '选课状态']for i in range(1, 7):info = etr3.xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tr/td/table/tr[2]/td[" + str(i) + "]/div/text()")[0]print(infotype[i-1] + "-" + info)breakelse:continueelse:chooselink = chooselinkdict[0]session.get("https://****.****.***.**/student/"+chooselink,headers=headers)print("发送请求中......")selectedpage = session.get("https://****.****.***.**/student/RelationPage.jsp",headers=headers).textetr3 = etree.HTML(selectedpage)successjudge = etr3.xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tr/td/table/tr[2]")if len(successjudge) >= 1:print("成功")print("信息:")infotype = ['课程编号','课程名称','上课时间','上课地点','课程容量','选课状态']for i in range(1,7):info = etr3.xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tbody/tr[2]/td/table/tr/td/table/tr[2]/td["+str(i)+"]/div/text()")[0]print(infotype[i-1]+"-"+info)breakelse:print("失败,正在重试")time.sleep(0.05)continue

Python爬虫应用——实现某中学选修课网上自动选课相关推荐

  1. python爬虫图片实例-【图文详解】python爬虫实战——5分钟做个图片自动下载器...

    我想要(下)的,我现在就要 python爬虫实战--图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识(没看的赶紧去看)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk ...

  2. 【图文详解】python爬虫实战——5分钟做个图片自动下载器

    python爬虫实战--图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap show me the c ...

  3. Python爬虫有用的库:fake_useragent,自动生成请求头

    文章目录 前言 fake_useragent 其它错误 参考文章 前言 练习爬虫的很多小伙伴,在进行request请求时,大部分情况下都要添加一个请求头,而最常见的就是添加user-agent,帮助爬 ...

  4. Python爬虫实现京东口罩到货通知,自动下单

    功能 效果展示 V2版本(正常模式),下单速度1.7秒(网速影响) V2版本(极速模式),下单速度1.3秒(网速影响) V3版本,下单速度1秒(网速影响) windows启动 安装python3.6以 ...

  5. Python爬虫爬取表情包+Autojs微信自动导入表情包脚本(附源码)

    废话不多说直接开始 Python爬取表情包 一.检查网页源码 发现可以找到图片地址,直接请求图片地址下载图片 二.打开开发者工具(F12) 通过xpath提取p标签下的img标签src属性为图片地址 ...

  6. day01 初见python爬虫之“爬校花网”和“自动登录github”

    首先我们来解释一下几个概念: 1.什么是爬虫? 爬取数据. 2.什么是互联网? 由一堆网络设备.把一台台的计算机互联到一起称之为互联网. 3.互联网建立的目的: 数据的传递与数据的共享. 4.什么是数 ...

  7. Python爬虫之pyppeteer去除Chrome正受到自动测试软件的控制(反爬策略)

    问题描述 import asyncio from pyppeteer import launchasync def main():browser = await launch(headless=Fal ...

  8. python爬虫获取下一页_Python Scrapy 自动抓取下一页内容

    最近在学下Scrapy,抓取下一页的时候遇到了问题 import scrapy from crawlAll.items import CrawlallItem class ToutiaoEssayJo ...

  9. python爬取率_[新手]python爬虫爬取中证指数官网数据

    想用python爬虫获取中证指数官网上的几个主要指数的每日估值更新,但是下载下来的页面内容却没有想要的数据.想要的数据前面有个JavaScript标签,是不是光靠python没办法获取这个数据?求大神 ...

最新文章

  1. 上标3下标6算法_图解堆排序算法
  2. Hadoop自带WordCount.java程序
  3. C语言指针和数组的天生姻缘
  4. python爬取股票大单历史记录_利用bs4爬取股票的历史交易数据
  5. 医学影像后处理服务器系统的特点,【CT影像系统工作站怎么用】CT影像系统工作站好不好_使用技巧-ZOL软件百科...
  6. 小程序 处理富文本内图片大小
  7. springsecurity 认证之授权码模式
  8. FIFO算法与LRU算法软考试题
  9. vue 文字转语音mp3_vue项目或网页上实现文字转换成语音播放功能
  10. 2021年全球起酥油收入大约4171.6百万美元,预计2028年达到5052.7百万美元,2022至2028期间,年复合增长率CAGR为 2.8%
  11. yolov4与yolov5的区别
  12. AARRR模型分析方法
  13. mysql plus多表关联_结合mybatis-plus 实现实体操作多表关联查询
  14. 综合练习2:购买电影票(代码区别:对象.成员方法)
  15. 百度地图3.1教程—检索功能演示
  16. 前端Vue项目调用页面web3.js:连接metaMask钱包,(查询钱包ETH余额,查询代币余额,ETH转账,代币转账,代币授权,查询授权数量,计算价格)等功能
  17. 【工作】Amazon Fraud Detection
  18. Html字母变大的代码,css鼠标选中字体变大 div css鼠标悬停超链接的文字变大
  19. 【KALI基础】字典生成和CRUNCH工具的运用
  20. sublime 常用的一些快捷键

热门文章

  1. 逻辑回归损失函数推导及求导
  2. 亚马逊云计算服务二季度营收或超过80亿美元
  3. AR模型中的自相关系数和偏自相关系数
  4. oracle plb怎么读,oracle 11g r2从sqlplus将dbmsclr.plb部署为sysdba
  5. python绘制折线图中文图例不显示_python plb 教程 实现折线图 (令含有 题目,标识,颜色,中文乱码解决)源码...
  6. 2019/4/28,第二次团队任务
  7. ssm框架的项目中用户图片的上传功能
  8. axios如何在nodejs项目里封装_axios封装api
  9. 提升用户活跃度,学会这10招就够了
  10. 90 s games(90年代游戏)