1 import requests
2 import re
3 import os
4 from yzm import YDMHttp
5 class Edu():
6 def yzm_csh(self):
7 # 用户名
8 username = ''
9 # 密码
10 password = ''
11 # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
12 appid = 3912
13 # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
14 appkey = 'e2bafb5103206d8480ddb7ce3af2d082'
15 # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
16 self.codetype = 1004
17 # 超时时间,秒
18 self.timeout = 60
19 # 初始化
20 self.yundama = YDMHttp(username, password, appid, appkey)
21 # 登陆云打码
22 uid = self.yundama.login()
23 print('uid: %s' % uid)
24 # 查询余额
25 balance = self.yundama.balance()
26 print('balance: %s' % balance)
27 def get_cpic_res(self,pic_name):
28 # 图片文件
29 filename = pic_name
30 # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
31 cid, result = self.yundama.decode(filename,self. codetype, self.timeout);
32 return result
33 def __init__(self,u,p):
34 self.yzm_csh()
35 self.username=u
36 self.password=p
37 self.s = requests.session()
38 self.get_login_page()
39 self.login()
40 self.s.headers.update({
41 'Host': 'jwgl.cauc.edu.cn',
42 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',
43 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
44 'Accept-Encoding': 'gzip, deflate',
45 'Content-Type': 'application/x-www-form-urlencoded',
46 'keep-alive': 'keep-alive',
47 'Upgrade-Insecure-Requests': '1'
48 })
49 def get_view(self,r):
50 return re.findall('__VIEWSTATE" value="(.*?)"',r)[0]
51 def auth(self):
52 data={
53 'curl':'Z2F',
54 'flags':'0',
55 'forcedownlevel':'0',
56 'formdir':'3',
57 'trusted':'0',
58 'username':'',
59 'password':'',
60 }
61 url='http://jwgl.cauc.edu.cn/CookieAuth.dll?Logon'
62 res=self.s.post(url,data=data)
63 def get_login_page(self,):
64 #__VIEWSTATE变量
65 res=self.s.get('http://jwgl.cauc.edu.cn')
66 self.sbm=re.findall('/\((.*?)\)/',res.url)[0]
67 self.view=self.get_view(res.text)
68 def get_check_pic(self):
69 url = 'http://jwgl.cauc.edu.cn/(' + self.sbm + ')/CheckCode.aspx' # 验证码所在连接
70 pic = self.s.get(url)
71 if os.path.exists(r'yanzheng.jpg'):
72 os.remove(r'yanzheng.jpg')
73 with open(r'yanzheng.jpg', 'wb')as f:
74 f.write(pic.content)
75 f.close()
76 username = ''
77 password = ''
78 #os.startfile(r'yanzheng.jpg')
79
80 def login(self):
81 while True:
82 self.get_check_pic()
83 # ycode = input("输入弹出的验证码: ")
84 ycode = self.get_cpic_res('yanzheng.jpg')
85 payload={
86 '__VIEWSTATE':self.view,
87 'txtUserName':str(self.username),
88 'TextBox2':str(self.password),
89 'txtSecretCode':ycode,
90 'RadioButtonList1':'%D1%A7%C9%FA',
91 'Button1':"",
92 'lbLanguage':'',
93 'hidPdrs':'',
94 'hidsc':'',
95 }
96 #更新refer
97 self.s.headers.update( {'Referer': 'http://jwgl.cauc.edu.cn/(' + self.sbm + ')/Default2.aspx',})
98 url='http://jwgl.cauc.edu.cn/('+self.sbm+')/Default2.aspx'
99 r=self.s.post(url,data=payload)
100 #用正则判断登陆情况
101 pat=r'<title>(.*?)</title>'#获取标题的正则表达式
102 x=re.findall(pat,r.text)
103 if(x[0]=="欢迎使用正方教务管理系统!请登录"):print("登陆失败")
104 else:
105 print("登陆成功")
106 #抓一下名字
107 catch='<span id="xhxm">(.*?)</span></em>'
108 self.name=re.findall(catch,r.text)[0][:-2]
109 self.xh=re.findall('xh=(.*?)"',r.text)[0]
110 break
111 def get_grade_all(self):
112 self.get_grade_page()
113 data = {
114 '__VIEWSTATE': self.VIEW,
115 'Button2': '%D4%DA%D0%A3%D1%A7%CF%B0%B3%C9%BC%A8%B2%E9%D1%AF'
116 }
117 self.s.headers.update({ 'Referer': self.url })
118 r = self.s.post(self.url, data=data)
119 print(r.text)
120 def get_grade_page(self):
121 self.url='http://jwgl.cauc.edu.cn/('+self.sbm+')/xscj_gc.aspx?xh='+ self.xh+'&xm='+'%C1%F5%BA%D3'+'&gnmkdm=N121605'
122 self.s.headers.update({'Referer': 'http://jwgl.cauc.edu.cn/('+ self.sbm+')/xs_main.aspx?xh='+ self.xh} )
123 r= self.s.get(self.url)
124 self.VIEW= self.get_view(r.text)
125
126 edu=Edu('','')
127 edu.get_grade_all()