临近期末我等学沫都在紧张的进行着复习(预习),本来时间就不多,居然还让我们去评教万一因为这点时间我们挂科了咋办,于是乎用半生不熟的python写个自动评教的脚本。
一,具体分析:
我们先来评一个抓包来看
1.可以看出
请求方法:POST
地址 : /cjcx/actions/SubmitEvaluationTeaching.aspx
参数 :
cjid:是课程编号
cpjg: 是评级
advice: 是建议
2.来找获得cjid的请求
可以看出
请求方法:post(经测试,get同样有效)
地址:/cjcx/Data/EvaluationCourseData.aspx
没有参数
二,具体流程
1.模拟登陆(之前的文章写过了这里)
2.请求cjid,用正则表达式来找出cjid
3.遍历cjid,构造求参数,向提交地址提交
4.处理请求的返回,判断评教成功与否
三,效果
四,完整代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib2
import urllib
import cookielib
import re
cj=cookielib.CookieJar()
headler=urllib2.HTTPCookieProcessor(cj)
opener=urllib2.build_opener(headler)
url="http://jwgl.ntu.edu.cn/cjcx/Default.aspx" #登录页面
url1="http://jwgl.ntu.edu.cn/cjcx/checkImage.aspx" #验证码页面
scoreurl="http://jwgl.ntu.edu.cn/cjcx/Data/ScoreAllData.aspx"#获取分数
cjidurl="http://jwgl.ntu.edu.cn/cjcx/Data/EvaluationCourseData.aspx"
tijiaourl="http://jwgl.ntu.edu.cn/cjcx/actions/SubmitEvaluationTeaching.aspx"
def login():
#输入数据
print u"××××××××××××××××××××南通大学教务系统登陆××××××××××××××××××××"
print u"输入学号!"
xh=raw_input()
print u"输入身份证号!"
sfzh=raw_input()
print u"密码!"
kl=raw_input()
yzm=opener.open(url1)
yzmgif=open("yzm.gif","w")
yzmgif.write(yzm.read())
yzmgif.close()
print u"验证码已保存在本文件目录下(yzm.gif),请查看并输入!"
yzmstr=raw_input()
#数据保存
jilu=open(xh+".txt","w")
jilu.write("学号:"+xh+"
身份证号:"+sfzh+"
密码:"+kl)
jilu.close()
values={"__VIEWSTATE":"/wEPDwUJODExMDE5NzY5ZGRgtUdRucUbXsT8g55XmVsTwV6PMw==",
"__VIEWSTATEGENERATOR":"6C0FF253",
"xh":xh,
"sfzh":sfzh,
"kl":kl,
"yzm":yzmstr}
scoreValues={"start":"0",
"pageSize":"80"}
#login
request=urllib2.Request(url,urllib.urlencode(values))
f=opener.open(request)
def pingjiao():
#get cjid
cjidRequest=urllib2.Request(cjidurl)
cjid=opener.open(cjidRequest)
cjidstr=cjid.read()
print cjidstr
restr='"cjid":"(.*?)"(.*?)"kcmc":"(.*?)"'
restr1='true'
pattern=re.compile(restr)
pattern1=re.compile(restr1)
items=re.findall(pattern,cjidstr)
for item in items:
#print item[0],item[2]
print 'subject:'+item[2]+' is doing... '
pjcsValues={"cjid":item[0],"cpjg":"111111111","advice":""}
resultR=urllib2.Request(tijiaourl,urllib.urlencode(pjcsValues))
result=opener.open(resultR)
resultstr=result.read()
#print resultstr
restr=re.findall(pattern1,resultstr)
#print resultstr
if restr!=[] and restr[0]=='true':
print 'success'
else:
print 'failed'
login()
pingjiao()