第四关在第三关的基础上多了以下两点:
1、网页响应时间增加。(要想快速找到密码就需要多线程)
2、强密码,100位的密码按位置随机出现,需要抓取网页不同位置密码,再组合起来。
解题过程:
第一次(失败): 我发现password列表共13页,所以我以为只要将列表中不重复的位置的值加到一个list中。再将list转换为一个int的密码,就是登录密码。在尝试多次,返回登录失败后,我发现13页的密码长度不超过70位,应该是哪里出错了。这时,我没想到密码会是100位的。。。
第二次(成功): 在讨论区看到有人成功了,于是去学习经验,看到密码长度是100位,就想到怎么过关了。只要将第一次闯关的代码改动一下,加入密码长度判断,到达100位时就尝试登录。
闯关成功(630秒)::
第四关代码:http://www.cnblogs.com/hxs2660/p/5559611.html
第五关:识别验证码
解题过程:
1、 在这一关中,所需要的登录信息如下(用firebug抓取到的):
1:username,2:csrfmiddlewaretoken, 3:password, 4:captcha_0, 5:captcha_1
1.1 1、2两项我们都知道。password:老师并没给出密码提示,只能按照第2、3关密码0~30尝试。captcha_0:是登录页面上一个隐藏的值(可以获取到),对应的应该是验证码在服务器的值。captcha_1:验证码。
1.2 验证码识别是参考python网络数据采集这本书中11.3节:读取验证码与训练Tesseract。经测试,Tesseract识别率在16%左右(因为我没有训练样本),我们可以通过对识别出的验证码加以验证就知道是否可以用来登录,因为验证码是有规律的:长度为4,全是大写字母,这样登录的话有50%几率验证码正确。
--Tesseract:Tesseract是一个OCR库,参考:https://github.com/tesseract-ocr/tesseract/wiki
1.3 以下是程序流程图:
2 闯关成功(用时:640秒...):
第5关代码有点长就不复制过来了,有兴趣可以看下https://github.com/hxs2660/hbk_crawler/blob/master/ex05.py