本文仅限于学习交流!!!
一、思路
在四六级查询网站:http://cet-kw.neea.edu.cn/Home/QueryTestTicket
1、先找查询接口,因此咱们先正儿八经的查询一次。
2、F12通过检查,发现了查询接口、验证码图片、查询接口需要post的内容
3、省份代号、证件类型代号IDTypeCode等这些在四六级查询网页源代码中显示,直接右键看源代码。
4、获取验证码:对验证码多次分析,发现主要是来自http://cet-kw.neea.edu.cn/Home/VerifyCodeImg这个地方。然后发现四六级查询网页的cookies和这个网页是一样的,于是可以通过session的方式,获取验证码,并且保存在本地人工识别。
#获取验证码图片并且读取
def gImg(self):
urlImg = 'http://cet-kw.neea.edu.cn/Home/VerifyCodeImg'
response = s.get(url=urlImg)
#将图片保存在本地
with open('E:/测试/img.png','wb') as f:
f.write(response.content)
#将保存在本地的图片使用本地默认打开方式打开
subprocess.Popen('E:/测试/img.png',shell=True)#
img = input('输入验证码:')
return img
5、以上4步基本完成准备工作,然后直接post查询接口即可,发送需要的data。
二、完整代码
# @Time:2020.02.20
# @Author:ai酸的博文
import requests,random,subprocess,time,json,re
class zkzh:
def __init__(self):
self.url = 'http://cet-kw.neea.edu.cn/Home/ToQueryTestTicket'
self.headers ={'Referer': 'http://cet-kw.neea.edu.cn/Home/QueryTestTicket'
,'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
,'X-Requested-With': 'XMLHttpRequest'
,'Origin': 'http://cet-kw.neea.edu.cn'
,'Host': 'cet-kw.neea.edu.cn'}
#获取准考证号
def get(self,num,name,img):
data = {'provinceCode': '51',#省编号,这里默认是四川51 其他的省在查询准考证号的网页源码上有
'IDTypeCode': '1',#证件类型,这里也是网页源码有的
'IDNumber': num,#身份证号
'Name': name,#姓名
'verificationCode': img}#验证码识别
response = s.post(self.url,headers=self.headers,data=data)
html = response.content.decode()
json_html = json.loads(html)
ExceuteResult = json_html['ExceuteResultType']
if ExceuteResult==1 :
List = re.findall('"(.*?)"',json_html['Message'])
return List[1],List[3]#List[1]是英语四或六级 List[3]是准考证号
elif ExceuteResult==-1:
print('验证码输入错误!')
else:
print('未知错误!')
#获取验证码图片并且读取
def gImg(self):
urlImg = 'http://cet-kw.neea.edu.cn/Home/VerifyCodeImg'
response = s.get(url=urlImg)
#将图片保存在本地
with open('E:/测试/img.png','wb') as f:
f.write(response.content)
#将保存在本地的图片使用本地默认打开方式打开
subprocess.Popen('E:/测试/img.png',shell=True)#
img = input('输入验证码:')
return img
def run(self):
name = input('请输入姓名:')
num = input('请输入身份证号:')
img = self.gImg()
grade,zkzhNum = self.get(num=num,name=name,img=img)
print(name+num+grade+zkzhNum)
return name,num,grade,zkzhNum
if __name__ == '__main__':
a = zkzh()
s = requests.Session()
a.run()