版权声明:转载请注明! https://blog.csdn.net/linfeng886/article/details/82083578
第三关
第三关相比第二关多了一个登陆的步骤,我们首先必须要登陆到他的网站,然后才能去猜密码
步骤
- 先注册一个账号 http://www.heibanke.com/lesson/crawler_ex02
- 然后我们需要用这个账号进行登陆
- 登陆以后步骤就跟第二关一样了
代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import re
class Login(object):
def __init__(self):
self.session = requests.Session()
self.headers = {
'Host': 'www.heibanke.com',
'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 12_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/68.0.3440.83 Mobile/16A5345f Safari/604.1'
}
self.url_get = 'http://www.heibanke.com/lesson/crawler_ex02/'
# 登陆请求的网址设为空,下面从请求中提取
self.url_login = ''
# 模拟登陆的data
self.data_test = {
'csrfmiddlewaretoken': '',
'username': 'user',
'password': ''
}
# 网站登陆所需要的data
self.data_login = {
'csrfmiddlewaretoken': '',
'username': '你的账号',
'password': '你的密码'
}
# 获取cookies
def get_cookies(self):
# 要完成这个题,首先需要登陆网站,假如你没登陆网站,那么访问这个网址的时候会跳转到登陆界面
response = self.session.get(url=self.url_get, headers=self.headers)
# 如果登陆网站的csf为空,也就是我们还没登陆,我们给csf赋值,然后返回登陆所请求的url
if self.data_login['csrfmiddlewaretoken'] == '':
self.data_login['csrfmiddlewaretoken'] = response.cookies['csrftoken']
# 已经跳转到登陆界面了,我们把登陆url提取出来
return response.url
# 如果登陆网站的csf有值了,那么就是说我们已经登陆了,现在我们给模拟登陆的csf赋值
self.data_test['csrfmiddlewaretoken'] = response.cookies['csrftoken']
def login(self):
response = self.session.post(
url=self.url_login, headers=self.headers, data=self.data_login)
# 若登陆成功,会重定向跳转到http://www.heibanke.com/lesson/crawler_ex02/
print(response.url)
if response.url == self.url_get:
print('登陆成功!')
return True
else:
print('账号密码错误!')
return False
# 请求界面
def post_page(self):
response = self.session.post(
url=self.url_get, headers=self.headers, data=self.data_test)
content = response.text
text = re.findall('<h3>(.*?)</h3>', content, re.S)[0]
print('用户名:', self.data_test['username'], '----密码: ', self.data_test['password'],
'---csf:', self.data_test['csrfmiddlewaretoken'], '提示信息:', text)
return text
def login_test(self):
# get_cookies()返回的是登陆所要请求的url
self.url_login = str(self.get_cookies())
if self.login():
# 因为登陆成功了,所以重新设置cookies
self.get_cookies()
for x in range(31):
self.data_test['password'] = str(x)
text = self.post_page()
if '成功' in text:
print('闯关成功!密码是:', x)
break
else:
return None
if __name__ == "__main__":
login = Login()
login.login_test()
结语:
源码: 点我
欢迎关注我的公众号
疯子的Python笔记