V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
nannanziyu
V2EX  ›  分享创造

一个使用 Angular4 写的自动识别并填写 V2EX 验证码的 chrome 扩展

  •  2
     
  •   nannanziyu · 2017-11-28 00:34:13 +08:00 · 3928 次点击
    这是一个创建于 2555 天前的主题,其中的信息可能已经有所发展或是发生改变。

    V2EX Captcha Recognizer Extension

    自动识别并填写 V2EX 注册 / 登录 / 重设密码 等页面的验证码

    image

    实现原理

    1. V2EX 的验证码的设计在 阻挠肉眼识别便于模式识别 两方面都达到了很高的水准。前者无需赘言,后者用之前项目做过的本地模式识别库简单测试,识别率非常高。

    2. 前者使这个功能成为一个迫切的需求,后者使自动识别成为技术上的可能,但还仅仅是可能。

    3. 但最重要的一点是,当验证码地址 https://www.v2ex.com/_captcha?once={number}Cookie 不变的情况下,可以反复获取文字相同,但是重绘过的图片。

    image

    1. 所以可以进行多次识别进行比较来增加准确度。图片数在 10 张左右时,准确率已经可以接受;当图片数超过 20 张时,几乎达到了 100%的准确度,完全可以用作自动登录。

    实现步骤

    1. 获取 N 张验证码图片
    2. 使用 Canvas 将多张图片组合成一张
    3. 使用 百度 OCR 或者 GOOGLE CLOUD VISION API 进行在线识别
    4. 比较返回的结果列表,获取每个位置出现频次最高的字符

    关于百度 OCR 和 GOOGLE CLOUD VISION

    1. 前者容错高,后者精度高。通俗点来说,前者给多么混乱的图片,都会尝试识别并返回出点什么结果来,后者则更容易返回空结果;但是同样条件下,后者返回的结果更精确。
    2. 前者每天有 500 条免费额度,所以扩展里自带了一个百度 OCR 的 AppId,可以开包即用。而后者每个月只有 1000 条免费额度,没有包含,可以在 Popup 里自己设置。

    Thanks to

    1. Angular 4
    2. Gulp
    3. Clarity
    4. baidu-aip-sdk
    5. GOOGLE CLOUD VISION

    Build

    To build the project you need to run the following node commands:

    • npm install -g @angular/cli gulp
    • npm install
    • gulp

    因为有 node-sass 的依赖,而 node-sass 又需要 node-gyp
    node-gyp 在 Windows 上 Build 需要 Python 2.7Visual C++ Build Tools

    Release

    不想安装环境或者不想 Build 的,可以直接到 Release 下载扩展包,在 扩展页面 chrome://extensions/ 加载已解压的扩展程序即可。

    Github

    https://github.com/gragrance/v2exCaptchaRecognizer

    12 条回复    2017-11-29 10:49:10 +08:00
    koodai
        1
    koodai  
       2017-11-28 00:41:49 +08:00 via Android
    服!贵在思路
    freed
        2
    freed  
       2017-11-28 01:06:34 +08:00
    赞~
    EchoChan
        3
    EchoChan  
       2017-11-28 01:08:10 +08:00 via Android
    有意思,这验证码,虽然不算差,但体验真不好。
    zhigang1992
        4
    zhigang1992  
       2017-11-28 01:55:23 +08:00   ❤️ 2
    阻挠肉眼识别 和 便于模式识别 lol
    vipper
        5
    vipper  
       2017-11-28 07:33:25 +08:00 via iPhone
    用这种是不是要比打码便宜很多
    wellsc
        6
    wellsc  
       2017-11-28 09:00:23 +08:00 via iPhone
    👍
    ty89
        7
    ty89  
       2017-11-28 11:03:33 +08:00
    v2 这种验证码就只能摆个样子,用投影法切分成单个字符再稍微调整尺寸和位置,再丢给 ocr 就搞定了。
    防机器识别最重要的几点统统不具备:
    1 )字体重叠粘连
    2 )背景干扰
    3 )字体扭曲
    dotpig
        8
    dotpig  
       2017-11-28 12:49:38 +08:00
    “阻挠肉眼识别” 和 “便于模式识别” 的意思是不是给真人麻烦,给机器人方便的意思?
    SoloCompany
        9
    SoloCompany  
       2017-11-28 12:52:55 +08:00 via iPhone
    然而我只用 gg 登录
    myself659
        10
    myself659  
       2017-11-28 14:37:44 +08:00
    验证码影响用户体验,又解决不爬虫 是不是可以被淘汰了
    soulmine
        11
    soulmine  
       2017-11-28 20:40:26 +08:00
    @myself659 不是 至少有了验证码会让很大一部分写爬虫的感觉很日狗 说不定就跳过了 至少我是这样 当然假如什么非爬不可的 就另说了 www
    AnyISalIn
        12
    AnyISalIn  
       2017-11-29 10:49:10 +08:00
    思路不错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1497 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:08 · PVG 01:08 · LAX 09:08 · JFK 12:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.