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