写了一个预约东南大学体育场馆的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)哦。嘻嘻。

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

原文地址:https://www.cnblogs.com/CooperXia-847550730/p/10006205.html

时间: 2024-11-05 18:52:46

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

写了一个常规性生成merge 的小脚本

现在使用数据库来写存储过程,动不动参数就会用到xml ,当然罗,优势也很明显,参数相对固定,而且灵活,如果要修改或者什么的,中间接口层也不需要做变化,只需要修改封装的存储过程以及程序传参就ok了. 随着时间慢慢过,有时候就有一个存储过程,一个xml 来应对整个表的新增,修改,删除的情况了.而对于这个情况,我个人比较喜欢使用 Merge关键字来处理.但是如果表里面的列很多,那么复制黏贴啊之类的机械动作就会很多,而且没有什么价值.所以我就写了一个小脚本,应对了使用xml 来做表的增删改的作用 首先我

给女朋友用Python写了一个自动抽奖程序!Python在手,奖品我有!

我相信大部分的女孩子都是喜欢买买买的,我还没有见过不喜欢买东西的女孩子,当然很多东西也是有抽奖这项优惠的,很多小程序都有抽奖这个功能的,好了废话不多说了,为了给女朋友写这款抽奖程序,可谓是呕心沥血!不过看到她开心就比什么都重要了,我虽然没钱,但是我会尽我最大的努力给她我能给的!哈哈哈 ,一般程序员都是单身狗,不好意思,给你们吃了一波狗粮! 我前几天发现了之后就把那里的所有奖品都点了一次,就突发萌想,能不能用 python 来实现自动抽奖啊?这样就不用我每天都点进去看了,我只需要关心是否中奖就可以

一个监控挂载盘的python脚本

我们产品线有一个公用的挂载盘,主要是用来方便各位开发放置他们自己的一些工作材料,比如异常的日志,或者tcpdump的抓包等等,但是这个盘由于使用人众多,容量自然要有监控,于是就有了写这个脚本的动机. 在这里我写了两个脚本,上面这个是用来监控磁盘容量,然后通过df -h的排序生成前十名占容量最大的文件夹,把这个文件夹的名字和对应的大小重定向到一个叫alarm.txt这个文件里,这个文件就是邮件正文.然后在确定他们的主人,得到他们主人的邮箱地址,最后用下面那个脚本来发送邮件: #!/usr/bin/

用GO按老大要求写了一个小工具,用他脚本下载日志文件,然后让开发自己去下载

package main import ( "archive/tar" "bufio" "bytes" "compress/gzip" "flag" "fmt" "io" "net/http" "os" "os/exec" "regexp" "sort" "t

一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本

摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 @for&ever 2010-07-03 功能: 获取指定目录下面符合一定规则的文件名称和文件修改时间,并保存到指定的文件中 脚本如下: #!/usr/bin/env python# -*- coding: utf-8 -*- '''Created on 2010-7-2 @author: fore

自己写的一个 java swing 的闹钟

上一周新入职,把代码down下来之后,领导和我讲了一些大概的业务以及代码流程(领导是技术出身),领导让我自己先看看代码,然后我看了两天,觉得已经完全可以接任务了,但是领导却迟迟没有分配任务给我,虽然他们几个同事比较忙,但是我好像也帮不上什么忙.然后,在那一天的那个晚上,回到住处之后,突然想到一个之前想到的问题,平时我起床都是靠的手机闹钟的,可是万一某一天手机挂了,那我起床不是有问题了吗,但有一个好处就是我有笔记本,那么我可以在笔记本上面装一个闹钟呀,然后我就萌生了自己写一个闹钟的想法,虽然这两天

人生苦短:运行你的第一个 Python 脚本

Shell 是一个Read-Eval-Print-Loop(REPL),它只接受命令,评估它们并打印输出. 我会假设你已经安装了一个有效的Python解释器,已经准备运行你的第一个Python脚本. 我们可以在解释器中实现如下操作: 1 读取命令.2 评估并执行命令.3 打印输出.4 循环并重复该过程.5 解释器等待,直到我们使用exit()或quit()命令指示它终止. 启动解释器 启动解释器的最简单方法是打开终端并使用命令行执行.你可以打开终端: 在Windows上,搜索命令提示符或Powe

python脚本简单检测ip合法性并添加到白名单文件

一.功能说明 有时候项目需要通过ip地址来判定是否允许访问,通常通过一个白名单地址文件来存放这些允许放行的ip,但每次打开文件编辑比较麻烦,容易出错,也不知道是否添加过,故用python写了一个自动添加白名单的脚本. 二.脚本内容 #!/usr/bin/env python #coding:utf-8 #2017-06-09 ver:1.0 import sys white_list="white_list.txt" add_ip=sys.argv[1].strip() checkIp

Crontab里调用python脚本不成功的解决方案

crontab里经常会调用一些程序,但是很多时候调用python是不成功的,但是手动则是OK的,在看日志(/var/log/cron)的时候,却是显示正常,这种情况怎么破呢?其实主要就是这么几个地方: 1)轻易不要用if __name__ == "__main__": 很多主管都习惯让自己手下人把脚本写成模块化,然后潇洒的走一个整合,但是crontab对这个方法似乎不是很灵光,因为python运行的时候是从if __name__ == "__main__"开始执行,