第二關
第二關就是去登陸,用戶名是任意的,密碼是0到30中的一個數字,我們一個個試過去就行
步驟
- 構造請求參數
- 然後密碼從0到30去嘗試登陸
代碼
#!usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import re
#定義一個登陸類
class Login(object):
def __init__(self):
#設置會話對象,命名爲session,Session()的作用就相當於在同一個瀏覽器裏進行訪問
#可以跨請求保持cookies,不需要再單獨爲每個請求設置cookie
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',
'Accept-Language': 'zh-cn',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive'
}
#設置get和post請求的url
self.url = 'http://www.heibanke.com/lesson/crawler_ex01/'
#設置post請求需要提交的數據,'username'和'password'兩個參數是必要的,'csf'爲空也可以登陸
self.data = {
'csrfmiddlewaretoken' : '',
'username' : 'user',
'password' : ''
}
#可以把get_cookies()方法去掉,因爲經過測試,即使post的時候,cfs爲空也可以進行登陸
#這裏留着是強迫症
#得到csf
def get_cookies(self):
response = self.session.get(url=self.url, headers=self.headers)
print(response.cookies)
#取出cookie,可以打印response.cooikes看看裏面是什麼內容
self.data['csrfmiddlewaretoken'] = response.cookies['csrftoken']
#進行post登陸
def post_page(self):
response = self.session.post(url=self.url, headers=self.headers, data=self.data)
#用re,把頁面的內容提取出來,方便我們在登陸過程中查看登陸的狀態
text = re.findall('<h3>(.*?)</h3>', response.text, re.S)[0]
print ('用戶名:', self.data['username'],'----密碼: ',self.data['password'],'---csf:',self.data['csrfmiddlewaretoken'],'提示信息:',text)
return text
def login(self):
self.get_cookies()
#從0到30,給'password'設值
for x in range(31):
self.data['password'] = str(x)
text = self.post_page()
#假如闖關成功,頁面就會有成功兩個字
if '成功' in text:
print('你成功的闖關了!密碼是:', x)
break
if __name__ == "__main__":
login = Login()
login.login()
結語:
源碼: 點我
歡迎關注我的公衆號
瘋子的Python筆記