美文网首页Pythonpython小课——零基础入门——学习笔记Python
作为一只Python爬虫,如何破解滑动验证码?

作为一只Python爬虫,如何破解滑动验证码?

作者: 废柴程序员 | 来源:发表于2021-03-27 12:54 被阅读0次

做爬虫总会遇到各种各样的反爬限制,反爬的第一道防线往往在登录就出现了,为了限制爬虫自动登录,各家使出了浑身解数,所谓道高一尺魔高一丈。

今天分享个如何简单处理滑动图片的验证码的案例。

image.png

类似这种拖动滑块移动到图片中缺口位置与之重合的登录验证在很多网站或者APP都比较常见,因为它对真实用户体验友好,容易识别。同时也能拦截掉大部分初级爬虫。

作为一只python爬虫,如何正确地自动完成这个验证过程呢?

先来分析下,核心问题其实是要怎么样找到目标缺口的位置,一旦知道了位置,我们就可以借用selenium等工具完成拖动的操作。

我们可以借用opencv来解决这个问题,主要步骤:

image.png

opencv 是什么?

OpenCV(Open Source Computer Vision Library)是开放源代码计算机视觉库,主要算法涉及图像处理、计算机视觉和机器学习相关方法,可用于开发实时的图像处理、计算机视觉以及模式识别程序。

直接安装

pip install opencv-python

首先将图片进行高斯模糊处理,高斯模糊的主要作用是减少图像的噪声,用于预处理阶段。

import cv2 as cv
image = cv.imread(image_path)
blurred = cv.GaussianBlur(image, (5, 5), 0)
cv.imshow("blurred", blurred)

处理后的效果

image.png

接着用Canny边缘检测到得到一个包含“窄边界”的二值图像。所谓二值图像就是黑白图,只有黑色和白色。

canny = cv.Canny(blurred, 200, 400)
cv.imshow("canny", canny)
image.png

轮廓检测

contours, hierarchy = cv.findContours(canny, cv.RETR_CCOMP, cv.CHAIN_APPROX_SIMPLE)
for i, contour in enumerate(contours):  # 所有轮廓
    x, y, w, h = cv.boundingRect(contour)  # 外接矩形
    cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv.imshow('image', image)

找出所有的轮廓,并用红色线框将其绘制标识出来了,看出来大大小小有几十个轮廓

image.png

剩下的问题就好办了,我们只需要对轮廓的面积或者周长范围做限制,就能过滤出目标轮廓的位置, 前提是我们对目标位置的轮廓大小是预先确定的。

for i, contour in enumerate(contours):  # 所有轮廓
    if 6000 < cv.contourArea(contour) <= 8000 and 300 < cv.arcLength(contour, True) < 500:
        x, y, w, h = cv.boundingRect(contour)  # 外接矩形
        print(x, y, w, h)
        cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
        cv.imshow('image', image)
        # 找目标缺口,第一个可能是滑块
        if x <= 200:
            continue
        return x + int(w / 2), 675

轮廓的面积大概是6000到8000之间,周长在300到500之间, 最后用外接矩形获取该轮廓图的坐标位置和宽高大小。

image.png

如上就找到了目标位置,剩下的工作就是将滑块移动到指定位置即可

作者:Python之禅
原文链接:https://mp.weixin.qq.com/s/n2LtrXvf5U-vFoCCLHrjGg

相关文章

  • 作为一只Python爬虫,如何破解滑动验证码?

    做爬虫总会遇到各种各样的反爬限制,反爬的第一道防线往往在登录就出现了,为了限制爬虫自动登录,各家使出了浑身解数,所...

  • python爬虫之模拟移动

    爬虫的一大难点就是破解验证码。验证码大致上分为文字识别、滑动、文字点击、图像识别等,本文讲的是其中的滑动验证码。滑...

  • python爬虫之滑动验证码[完整版]

    爬虫的一大难点就是破解验证码。验证码大致上分为文字识别、滑动、文字点击、图像识别等,本文讲的是其中的滑动验证码。滑...

  • python爬虫之图像对比

    爬虫的一大难点就是破解验证码。验证码大致上分为文字识别、滑动、文字点击、图像识别等,本文讲的是其中的滑动验证码。滑...

  • python爬虫之轨迹算法

    爬虫的一大难点就是破解验证码。验证码大致上分为文字识别、滑动、文字点击、图像识别等,本文讲的是其中的滑动验证码。滑...

  • 破解滑动验证码

    最近爬虫采集数据遇到了验证码的障碍,需要破解某网站的滑动验证码(GEETEST)。 主要参考https://seg...

  • Python爬虫 | 滑动验证码破解

    极验验证码:需要手动拼合滑块来完成的验证,相对图形验证码识别难度上升了几个等级。下面用程序识别并通过极验验证码的验...

  • Python 滑块验证码

    看了滑块验证码(滑动验证码)相比图形验证码,破解难度如何?[https://www.zhihu.com/quest...

  • 三. 突破反爬虫

    1.反爬虫措施一般分为四类:①基于验证码的反爬虫:传统验证码、逻辑验证码、滑动验证码、google访问时弹出的验证...

  • Python爬虫教程:验证码识别

    常见反爬虫手段:验证码1.简单图片,扭曲数字验证码2.中文顺序点击3.动态验证码4.滑动验证:滑动小方块到缺口5....

网友评论

    本文标题:作为一只Python爬虫,如何破解滑动验证码?

    本文链接:https://www.haomeiwen.com/subject/uevshltx.html