滑块验证码

作者: LCSan | 来源:发表于2020-05-05 12:47 被阅读0次
#encoding=utf-8
'''
Created on 2020年1月6日

@author: 瞌睡蟲子
'''
import PIL.ImageChops as imagechops
from PIL import Image, ImageDraw
import random

def CalcDistance(srcImg,distImg,picwidth=50):
    im1 = Image.open(srcImg)
    im2 = Image.open(distImg)
    #得出两图不一致的地方
    diff=imagechops.difference(im1, im2)
    draw =ImageDraw.Draw(diff)
    sz=im1.size
    #通过颜色处理清除干扰块
    for x in range(0,sz[0]):
        for y in range(0,sz[1]):
            pixelColor=diff.getpixel((x,y))
            if pixelColor[0]>=100 or pixelColor[1]>=100 or pixelColor[2]>=100:
                draw.line((x, y, x, y),(255,255,255,255))
            else:
                draw.line((x, y, x, y),(0,0,0,0))
    # #清理完可以show一下,查看清理完之后的黑白化效果
#     diff.show()
#     diff.save(r'C:\Users\Administrator\Desktop\我们不一样.png')
    #找第一个块中的参照点
    firsetPoint=[0,0]
    for x in range(0,sz[0]):
        for y in range(0,sz[1]):
            pixelColor=diff.getpixel((x,y))
            if (len(pixelColor)==4 and pixelColor!=(0,0,0,0)) or (len(pixelColor)==3 and pixelColor!=(0,0,0)):
                firsetPoint=[x,y]
                break
        if firsetPoint!=[0,0]:
            break
    # 往后跳50找第二个块中的参照点,50是矩形宽度
#     print(firsetPoint)
    secondPoint=[0,0]
    for x in range(firsetPoint[0]+picwidth,260):
        for y in range(0,sz[1]):
            pixelColor=diff.getpixel((x,y))
            if (len(pixelColor)==4 and pixelColor!=(0,0,0,0)) or (len(pixelColor)==3 and pixelColor!=(0,0,0)):
                secondPoint=[x,y]
                break
        if secondPoint!=[0,0]:
            break
    # #画两条线看看位置是否标注正确,仅用于调试
#     draw.line((firsetPoint[0], firsetPoint[1], firsetPoint[0]+20, firsetPoint[1]),(6,255,9,0))
#     draw.line((secondPoint[0], secondPoint[1], secondPoint[0]+20, secondPoint[1]),(9,8,255,0))
#     diff.save(r'C:\Users\Administrator\Desktop\我们不一样1.png')
    # diff.show()
#     print(secondPoint)
    diffPixel=secondPoint[0]-firsetPoint[0]
#     print(diffPixel)
    return GetStacks(diffPixel)
    
def GetStacks(distance):
    distance += 20
    '''
    匀加速\减速运行
        v = v0 + a * t
    位移:
    s = v * t + 0.5 * a * (t**2)
    '''
    # 初速度
    v0 = 0
    # 加减速度列表
    a_list = [3, 4, 5]
    # 时间
    t = 0.2
    # 初始位置
    s = 0
    # 向前滑动轨迹
    forward_stacks = []
    mid = distance * 3 / 5
    while s < distance:
        if s < mid:
            a = a_list[random.randint(0, 2)]
        else:
            a = -a_list[random.randint(0, 2)]
        v = v0
        stack = v * t + 0.5 * a * (t ** 2)
        # 每次拿到的位移
        stack = round(stack)
        s += stack
        v0 = v + a * t
        forward_stacks.append(stack)
    back_stacks = [-1, -1, -2, -3, -2, -3, -2, -2, -3, -1]
    return {'forward_stacks': forward_stacks, 'back_stacks': back_stacks}

if __name__ == '__main__':
    data=CalcDistance(r"C:\Users\Administrator\Desktop\11.bmp", r"C:\Users\Administrator\Desktop\12.bmp")
    print(data)

相关文章

  • Python+Selenium 拖动滑块 (一)

    在我们登录账号中常常会遇到各种验证码,如图片验证码,拖动滑块验证.....滑块验证码只需要用户使用鼠标将滑块从某个...

  • 爬虫滑动验证识别 opencv-python

    前言 滑块验证码破解是一直都是一个棘手的问题,毕竟多数网站都会采用滑块验证码要搞现在的滑块验证码绕不开图像处理,图...

  • selenium:如何模拟鼠标拖放(drag and drop)

    鼠标拖放是手工常用操作,可以用于移动元素,如,用于拖放验证码滑块等,以大麦网登录界面验证码滑块为例,介绍如下: (...

  • selenium破解网易易盾滑块

    前言 之前由于工作原因做过极验验证的滑块验证码,该网站的滑块验证码是直接能提取出全图片和缺口图片,利用pillow...

  • python selenium 淘宝滑块验证码 问题

    正常打开淘宝等页面,搜索商品和滑块验证码是没有问题的,但是用selenium打开,在多次翻页后出现的滑块验证码就总...

  • Python 滑块验证码

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

  • 聊聊滑块验证码的识别

    很长一段时间没写文章了,今天来一篇,聊聊滑块验证码。之前一段时间在研究下滑块验证码相关的东西,拿腾讯的验证码来玩,...

  • 三行 Python 代码制作图片验证码

    现在验证码的种类真的是越来越多,短信验证码、语音验证码、图片验证码、滑块验证码 ... 我们在 PC 的网页端或者...

  • Python第三方库巧用,制作图片验证码只需三行代码

    现在验证码的种类真的是越来越多,短信验证码、语音验证码、图片验证码、滑块验证码 ... 我们在 PC 的网页端或者...

  • 用Python制作图片验证码

    现在验证码的种类真的是越来越多,短信验证码、语音验证码、图片验证码、滑块验证码 ... 我们在 PC 的网页端或者...

网友评论

    本文标题:滑块验证码

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