"写爬虫的时候遇到过反爬虫措施中的验证码吗,最终是怎样解决的",面试官经常这么问.
什么是验证码?
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于 计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
验证码有哪些分类?
常见的验证码有: 图片验证码、手机短信验证码、GIF动画验证码、图案验证码、手机语音验证码、视频验证码
1).图片验证码
a. 比较简单的图片验证码
四个0 字母上面两个不用处理直接可以用OCR识别技术(利用python第三方库--tesserocr)来识别
背景比较糊 清晰可见经过灰度变换和二值化后,由模糊的验证码背景变成清晰可见的验证码
b. 容易迷惑人的图片验证码
看不清的对于在这种验证码,语言一般自带图形库,添加上扭曲就成了这个样子,我们可以利用9万张图片进行训练,完成类似人的精准度,到达识别验证码的效果
2).短信验证码
短信尝试用Webbrowser技术,模拟用户打开短信的行为,最终获取短信验证码
3).计算题图片验证码
计算题 汉字计算题把所有可能出现的汉字都人工取出来,保存为黑白图片,把验证码按照字体颜色二值化,去除噪点,然后将所有图片依次与之进行像素对比,计算出相似值,找到最像的那张图片
4).滑动验证码
从左向右滑动对于滑动验证码 我们可以采用两个步骤:
第一、滑动按钮.
滑动按钮后我们惊奇的发现,右侧开始出现缺口,缺口出现了,我们就可以知道缺口的大致位置
第二、从左向右滑动到缺口位置.
(1)_如何确认缺口的位置?
我们可以利用图片的像素作为线索,确定好基本属性值,查看位置的差值,对于差值超过基本属性值,我们就可以确定图片的大概位置
(2)_如何自动截图后保存?
我们利用Selenium、Testng、Reporter环境和工具,使用Selenium文档提供的方法来自动截取屏幕,使用Reporter监听器,
当用例执行失败时截图,截图以出错时系统时间和出错方法的拼接命名,截图保存到项目目录下即可
5)、图案验证码
图案验证码对于这种每次拖动的顺序不一样,结果就不一样,我们怎么做来识别呢?
1.利用机器学习所有的拖动顺序,利用1万张图片进行训练,完成类似人的操作,最终将其识别
2.利用selenium技术来模拟人的拖动顺序,穷尽所有拖动方式,这样达到是别的效果
6)、标记倒立文字验证码
倒立的文字我们不妨分析下:对于汉字而言,有中华五千年庞大的文字库,加上文字的不同字体、文字的扭曲和噪点,难度更大了,我们心里又捏了一把汗
方法:首先点击前两个倒立的文字,之后通过scrapy框架确定7个文字的坐标(,具体见scrapy官方文档), 我们不难发现, 验证码中7个汉字的位置是确定的,只需要提前确认每个字所在的坐标并将其放入列表中,然后人工确定倒立文字的文字序号,将列表中序号对应的坐标加入input_points字段即可实现成功登录.
最后,小编为大家总结了常用的验证码识别基本步骤,按照每一步进行操作,识别验证码不是问题,请及时收藏:
验证码识别基本步骤: 1.预处理 2.灰度化 3.二值化 4.去噪 5.分割 6.识别
网友评论