-
基本内容
-
使用了requests来访问,pillow得image模块来访问验证码图片
-
etree用来解析和定位
-
xpath名不虚传
-
不足得地方是:
- ocr还没有完成,如果使用光学识别,会方便许多
- 目前使用手打
-
分析部分:
-
import requests
import urllib
import pytesseract
from PIL import Image
from lxml import etree
def get_view_state(response):
# 用Lxml库解析网页,通过Xpath语法定位__VIEWSTATE
selector = etree.HTML(response.content)
__VIEWSTATE = selector.xpath('//*[@id="form1"]/input/@value')[0]
return __VIEWSTATE
def login_status(response):
if response.status_code == requests.codes.ok:
selector = etree.HTML(response.text)
state = selector.xpath('/html/head/title/text()')[0]
if state == "正方教务管理系统":
print("登录成功")
return True
elif state == "欢迎使用正方教务管理系统!请登录":
print("登录失败")
return False
else:
print(response.status_code)
print("登录失败")
return False
if __name__ == "__main__":
url = "http://xk.zucc.edu.cn/default2.aspx"#学校得登录界面
codeurl="http://xk.zucc.edu.cn/CheckCode.aspx?"#验证码界面
reponseurl="http://xk.zucc.edu.cn/xs_main.aspx?xh=xxxxxxx"#选课时需要用到的frderence
sess = requests.session()#使用session()管理得话使用的是同一个cookie
data={
'__VIEWSTATE':'',
'txtUserName': 'xxxxx',#学号
'Textbox1':'',
'TextBox2': 'xxxxx',#密码
'RadioButtonList1': '学生'.encode('gb2312'),#说明为学生身份,编码格式改一下,没有改得话就是那一串乱码
'Button1': '',
'lbLanguage': '',
'hidPdrs': '',
'hidsc': ''
}
headers={
'Content-Length': str(len(data)),
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
'Referer': url,
#'Cookie':'AntiLeech=2671741908; ASP.NET_SessionId=idIc9sa-zoS19kz5-uztOef66inN0cD1WmDgTbjaSYQpHcCjJF4*',
}
valcode = sess.get(codeurl,stream=True)
f = open('valcode.jpg','wb')
f.write(valcode.content)
f.close()
res1 = sess.get(url,headers=headers)
viewstate = str(get_view_state(res1))
data['__VIEWSTATE'] = str(viewstate)
img = Image.open('valcode.jpg')
img.show()
data['txtSecretCode']=str(input())
res = sess.post(url,data=data,headers=headers)
login_status(res)
#print(res)
两天之后:
博主想要说一句,千万别学博主用这个格式写,最好建个类来写,方便后面选课的书写
公选课在博主的个人博客上:添加链接描述