
一.項目背景
   由于http協(xié)議是無狀態(tài)的協(xié)議,簡單理解為如果客戶端向服務(wù)器發(fā)送兩次請求,這
   兩次請求是獨立的,,也就是說服務(wù)器根本不知道是同一個客戶端發(fā)送過來的請求。所
以為了維護客戶端的請求狀態(tài),Cookie技術(shù)應(yīng)用而生。
   Cookie是通過客戶端保持狀態(tài)的解決方案,它是由服務(wù)器發(fā)送給客戶端的特殊信息,
而這些特殊信息以文本形式存儲放在客戶端,然后客戶端每次向服務(wù)器發(fā)送請求時會攜
帶上大量這些特殊信息。
   Session是通過服務(wù)器來保持狀態(tài)的,客戶端第一次訪問時,服務(wù)器為這個客戶端
創(chuàng)建唯一特征碼,也就是SessionID,客戶端再次請求時,服務(wù)器根據(jù)SessionID在服
務(wù)器數(shù)據(jù)庫中查詢,若有這個SessionID,則會做相應(yīng)響應(yīng)。

Cookie屬性
》》name=value,鍵和值,具體的Cookie名稱和內(nèi)容
》》expires=xxxxx,過期時間,Cookie有效期
》》path=/,根路徑,Cookie作用的具體路徑位置
》》httpOnly,此Cookie只能服務(wù)器操作,JS無法操作
二.實現(xiàn)過程
   本次項目我們爬取的目標網(wǎng)址為閃職網(wǎng),一個專門為爬蟲工程師進行練習(xí)的網(wǎng)址,也
   在此非常感謝網(wǎng)站后臺維護人員辛勤付出,網(wǎng)址為:http://shanzhi.spbeen.com/,從
中可以看出Cookies有csrftoken和shanzhi_kmer以及它們各自對應(yīng)的值

from selenium import webdriver
import time
import json
#用戶名,此處我們注冊四個用戶,如果無效讀者后期可自行注冊
users=[
    {'username':'test123456','password':'test123456'},
    {'username':'wfq123','password':'123'},
    {'username':'cauwfq','password':'cauwfq'},
    {'username':'cauwfq1234','password':'cauwfq1234'}
]
#登錄網(wǎng)址
def login(username,password):
    #初始化url
    url='http://shanzhi.spbeen.com/login/'
    #初始化webdriver
    driver=webdriver.Chrome()
    #最大化窗口
    driver.maximize_window()
    #請求url
    driver.get(url)
    #用戶名輸入框
    username_input=driver.find_element_by_xpath('//*[@id="username"]')
    #發(fā)送用戶名
    username_input.send_keys(username)
    #休眠1s
    time.sleep(1)
    #密碼輸入框
    password_input=driver.find_element_by_xpath('//*[@id="MemberPassword"]')
    #發(fā)送密碼
    password_input.send_keys(password)
    #休眠1s
    time.sleep(1)
    #點擊登錄按鈕
    driver.find_element_by_xpath('/html/body/div/div/div[2]/button').click()
    #休眠3s
    time.sleep(3)
    #獲取cookies
    cookie_lists=driver.get_cookies()
    #獲取cookie值
    cookie_dict={cookie['name']:cookie['value'] for cookie in cookie_lists}
    #寫入文件
    with open('./cookies.txt','a+',encoding='utf8') as f:
        #寫入文件
        f.write(json.dumps(cookie_dict))
        #寫入換行
        f.write('n')
    
    #退出瀏覽器
    driver.quit()
if __name__ == '__main__':
    #遍歷每個用戶
    for user in users:
        #登錄網(wǎng)站
        login(user['username'],user['password'])


#測試Cookie有效性
import requests
import json
import re
#讀取cookies數(shù)據(jù)
with open('cookies.txt','r',encoding='utf8') as f:
    #讀取存儲為列表
    cookies_list=f.readlines()
#存儲結(jié)果
result=''
#遍歷每個Cookie
for cookie_str in cookies_list:
    #加載Cookie
    cookie_dict=json.loads(cookie_str)
    #構(gòu)建會話
    session=requests.session()
    #加入到會話中
    session.cookies=requests.utils.cookiejar_from_dict(cookie_dict)
    #請求網(wǎng)址
    response=session.get('http://shanzhi.spbeen.com/login/')
    #輸出響應(yīng)內(nèi)容
    #print(response,response.text)
    #存儲結(jié)果
    result+=response.text
#輸出登錄結(jié)果,發(fā)現(xiàn)歡迎結(jié)果為4個,四個用戶登錄成功
print(re.findall('歡迎',result))
                                        
                        聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
                        舉報投訴
                    
                    - 
                                服務(wù)器
                                +關(guān)注
關(guān)注
13文章
10034瀏覽量
90509 - 
                                HTTP
                                +關(guān)注
關(guān)注
0文章
530瀏覽量
34645 - 
                                Cookie
                                +關(guān)注
關(guān)注
0文章
30瀏覽量
10716 
發(fā)布評論請先 登錄
相關(guān)推薦
                    熱點推薦
                  php中Cookie及其使用
呢?還是讓我們看了下面的內(nèi)容,再做回答吧。   (1)Cookie技術(shù)簡介    在WEB技術(shù)發(fā)展史上,Cookie技術(shù)的出現(xiàn)是一個重大的變革。最先是Netscape在它的Netscape
    
                發(fā)表于 01-11 09:25        
                    
    
Cookie是怎樣工作的?
上面的Cookie在瀏覽器上只保存到1999年3月1日1秒。當(dāng)然,如果瀏覽器上Cookie 太多,超過了系統(tǒng)所允許的范圍,瀏覽器將自動對它進行刪除。至于屬性Path,用來指定
    
                發(fā)表于 01-11 09:32        
                    
    
cookie是什么意思
到1999年3月1日1秒。當(dāng)然,如果瀏覽器上Cookie 太多,超過了系統(tǒng)所允許的范圍,瀏覽器將自動對它進行刪除。至于屬性Path,用來指定Cookie將被發(fā)送到服務(wù)器的哪一個目錄路徑
    
                發(fā)表于 01-11 21:26        
                    
    
cookie和session的不同作用
,Cookie和Session還有以下區(qū)別:1. 存取方式的不同Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二進制數(shù)據(jù),需求先進行編碼。Cookie中也不
    
                發(fā)表于 01-09 17:39        
                    
    
Cookie和Session的區(qū)別總結(jié)
,Cookie和Session還有以下區(qū)別:1. 存取方式的不同Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二進制數(shù)據(jù),需求先進行編碼。Cookie中也不
    
                發(fā)表于 01-10 15:11        
                    
    
構(gòu)建一個Cookie JAR激情時鐘
描述Cookie JAR激情時鐘我想重現(xiàn)幾年前我最古老的項目之一,當(dāng)時我建造了一個類似的時鐘。只是這一次,我想應(yīng)用不同的技術(shù)并提出更好的設(shè)計。這個時鐘將滾動瀏覽一系列浪漫消息,并且每小時顯示一條
    
                發(fā)表于 08-01 06:44        
                    
    
什么是Cookie?
什么是Cookie? 
  按照Netscape官方文檔中的定義,Cookie是在HTTP協(xié)議下,服務(wù)器或腳本可以維護客戶工作站上信息的一種方式。Cooki
    
                發(fā)表于 01-11 09:27        
        ?2530次閱讀            
    
網(wǎng)絡(luò)Cookie工作原理
網(wǎng)絡(luò)Cookie工作原理
引言
雖然大多數(shù)網(wǎng)絡(luò)Cookie使用起來相當(dāng)簡單,但是它們也有自己獨特的原理。
    
                發(fā)表于 08-04 08:32        
        ?4338次閱讀            
    
Cookie數(shù)據(jù)是如何移動的?
Cookie數(shù)據(jù)是如何移動的?
Cookie數(shù)據(jù)只是網(wǎng)站存儲在您的硬盤上的一個名稱/值對。所有Cookie數(shù)據(jù)都是這樣。網(wǎng)站存儲此數(shù)據(jù),并在以后接收此數(shù)據(jù)。一個網(wǎng)站只能接收其
    
                發(fā)表于 08-04 08:33        
        ?1068次閱讀            
    
網(wǎng)站是如何使用Cookie的?
網(wǎng)站是如何使用Cookie的?
Cookie由于為使用網(wǎng)站的人解決了一個大問題而逐漸發(fā)展起來。從廣義上說,Cookie允許網(wǎng)站在計算機上存儲狀態(tài)信息,這些信息可讓網(wǎng)站記住瀏
    
                發(fā)表于 08-04 08:33        
        ?1825次閱讀            
    
cookie的作用
cookie也可以叫做瀏覽器緩存,主要就是為了辨別用戶的資料,有兩種類型分別是會話cookie和持久cookie。本文主要詳細闡述cookie的作用以及
    
    
cookie和session區(qū)別
本視頻主要詳細闡述了cookie和session區(qū)別,cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。cookie不是很安全,別人可以分析存放在本地的COOKIE
    
    
          
        
        
如何構(gòu)建Cookie池-1
                
 
    
           
            
            
                
            
評論