网站获取数据流程:
- 关键词搜索时出现验证码,F12网络栏出现请求slideCaptcha返回参数a、b以及图片和滑块图片
- 滑动验证码通过后出现请求slide_captcha_check,发送a、b、c参数
- 接着是请求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))