-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCET_Query.py
More file actions
144 lines (127 loc) · 4.1 KB
/
Copy pathCET_Query.py
File metadata and controls
144 lines (127 loc) · 4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# -*- coding: utf-8 -*-
import requests
import os
import time
HEADERS = {
'Referer': 'http://www.chsi.com.cn/cet'
}
def query(kh_list):
path = os.path.dirname(os.path.abspath(__file__))
count = 0
for param in kh_list:
count += 1
print('开始第', count, '次尝试')
try:
rsp = requests.get('http://www.chsi.com.cn/cet/query',
params=param, headers=HEADERS)
except requests.exceptions.ConnectionError:
print('连接超时,请稍后重试')
return
if '请输入验证码' in rsp.text:
print('您的提交次数过多,请换个IP再尝试。')
return
elif '无法找到对应的分数' in rsp.text:
print(param['zkzh'], '尝试失败')
elif '笔试成绩' in rsp.text:
with open(os.path.join(path, param['zkzh']+'.html'), 'wb') as f:
f.write(rsp.text.encode('utf-8'))
print(param['zkzh'], '查询成功')
print('结果保存在:', os.path.join(path, param['zkzh']+'.html'))
break
else:
print('连接超时,请稍后重试')
return
time.sleep(1)
else:
print('查询失败')
def check_input(msg, df, check_size=True):
print(msg)
tip = '请输入>>> '
while True:
user_in = input(tip).strip()
if check_size and user_in and len(user_in) != len(df):
tip = '您的输入有误,请重新输入>>> '
else:
return user_in if user_in else df
def gen_zkzh():
fixed = []
flex = []
print('***任何输入直接回车即为默认值***')
TIP_XX = '''
--------------------------------
学校id,长度为5位
默认值为山科大,其它学校请自主查询
--------------------------------
'''
fixed.append(check_input(TIP_XX, '37055'))
TIP_XQ = '''
--------------------------------
校区id,长度为1
默认值为山科大青岛,其它校区请自主查询
--------------------------------
'''
fixed.append(check_input(TIP_XQ, '1'))
TIP_NF = '''
--------------------------------
年份id,长度为2
默认值为17年
--------------------------------
'''
fixed.append(check_input(TIP_NF, '17'))
TIP_KJ = '''
--------------------------------
考季id,长度为1
1为上半年,2为下半年
默认值为下半年
--------------------------------
'''
fixed.append(check_input(TIP_KJ, '2'))
TIP_CET = '''
--------------------------------
四六级id,长度为1
1为四级,2为6级
默认值为4级
--------------------------------
'''
fixed.append(check_input(TIP_CET, '1'))
TIP_KC = '''
--------------------------------
考场号id,长度为3
该值为一个范围,挨个进行查询,直到正确为止
格式: start end
如,我要查300到310考场
输入 300 310
若想为定值,则end与start相同即可
默认值为: 000 000
不足3位,用0补齐
--------------------------------
'''
flex.extend(map(int, check_input(TIP_KC, '000 000').split()))
TIP_ZH = '''
--------------------------------
座号id,长度为2
该值为一个范围,挨个进行查询,直到正确为止
格式: start end
如,我要查20到25号
输入 20 25
若想为定值,则end与start相同即可
默认值为: 00 00
不足2位,用0补齐
--------------------------------
'''
flex.extend(map(int, check_input(TIP_ZH, '00 00').split()))
TIP_XM = '''
--------------------------------
输入自己的大名即可
默认值为 小脑斧
--------------------------------
'''
name = check_input(TIP_XM, '小脑斧', False)
fix_str = ''.join(fixed) + '{:0>3d}{:0>2d}'
return ({'zkzh': fix_str.format(a, b), 'xm': name} for a in range(flex[0], flex[1]+1) for b in range(flex[2], flex[3]+1))
if __name__ == '__main__':
kh_list = gen_zkzh()
query(kh_list)
while True:
input("\n任意键退出")
break