聊聊滑块验证码的识别

很长一段时间没写文章了,今天来一篇,聊聊滑块验证码。之前一段时间在研究下滑块验证码相关的东西,拿腾讯的验证码来玩,使用Selenium来模拟滑动,这里也就先不介绍Selenium 的基本用法来,主要来聊聊怎么实现滑块验证码的识别问题。
滑块验证码可以说是目前使用最多,体验相对比较好的验证方式来,在反爬虫上面也确实有比较好的效果,但爬虫和反爬虫,本身就是一对冤家,相互促进项目影响。废话不多说,直接上滑块验证码的干货吧。

一、目标

就拿腾讯的滑块验证码来说吧,其他滑块也比较类似,就这个:

QQ滑块

先大概梳理一下这个特征,点击验证,弹出这个滑块验证码,用鼠标拖动到缺口阴影位置松手即可实现验证。
逻辑比较简单,目前要处理的核心问题就是怎么找到这个阴影位置,因为可能有不同的图片而且图片中缺口阴影的位置也不确定。
问题可以简化为:如何找到背景图中缺口的准确位置

二、查找缺口阴影位置

定下了解决问题的目标,下一步就是查找当前的已知条件,看看已知条件能否找到突破口,目前我们可以确定的是,如果要用滑块验证码,至少要有两样东西:

  1. 滑动的滑块图形,就是这个:
滑块图
  1. 滑动要拼出的背景图,就是这个:
背景图

这两个家伙是每个滑块都有的东西,先从这两个上面入手:

先试着处理下背景图,这里用python来写了:

from PIL import Image
if __name__ == "__main__":
    Image.open('hycdn_1_1585354975542067968_0.jpeg').convert('L').save('cap4.jpg')

我们将这个背景图片置成灰色图片看看,现在是这个样子:


置成灰色图片

现在这个背景图没有其他杂色了,再看这个缺口位置,颜色要更深一点,那接下来就处理下滑块了,让它尽量和这个缺口相似:

def convert(imgName, saveName):
    im = Image.open(imgName)
    im = im.convert('RGBA')

    width = im.size[0]
    height = im.size[1]
    for h in range(0, height):
        for w in range(0, width):
            pixel = im.getpixel((w, h))
            if pixel[0] > 0 and pixel[1] > 0 and pixel[2] > 0 and pixel[3] > 0:
                im.putpixel((w, h), (0,0,0, 220))
            elif pixel[0] == 0 and pixel[1] == 0 and pixel[2] == 0:
                im.putpixel((w, h), (0, 0, 0, 220))
            else:
                pass
    im.save(saveName)

convert('hycdn_2_1585354975542067968_0.png','cap2.png')

将整张滑块图进行像素调节,这个调节值是反复试出来的,出来的效果是这样:


处理后滑块

这样处理后,我们要做的其实就剩下最后一步了:从这个背景图中找出和这个滑块最相似的图形并标记出来

这里使用了一个开源库aircv,Github上地址是https://github.com/NetEaseGame/aircv,大概使用方式是这个:

import aircv as ac
imsrc = ac.imread('youimage.png') # 原始图像
imsch = ac.imread('searched.png') # 带查找的部分
ac.find_template(imsrc, imsch)
#返回值
#{'confidence': 0.5522063970565796, 'result': (557, 214), 'rectangle': ((489, 146), (489, 282), (625, 146), (625, 282))}
# result: 查找到的点
# rectangle: 目标图像周围四个点的坐标
# confidence: 查找图片匹配成功的特征点 除以 总的特征点

从图形中查找相似部分,详细使用可以查看Github。
我们这样处理一下:

    imsrc = ac.imread('cap4.jpg')
    imobj = ac.imread('cap2.png')

    # find the match position
    pos = ac.find_template(imsrc, imobj)

    print pos
    # {'confidence': 0.5522063970565796, 'result': (557, 214), 'rectangle': ((489, 146), (489, 282), (625, 146), (625, 282))}

    color = (0, 255, 0)
    line_width = 10

    draw_rectangle(imsrc, pos['rectangle'][0], pos['rectangle'][-1], color, line_width)

python-opencv2绘制一下区域看看:

import cv2
def draw_rectangle(img, pos1, pos2, color, line_width):
    cv2.rectangle(img, pos1, pos2, color, line_width)
    cv2.imshow('objDetect', imsrc)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

好啦,我们看下效果:


成功命中

再试几个看看:



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279

推荐阅读更多精彩内容

  • 在前面一篇博客,介绍了 Selenium 的基本用法和爬虫开发过程中经常使用的一些小技巧,利用这些写出一个浏览器爬...
    FifiZhuang阅读 10,755评论 4 81
  • 1.感恩美好的一天开启了,带着美丽的心情,一早继续去公园里甩手,做呼吸,公园里锻炼身体的人也越来越年轻,在我沉浸在...
    张聪_8be5阅读 199评论 0 2
  • 盯表打卡走 油门轰轰轰 黄灯抢着过 只为避高峰
    晚风轻拂阅读 272评论 9 4
  • 枫叶 文:孤独的伴郎 记忆的树, 凋零, 时光与风雨 缠绵的 悲欢离合。 是相思的种子, 缘分的零落。 漂泊...
    孤独的伴郎阅读 223评论 0 1