1. 程式人生 > >Cookiejar 庫處理 cookie 儲存回話視窗的登陸狀態

Cookiejar 庫處理 cookie 儲存回話視窗的登陸狀態

  • 像什麼知乎,酷狗,拉鉤這些大網站,模擬登陸有點複雜,所以還是學校的教務系統最友好

 

目錄

1.無 cookie 處理模擬登陸教務系統


import urllib.request
import urllib.parse

url = 'http://es.bnuz.edu.cn:8080/login.do'

post_data = urllib.parse.urlencode({
    'tssName' : 'userid',
    'tssPassword' : 'password'
}).encode('utf-8') #使用 urlencode 編碼處理後,在設定成 utf-8 編碼

req = urllib.request.Request(url,post_data) #構建 Request 請求物件

#新增請求頭
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWeb\
    Kit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36')

data = urllib.request.urlopen(req).read() #登入並爬取對應網頁 html 程式碼

#將 html 程式碼寫入檔案
file = open('1.html','wb')
file.write(data)
file.close()


  • 在登陸頁面輸入使用者和密碼那裡右鍵檢查元素,可以看到他們對應的 name 屬性的值;這裡分別是 

       tssName 與 tssPassword,所以表單裡面是它們

  • 要獲取真實的登陸地址,按 F12 調出對應的除錯介面,輸入使用者名稱與密碼登陸,觀察除錯介面,可以看到很多網址,

       這些網址大多使用了 GET 方法,有一個使用的是 POST 方法,與之對應的就是 POST 表單的真實網址

  • 執行後,開啟第一個是登陸狀態,開啟第二個仍然需要我們登陸

       因為在這裡沒有設定 cookie 處理,而 HTTP 協議是一個無狀態協議,訪問了新網頁自然回話資訊就消失了

 

2.Cookie 處理:

import urllib.request
import urllib.parse
import http.cookiejar

url = 'http://es.bnuz.edu.cn:8080/login.do'

post_data = urllib.parse.urlencode({
    'tssName' : 'userid',
    'tssPassword' : 'password'}).encode('utf-8') #使用 urlencode 編碼處理後,在設定成 utf-8 編碼

req = urllib.request.Request(url,post_data) #構建 Request 請求物件

#新增請求頭
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWeb\
    Kit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36')

data = urllib.request.urlopen(req).read() #登入並爬取對應網頁 html 程式碼

#使用 http.cookiejar.Cookiejar.CookieJar() 建立 CookieJar 物件
cjar = http.cookiejar.CookieJar()

#使用 HTTPCookieProcessor 建立 cookie 處理器,並以其為引數構造 opener 物件
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))

#將 opener 安裝為全域性
urllib.request.install_opener(opener)

file = opener.open(req)
data = file.read()
file = open('3.html','wb')
file.write(data)
file.close()

url1 = 'http://es.bnuz.edu.cn:8080/xiangmuStudent.do?method=goList'
data1 = urllib.request.urlopen(req).read() #登入並爬取對應網頁 html 程式碼

#將 html 程式碼寫入檔案
file = open('4.html','wb')
file.write(data1)
file.close()