搞定滑块和验证码


Frida可视化工具Dwarf2[1]已经开源,大家有什么问题,可以一起交流。
本文内容仅用于学习,严禁用作非法目的。
验证码
作用
验证码作为一种人机识别手段,其终极目的,就是区分正常人和机器的操作。 区分人机行为的作用不言而喻。互联行为的注册、登录、发帖、领优惠券、投票等等应用场景,都有被机器刷造成各类损失的风险,如果不对各类机器垃圾的行为加以防范,灌水内容、垃圾注册、恶意登录、刷票、撞库、活动作弊、垃圾广告、爬虫、羊毛党等用户行为一旦发生,将对产品自身发展、用户体验造成极大的影响。
搞定验证码
很多网站都使用了验证码进行人机识别,给爬虫带来了一定的困扰。常见的验证码如下:


trwebocr
一个开源的ocr工具,非常强大。官方介绍是: 开源易用的中文离线OCR,识别率媲美大厂,并且提供了易用的web页面及web的接口,方便人类日常工作使用或者其他程序来调用~ 。笔者在github[2]上有关于它的使用。
通过一个例子来感受一下这个工具。以下是我2022虎年快乐这个公众号里面部分内容的截图:

trwebocr的识别结果:

所有的文字都被识别出来了!还是非常nice的。
过验证码
有这么强大的工具,过验证码岂不是轻而易举。验证码的图片如下:

直接上代码:
JWYN被成功识别出来。大功告成!!!!!!!

python安装模块的时候建议使用豆瓣源,真的好快。
缺陷
trwebocr的准确率达不到100%,不过依然不能掩盖它强大的OCR功能。当然也可以自己实现类似的功能,使用opencv+CNN效果也不错。
滑块
滑块验证码是在网站、App等应用中常见的一种验证方式,通过按照一定规则滑动滑块到指定位置完成验证,才可以进行下一步操作。滑块验证码有两种设计,一种是在滑动框内“一滑到底”即完成验证的,还有一种是滑动滑块拼合拼图完成验证的,如下图所示。由于拼图式的滑块验证码安全性更高,趣味性更强,“一滑到底”式的滑块验证码已经基本被淘汰。
搞定滑块
使用滑块机制的网站也有好多,增大了爬虫的难度,常见的滑块验证:


获取图片
滑块验证第一步需要获取大图片,后面统称为target,以及小图片,后面称为template。具体可参见自动登陆QQ空间(3)。 (1) 如果target和template都可以正常下载的话,直接进行下载。 (2 ) 如果不能下载的话,可以使用两种方式进行获取:
第一种方式是使用chromeDriver的截图功能:
第二种方式是使用代理截获相应下载图片: 笔者使用的代理框架是Titanium[3](C#)框架。
图片不能下载却可以显示出来使用到技术是img的onload属性,onload 事件在图片加载完成后立即执行。下面的代码就是当图片加载完成后立即删除。
图片匹配
文中代码具体可参见自动登陆QQ空间(3)和代码中相应的注释。 python版本:
写在最后
大部分验证码和滑块的问题可以通过文章中的方式搞定,如果是短信验证码,可能需要接码平台来搞定了。最后上一段代码,模拟人类滑动滑块行为的:
公众号
更多内容,欢迎关注我的微信公众号:半夏之夜的无情剑客。

References
Dwarf2: https://github.com/BurningTeng/Dwarf2
github: https://github.com/BurningTeng/OCR_frame
Titanium: https://github.com/justcoding121/titanium-web-proxy