今天CPA出成绩了,有人欢喜有人愁,作为报4考2过1的我来说,简直呵呵。
由于同时查成绩的人太多,官网犹如被DDOS,网页很长时间都加载不出来,我就一直在想能不能绕过网页渲染,直接获取个人的成绩。
然后我还真弄出了个这样的小脚本。
移动端不需要验证码真是帮了大忙。
我太懒了,不想写注释了。
1import urllib.parse as up
2import hashlib,requests,re,json
3import pandas as pd
4
5login_url = 'http://m.cpaexam.cicpa.org.cn/mobilefordata/loginApp?'
6query_url = 'http://m.cpaexam.cicpa.org.cn/mobilefordata/queryExameeScoreApp?data=%257B%257D'
7headers = {
8 'Host': 'm.cpaexam.cicpa.org.cn',
9 'Proxy-Connection': 'keep-alive',
10 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'
11}
12
13#登录,获取成绩信息
14def query_raw_score():
15 username = input('输入用户名:')
16 idcard = input('输入身份证号:')
17 password = input('输入密码:')
18 password = hashlib.md5(password.encode()).hexdigest()
19 y = {"userName":username,"cardType":"01","cardId":idcard,"password":password}
20 p = up.quote(str(y).replace('\'', '\"').replace(' ',''))
21 p = p.replace('%3A',':').replace('%2C',',')
22 params = {
23 'data':p
24 }
25 ses = requests.session()
26 login = ses.get(login_url, headers=headers, params=params)
27 query = ses.get(query_url, headers=headers)
28 return query
29
30#将JsonP格式的成绩信息转为Json
31def get_score(query):
32 pattern = re.compile('.*?\((.*?)\)')
33 r = re.findall(pattern,query.text)[0]
34 score = json.loads(r)
35 return score
36
37#将成绩信息转为dataframe表格
38def score_frame(score):
39 score_dict = []
40 score_dict.append(('财管',score['value']['scoreCwgl']))
41 score_dict.append(('经济法',score['value']['scoreJjf']))
42 score_dict.append(('税法',score['value']['scoreSf']))
43 score_dict.append(('会计',score['value']['scoreKj']))
44 score_dict.append(('战略',score['value']['scoreQygl']))
45 score_dict.append(('审计',score['value']['scoreSj']))
46 score_frame = pd.DataFrame(score_dict, index=range(1,7), columns=['科目', '成绩'])
47 return score_frame
48
49#将个人信息转为dataframe表格
50def info_frame(score):
51 info_dict = []
52 info_dict.append(('年份',score['value']['annual']))
53 info_dict.append(('姓名',score['value']['name']))
54 info_dict.append(('准考证号',score['value']['permitNo']))
55 info_dict.append(('身份证号',score['value']['idCard']))
56 info_frame = pd.DataFrame(info_dict, index=range(1,5))
57 return info_frame
58
59if __name__ == '__main__':
60 query = query_raw_score()
61 score = get_score(query)
62 print('您的个人信息:')
63 print(info_frame(score))
64 print('您当年的成绩:')
65 print(score_frame(score))
效果:
Comments | NOTHING