热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python写脚本预约课程_写了一个预约东南大学体育场馆的python脚本,目前刚刚实现功能,后续会继续完善...

看到git上有人写了一个自动预约的脚本,正好前段时间在学python爬虫和脚本,索性也写了一个,大佬直接略过。目前没有做图形化࿰

看到git上有人写了一个自动预约的脚本,正好前段时间在学python爬虫和脚本,索性也写了一个,大佬直接略过。

目前没有做图形化,账号和预约信息也是手动输入的,我也只写了羽毛球和乒乓球,其实就是一个属性的值。嫌麻烦的同学可以写一个文本文件,保存这些信息,然后倒入到脚本里,每次稍作修改就可以了。如果基友固定的话,也可以写死在脚本里。

本篇博客只说下博主写脚本的时候遇到的问题和心路历程,只是想要代码的可以直接忽略下文,代码已经上传github:https://github.com/CooperXxx/seuScript。

本脚本需要urllib、PIL、pytesseract等模块,没有的同学先安装一下。

第一步:登陆个人信息门户

首先是登陆个人门户,一般是从和这个接口登陆,https://newids.seu.edu.cn/authserver/login?goto=http://my.seu.edu.cn/index.portal,但是发现这个登陆接口的表单密码是加密处理的,还有一些属性不知道是什么,也猜测不出来。

所以博主找到了另一个预约场馆的登陆接口:http://ids1.seu.edu.cn/amserver/UI/Login,这个表单就非常简单了,每个key也都可以猜测到是什么意思。

使用urllib构建POST请求,并模拟浏览器登陆:

//构建POST请求中的提交信息和URL

url='http://ids1.seu.edu.cn/amserver/UI/Login'

userid = input("输入学号:")

password = input("输入密码:")

postdata1 = urllib.parse.urlencode({

'IDToken1':userid,

'IDToken2':password,

'IDButton':'Submit',

'goto':'http://yuyue.seu.edu.cn/eduplus/order/initOrderIndex.do?sclId=1',

'gx_charset':'utf-8'

}).encode('utf-8')

//构建Request,模拟浏览器请求,登陆

req = urllib.request.Request(url,postdata1)

req.add_header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36")

cjar = http.COOKIEjar.COOKIEJar()

opener = urllib.request.build_opener(urllib.request.HTTPCOOKIEProcessor(cjar))

urllib.request.install_opener(opener)

data = opener.open(req).read()

注意:登陆需要验证证书,不然会出错,所以之前加上:

ssl._create_default_https_context = ssl._create_unverified_context

且ssl需要引用。

第二步:识别验证码和构建预约表单

使用google浏览器的开发者工具寻找表单页面:

这里发现了可以直接打开的预约表单页面:

http://yuyue.seu.edu.cn/eduplus/order/order/initEditOrder.do?sclId=1&dayInfo=2018-11-23&itemId=7&time=12:00-13:00

和验证码的URL:

http://yuyue.seu.edu.cn/eduplus/control/validateimage

验证码获取和识别:

urllib.request.urlretrieve('http://yuyue.seu.edu.cn:80/eduplus/control/validateimage', 'validateimage.jpg')

img = Image.open('validateimage.jpg')

s = pytesseract.image_to_string(img)

使用urllib获取到了验证码图片,再用pytesseract识别。因为验证码实在是太简单了,所以直接就能识别。(不知道pytesseract是什么的童鞋,自行百度)

才发现自己吧验证码down到本地了,不过懒得改了,嘻嘻。下次再说。

还是用开发者工具寻找处理表单请求的URL:

judgeUseUser.do:这个请求是用来判断表单信息是否合法的,其实在脚本里可以跳过。

insertOrder.do:这才是真正的处理表单信息的请求,URL:http://yuyue.seu.edu.cn/eduplus/order/order/order/insertOredr.do?sclId=1

表单里面的属性,大家自己去看吧,注意其中有个邀请人ID和学号是不一样的,比如我的室友的ID是120542,但是这个属性又是必须有的,所以你要自己用谷歌开发者工具或者抓包软件自己去找一下。

下面构建表单请求并且执行:

reservetime = input("输入想要预约的时间(格式:2018-11-25 09:00-10:00):")

item = input("输入数字7或者9(7代表乒乓球,10代表羽毛球):")

inuserid = input("输入被邀请人ID(不是学号,需要自己去查,例如120542代表谢龙龙):")

phone = input("输入手机号:")

postdata2 = urllib.parse.urlencode({

'orderVO.useTime':reservetime,

'orderVO.itemId':item,

'orderVO.useMode':'2',

'useUserIds':inuserid,

'orderVO.phone':phone,

'validateCode':s,

}).encode('utf-8')

url2="http://yuyue.seu.edu.cn/eduplus/order/order/order/insertOredr.do?sclId=1"

req2 = urllib.request.Request(url2,postdata2)

req2.add_header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36")

data = opener.open(req2).read()

print(data)

最后如果打印出没有空余场地就是没场地了,

print出success就是成功预约啦,拿来玩的童鞋记得去系统里取消预约哦,

print其他东西就是出错了哦。

最后的最后,有问题的可以给博主留言,

有问题的妹子,可以加博主的微信(xwd2363)哦。嘻嘻。

本脚本只作为学习练习的试手,不做任何其他目的。



推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
author-avatar
财气冲天6_757
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有