glidedsky挑战-滑块验证码反爬(腾讯防水墙滑块验证码)

相应页面(http://glidedsky.com/level/web/crawler-captcha-1

题目要求:

 

先看看页面:

当我们一打开页面,就是出现滑块验证码页面,我们所要的数字参数是没有的。

 

再看看滑动之后的页面。

很明显,当滑块验证通过之后,数字就会出现。

 

再分析滑块验证码图片,如下图,是腾讯防水墙滑块验证码。

再抓包看看,如下图,验证码图片和滑块图片已经出现,

 

到这里,简单分析一下思路。

  1. 访问页面,下载验证码图片;
  2. 通过图像识别,计算出验证码图片缺口位置;
  3. 通过selenium模拟移动滑块;
  4. 收集数字数据,继续下一个页面。

 

实现过程:

使用库:

import os
import random

import cv2
from PIL import Image
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from urllib.request import urlretrieve

import time
import numpy as np
from lxml import etree

这里说下,部分库与程序作用:

random:模拟滑动轨迹;

vc2、PIL、numpy:处理图片时,计算滑块对应坐标轴;

selenium:自动化处理验证码;

urllib.request.urlretrieve:下载图片。

 

实现过程:

应于网站要求,这里只说思路(个人程序过程),不提供代码。

  1. 初始化selenium;
  2. 访问页面,先登录,再进行题目页面;
  3. 切换到滑块验证码子页面(因为主页面中,不会显示滑块元素);
  4. 下载对应的滑块验证码图片(验证码带缺口大图,验证码缺口图);
  5. 加载验证码图片,计算坐标值(Image处理图片大小和位置偏移,cv2处理图片颜色色差(灰度),numpy计算坐标轴);
  6. 根据坐标轴,实现模拟滑动过程中的轨迹;
  7. 通过轨迹使用selenium拖动滑块;
  8. 如果成功,收集数字求和,然后下一页,重复第3步,如果滑块验证没有成功,该页面再次请求。

 

说明:

难点:图像计算坐标,模拟轨迹。

在验证过程中,注意页面的加载速度,可以使用time控制,图片识别时,用cv2处理灰度值,进行归一化处理,numpy可以通过归一化计算出相应坐标。

在网络上,已经有很多大佬实现了腾讯防水墙滑块验证码,可以适当的去参考。

 

PS:

除了腾讯防水墙滑块验证码,还有极验的滑块验证码,相对腾讯来说,极验的难度比腾讯的大很多,它的版本在不断更新,难度也越高,最开始极验滑块验证码可以通过截图处理保存图片,后来是图片碎片块,不过可以从css里获取对应位置参数,也可以处理,现在极验滑块验证码使用的是webp格式的碎片块图片,难上加难。欢迎知道的大佬留言!!!

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值