全国社会组织信用信息公式平台(试运行)爬虫记录

cooolr 于 2023-02-13 发布

网站获取数据流程:

  1. 关键词搜索时出现验证码,F12网络栏出现请求slideCaptcha返回参数a、b以及图片和滑块图片
  2. 滑动验证码通过后出现请求slide_captcha_check,发送a、b、c参数
  3. 接着是请求gridQuery.html,发送a、b、c参数,返回页面数据

算出参数c的过程:

checkLocation: function() {
this.moveEnable = !1;
var t = this
  , **i = this.$getRsaCode(parseInt(this.moveX) + "")**
  , a = {
    a: this.encodedata(this.valuea),
    b: this.encodedata(this.valueb),
    **c: this.encodedata(i)**
};

可以看到大概是移动距离换算rsa后的编码,那就要计算滑动验证码的移动距离了

import cv2
import base64
import numpy as np

template = cv2.imread("template.jpg", cv2.IMREAD_UNCHANGED)
block = cv2.imread("block.jpg", cv2.IMREAD_UNCHANGED)
# 转成灰度照片
block = cv2.cvtColor(block, cv2.COLOR_BGR2GRAY)
template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# 将灰度图中大于0的像素点变为白色(滑块图片全部变成白色)
ret, block = cv2.threshold(block,0,255,cv2.THRESH_BINARY)
# 将灰度图中大于245的像素点变为白色,小于245的像素点变为黑色(背景图片缺口部分变成白色,其余全黑)
ret, template = cv2.threshold(template,245,255,cv2.THRESH_BINARY)
# 数据类型转换为float32
block = block.astype(np.float32)
template = template.astype(np.float32)
# 计算距离
result = cv2.matchTemplate(block,template,cv2.TM_CCOEFF_NORMED)
x, y = np.unravel_index(result.argmax(),result.shape)
print('x坐标为:%d'%(y))