软考成绩出来了,你过了吗?软考成绩查询接口分析及Python实现

Lan
Lan
2021-07-12 / 0 评论 / 469 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年07月13日,已超过988天没有更新,若内容或图片失效,请留言反馈。

没什么用的废话

很久没有写爬虫相关的文章了,因为现在大多数时间都在写Web相关的代码。
今天朋友问我软考成绩咋样,我才知道成绩出来了。
查了一下,成绩很理想,不出乎我的意料之外。因为:雨过天晴,糟糕的近期,总算迎来了晴天
grade
这不是重点,今天来研究一下软考成绩查询网站。

官网查成绩地址: https://query.ruankao.org.cn/score/main

页面及网络请求分析

验证码分析

查询页面
可以看见,页面中有两个查询方式,根据准考证号查询以及根据身份证号查询,以及查询都需要验证码。
看到验证码,首先看下他的逻辑有没有问题,就是看能不能跳过二维码。
所以我直接点击提交。
直接提交
它发送了一个网络请求VerifyCaptcha,然后返回的preview是验证码错误。
到这里还不能确定他的验证码是否可以跳过继续。
我们输入正确的验证码后点击查询。
正确的验证码
可以看见这次的返回值为ok,并且进行了查询,返回了查询结果为空。
返回结果
我们看一下这个result的网络请求。
网络请求
请求方式:Post
发送了表单数据:

stage: 2021年上半年
xm: 11
zjhm: 11
jym: 8221
select_type: 1
上述参数直接猜都猜得出吧。年份,姓名,证件号码,验证码,查询方式。
然后我们用Python写一个请求试一下。
import requests

url = 'https://query.ruankao.org.cn//score/result'

data = {
    'stage': '2021年上半年',
    'xm': 'lan',
    'zjhm': '666',
    'jym': '7777',
    'select_type': '1',
}
print(requests.post(url=url, data=data).json())

Python请求
看来验证码不能跳过,所以有以下几种方法。

  1. 保存验证码,用户输入后再提交请求。
  2. 将验证码上传至第三方验证码识别平台,返回验证码后提交请求。
    这里为了方便采用第一种。

    过验证码

    看一下他验证码是怎么请求的。
    验证码图片
    GET请求,获取验证码图片。
    所以新建一个长链接Session请求
    先请求一次验证码获取接口,将图片保存在本地,

    import requests
    import time
    
    session = requests.session()
    
    url = 'https://query.ruankao.org.cn//score/result'
    with open('a.png', 'wb') as f:
     f.write(session.get(f'https://query.ruankao.org.cn//score/captcha?{time.time() * 1000}').content)

    然后等用户打开验证码图片识别之后输入验证码再发送查询成绩的网络请求。

    data = {
     'stage': '2021年上半年',
     'xm': '姓名',
     'zjhm': '证件号码',
     'jym': input('请输入验证码'),
     'select_type': '1',
    }
    print(session.post(url=url, data=data).json())

    查询成功,然后你就可以再结合结合放到Web啥的
    结果

0

评论 (0)

取消