1.这一关是真的皮,首先加了个验证码,所以首想到 python的pytesseract这个模块,不过这个模块的识别率有点低,连斜倒的英文字母都无法 识别,正确率低的可怜,本想到做一些图形预处理,再切割字符,由于只有英文字母,只需储存所有的验证码字母,再进行相似度对比,但是工程量好大,还是算了,识别率低就低吧,只要输入验证码不对,反复识别直到输入正确验证码为止,这样就可判断密码是否正确。
2.这个密码是搞哪样啊,最大长度20位,又没提示不试到死?查了下别人的博客,发现还是遵从0-30的数字?试了下,所有密码都不对,没辙了,哪位仁兄知道后通知我我一下。
还是上一下代码,供大家参考下。
#! /user/bin/env python # -*- coding:utf-8 -*- import pytesseract from PIL import Image import requests from lxml import etree import time def getCode(session,req):#存储验证码,并返回cookie值 tree=etree.HTML(req).xpath('//img/@src') captcha_0=etree.HTML(req).xpath('//input/@value')[1] token=etree.HTML(req).xpath('//input/@value')[0] url="http://www.heibanke.com" for i in tree: url+=i req=session.get(url,timeout=5).content with open(r'D:/code.png','wb') as f: f.write(req) return (captcha_0,token) def try_pwd(session,url1,url2,i): req=session.get(url2,timeout=5) cookies=requests.utils.dict_from_cookiejar(session.cookies) data1={'username':'youncyb','password':'heibanke163com','csrfmiddlewaretoken':cookies['csrftoken']} req=session.post(url2,data=data1).text (captcha_0,token)=getCode(session,req) im=Image.open(r'D:/code.png') code_string=pytesseract.image_to_string(im) data={'username':'adc','password':i,'csrfmiddlewaretoken':token,'captcha_0':captcha_0,'captcha_1':code_string} print (data) ret=session.post(url1,data=data).text content=etree.HTML(ret).xpath('//h3/text()') return (content,i) def main(): url1="http://www.heibanke.com/lesson/crawler_ex04/" url2="http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex04/" session=requests.Session() a="您输入的密码错误, 请重新输入" b="验证码输入错误" for i in range(30): (content,m)=try_pwd(session,url1,url2,i) print(content) if b in content:#只要验证码输入不对,就重复实验此密码 while True: content=try_pwd(session,url1,url2,m) print(content) if b not in content[0]: break if __name__ == '__main__': main()
Comments NOTHING