这关的密码有点恶心,一共13页,前12页每页8个最后一页有4个,所以一共是一百位的密码,wc,一百位,取完黄花菜都凉了,还好
threading这模块,多线程并发,不过这模块有点坑,至于坑在何处,大家学习了这模块后会发现的。
1.和第三关的登陆一模一样,登陆后先随便输入密码,提交后会提示一个pwd_list页面,并且密码的位置都是随机的,每次都不相同,哎
wc,还好有个可以给字典排序sorted函数。
废话不多说,上代码。
#! user/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree
import threading
import time
def getPassword(session,url,pwd_dict):
tree_pos=[]
tree_val=[]
req=session.get(url).text
tree=etree.HTML(req)
tree_pos=tree.xpath('//td[@title="password_pos"]/text()')
tree_val=tree.xpath('//td[@title="password_val"]/text()')
print(tree_pos,tree_val)
for i,j in zip(tree_pos,tree_val):
pwd_dict[int(i)]=int(j)#强制转换类型,不然报错。并且字典的key要为int型,不然排序函数没啥卵用。
return
def main():
pwd=''
pwd_dict={}
threads=[]
url1="http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex03/"
session=requests.Session()
req=session.get(url1)
cookies=requests.utils.dict_from_cookiejar(session.cookies)
data1={'username':'youncyb','password':'heibanke163com','csrfmiddlewaretoken':cookies['csrftoken']}
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0',
'Referer':'http://www.heibanke.com/accounts/login/?next=/lesson/crawler_ex02/'
}
req=session.post(url1,data=data1,headers=headers)
cookies=requests.utils.dict_from_cookiejar(session.cookies)
url="http://www.heibanke.com/lesson/crawler_ex03/pw_list/?page=1"
for i in range(50):#保证密码达到100位
t=threading.Thread(target=getPassword,args=(session,url,pwd_dict))
t.start()
time.sleep(8)#少于8秒报错,其实8加个random好一点吧。
threads.append(t)
for t in threads:
t.join()
pwd_list=sorted(pwd_dict.items(),key=lambda k:k[0])
print(pwd_list)
for (i,j) in pwd_list:
pwd+=str(j)
print(pwd)
print(len(pwd))
url2="http://www.heibanke.com/lesson/crawler_ex03/"
data2={'username':'adc','password':pwd,'csrfmiddlewaretoken':cookies['csrftoken']}
req=session.post(url2,data=data2,headers=headers).text
content=str(etree.HTML(req).xpath('//h3/text()'))
key="您输入的密码错误, 请重新输入"
if key not in content:
print(content)
print(i)
if __name__ == '__main__':
main()
Comments NOTHING