购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 功能设计

1.4.1 破解字符验证码

字符验证码是一种包含数字、字母或者掺杂斑点与混淆曲线的图片验证码。破解此类验证码时,首先需要定位验证码图片在HTML代码中的位置,并下载该图片。然后,使用OCR技术进行验证码的识别。

下面以http://spider.mingribook.com/spider/word/地址为例,讲解如何破解字符验证码,步骤如下:

(1)使用浏览器打开测试网页http://spider.mingribook.com/spider/word/,如图1.7所示。

(2)按F12键打开浏览器的开发者工具,然后在HTML代码中获取验证码图片所在的位置,如图1.8所示。

图1.7 打开字符验证码所在的网页

图1.8 获取验证码图片在HTML代码中的位置

(3)向目标网页发送网络请求,并在返回的HTML代码中获取验证码图片的下载地址,然后将验证码图片下载到本地。代码如下:

上述代码运行后,保存到本地的验证码图片如图1.9所示。

图1.9 验证码图片

(4)使用Pillow模块和tesserocr模块对下载的验证码图片进行识别。具体实现时,首先通过Image.open()方法打开验证码图片,然后通过tesserocr.image_to_text()方法识别图片中的验证码信息并输出。代码如下:

程序运行结果如下:

     验证码为:uuuc

这里需要注意的是,上面识别的验证码图片只是最常见的一种类型,其中没有任何干扰线。然而,在实际浏览网站时,为了增强安全性,网站通常都会在验证码中增加多条干扰线,如图1.10所示。

图1.10 带有干扰线的验证码

在遇到如图1.10所示的验证码图片时,我们如果继续使用上述步骤(4)中的代码进行识别,就可能会得到以下结果:

     验证码为:YSGN.

或者

     验证码为:

观察上面的结果,我们发现直接使用OCR技术识别带有干扰线的验证码图片时,结果可能会多出一些字符,或者完全无法识别。那么,对于这种验证码图片,我们应如何进行识别呢?这时,一个有效的方法是先对要识别的验证码图片进行灰度处理,然后进行二值化处理,最后使用OCR技术进行识别。优化后的代码如下:

运行上述代码后,图1.10所示的验证码图片效果会变为如图1.11所示的效果。

图1.11 经过灰度处理和二值化处理后的验证码图片

这时,程序即可正常地对图片中的验证码进行识别,结果如下:

     验证码为:YSGN

1.4.2 破解滑动拼图验证码

滑动拼图验证码是许多网站和APP中经常使用的一种图形验证码形式,要求用户将拼图块拖动到正确的位置以完成验证过程。本项目将使用Python结合Selenium自动化测试工具来破解滑动拼图验证码,测试地址为http://spider.mingribook.com/spider/jigsaw/。具体实现步骤如下:

(1)在浏览器中打开滑动拼图验证码的测试网页地址http://spider.mingribook.com/spider/jigsaw/,如图1.12所示。

(2)按F12键打开浏览器的开发者工具,单击按钮滑块,然后在HTML代码中依次定位“按钮滑块”“图形滑块”以及“空缺滑块”对应的HTML标签位置,如图1.13所示。

图1.12 滑动拼图验证码

图1.13 确定滑动拼图验证码的HTML代码位置

(3)拖动按钮滑块,完成滑动拼图验证码的校验,此时将显示如图1.14所示的HTML代码。

图1.14 验证成功后HTML代码变化

对比图1.13与图1.14,可以看出:按钮滑块在默认情况下的位置为left:0px,图形滑块在默认情况下的位置为left:10px;而在验证成功后,按钮滑块的left值变为174px,图形滑块的left值变为184px。由此可以总结出整个验证过程中的滑块位置变化情况,如图1.15所示。

图1.15 验证过程中的滑块位置变化情况

(4)确定滑动位置变化情况后,在Python代码中通过Selenium库调用Selenium自动化测试工具,完成模拟滑块滑动的操作。代码如下:

上述代码运行后,即可自动对http://spider.mingribook.com/spider/jigsaw/测试网页中的滑动拼图验证码进行操作,并弹出如图1.16所示的验证成功提示框,从而实现智能破解滑动拼图验证码的效果。

图1.16 验证成功提示框

1.4.3 第三方平台识别验证码

在Python中,除了使用OCR技术和Selenium自动化测试工具破解验证码,还可以借助第三方平台进行验证码识别。第三方平台通常会提供完善的API接口,开发人员可以根据平台文档快速完成开发需求。常见的第三方验证码识别平台主要分为两类:打码平台和AI开发者平台。其中:打码平台由平台官方完成验证码识别,并在较短时间内返回结果,如超级鹰平台;AI开发者平台则主要采用人工智能技术进行验证码识别,例如百度AI以及其他AI平台等。

本项目以超级鹰打码平台为例,讲解识别验证码的具体过程。步骤如下:

(1)在浏览器中打开超级鹰打码平台首页(http://www.chaojiying.com/),单击“用户注册”按钮,如图1.17所示。

图1.17 超级鹰打码平台首页

(2)在打开的用户中心页面中填写注册账号的基本信息,并单击“同意以下协议并注册”按钮,如图1.18所示。

图1.18 填写注册账号的基本信息

说明

账号注册完成后,可以联系平台的客服人员,申请免费测试的题分。

(3)账号注册完成后,在超级鹰打码平台网站的顶部导航栏中单击“开发文档”,打开“开发文档”页面,在该页面的“常用开发语言示例下载”中选择python,如图1.19所示。

图1.19 选择开发语言示例

(4)在Python语言Demo下载页面中可以查看相关的注意事项,单击“单击这里下载”超链接,即可下载使用Python结合超级鹰打码平台接口实现的识别验证码示例代码,如图1.20所示。

图1.20 下载示例代码

(5)使用PyCharm打开下载的示例代码。该示例代码默认已经封装了识别验证码的功能,具体代码如下:

(6)在确认用户名已经完成充值的情况下,创建超级鹰打码平台的实例对象,并传入相应的用户名、密码,以及软件ID,然后指定要识别的验证码图片,最后使用PostPic()方法识别图片,并输出识别结果。代码如下:

这里使用超级鹰打码平台示例代码提供的验证码图片,运行程序,结果如下:

     {'err_no': 0, 'err_str': 'OK', 'pic_id': '3109515574497000001', 'pic_str': '7261', 'md5': 'cf567a46b464d6cbe6b0646fb6eb18a4'}

在上述结果中,pic_str对应的值即为识别到的验证码信息。

另外,在步骤(6)中使用PostPic()方法识别验证码图片时,使用了参数1902,它表示要识别的验证码类型。超级鹰打码平台支持的常用验证码类型及其说明如表1.1所示。

表1.1 常用验证码类型及其说明 OrCU9CnPeWgE2QhvMGrBrFtoylXN6+pbFVF1WQAisGyGyTmU09hpKUF577fp1STq

点击中间区域
呼出菜单
上一章
目录
下一章
×