selenium基于滑块验证码的破解(1)---------暴力破解法

第一次体验被催稿,啊哈哈哈哈哈哈
话不多说 先看本次我们破解的滑块验证码网站

https://www.cods.org.cn/

我们在这个网站里随便搜一个字段就会弹出个滑块验证码
在这里插入图片描述
一看这个验证码是不是心里一句我擦就出现了
不慌
接下来我们就慢慢分析这个验证码:
我们首先打开f12 看看这个验证码是url请求回来的还是后端返回的
我们定位滑块验证码的位置会看见这两个代码:

在这里插入图片描述
其实这段代码把图片的原图和缺口图都放在里面了只是我们看不见
那我们应该怎么才能看见喃
我们只需要在它的css里添加一段代码
在这里插入图片描述
我们就惊奇的发现验证码图片怎么不在了
我们只是加了一句style=“display:none”就看不见了那我们在原图上加style=“display:block"会怎么样喃
没错就是下面这样
在这里插入图片描述
那么我们就可以更改css属性然后用selenium的截图办法 把原图和缺口图都保存下来
我们在拿着这两个图的像素一对比不就找到缺口图了吗?
部分完整代码如下:

注入js修改css参数和截图

ele = driver.find_elements_by_tag_name('canvas')
        driver.execute_script(
            'document.getElementsByClassName("geetest_canvas_slice geetest_absolute")[0].style.display="none"')  
            ##得到有缺口的图片
        ele[0].screenshot('qk.png')  
        	##缺口图片
        driver.execute_script(
            'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="none"')  
            ##得到有缺口的图片
        driver.execute_script(
            'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="block"')  
            ##得到完整有的图片
        ele[2].screenshot('wz.png')  
        ##完整图片

####得到图片后要把参数变回去
        driver.execute_script(
            'document.getElementsByClassName("geetest_canvas_slice geetest_absolute")[0].style.display="block"')  
        driver.execute_script(
            'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="block"') 
        driver.execute_script(
            'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="none"') 
        time.sleep(1)

然后就是像素对比了

def one():
    img1 = Image.open("wz.png")  
    img2 = Image.open("qk.png")
    left = 60
    for i in range(left, img1.size[0]):
        for j in range(img1.size[1]):
            if not is_px_equal(img1, img2, i, j):
                left = i
                return left
    return left


def is_px_equal(img1, img2, x, y):
    """
    判断两个像素是否相同
    :param img1: 图片1
    :param img2:图片2
    :param x:位置1
    :param y:位置2
    :return:像素是否相同
    """
    pix1 = img1.load()[x, y]
    pix2 = img2.load()[x, y]
    threshold = 60
    
    if abs(pix1[0] - pix2[0]) < threshold and abs(pix1[1] - pix2[1]) < threshold and abs(pix1[2] - pix2[2]) < threshold:
        return True
    else:
        return False

然后返回的left就是我们需要滑动的距离(可微调这个网址在我朋友的测试下是0.79最稳定)

需要用的的库为

import numpy as np
import cv2
from PIL import Image

看看效果
在这里插入图片描述

完美
好了今天就到这儿了
下次分析个找不到原图的方法给大家
啊哈哈哈

发布了6 篇原创文章 · 获赞 32 · 访问量 1532

猜你喜欢

转载自blog.csdn.net/qq_41927995/article/details/100130516