Python - Cookie繞過驗證碼登錄


前言

有些登錄的接口會有驗證碼:短信驗證碼,圖形驗證碼等,這種登錄的話驗證碼參數可以從后台獲取的(或者查數據庫最直接)。

獲取不到也沒關系,可以通過添加cookie的方式繞過驗證碼。

 

另一篇博文  Python Selenium Cookie 繞過驗證碼實現登錄  介紹了另外一種處理方式,及實際項目應用實戰,有興趣的同學可以點擊查看。

 

一、抓登錄cookie

1.登錄后會生成一個已登錄狀態的cookie,那么只需要直接把這個值添加到cookies里面就可以了。

2.可以先手動登錄一次,然后抓取這個cookie,這里就需要用抓包工具fiddler了

3.先打開博客園登錄界面,手動輸入賬號和密碼(勾選下次自動登錄)

 

 

 4.打開fiddler抓包工具,刷新下登錄首頁,就是登錄前的cookie了

 

 

 5.登錄成功后,再查看cookie變化,發現多了兩組參數,多的這兩組參數就是我們想要的,copy出來,一會有用

 

 

代碼實例: 

 

# baseinfo -> __init__
#-*-coding:utf-8-*-
# Time:2017/9/23 17:44
# Author:YangYangJun


loginUrl = "https://passport.cnblogs.com/user/signin"

loginHeaders = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"
                  }

CNBlogsCookie = '通過抓包工具獲取該Cookie'

CnblogsAspNetCoreCookies = '通過抓包工具獲取該Cookie'

editUrl = 'https://i.cnblogs.com/EditPosts.aspx?opt=1'

 

 

#-*-coding:utf-8-*-
# Time:2017/9/23 10:15
# Author:YangYangJun

import requests
#導入配置文件
import baseinfo

#登錄訪問地址
loginUrl = baseinfo.loginUrl
#請求頭
loginHeaders = baseinfo.loginHeaders

#登錄后Cookie1
CNBlogsCookie = baseinfo.CNBlogsCookie
#登錄后Cookie2
CnblogsAspNetCoreCookies = baseinfo.CnblogsAspNetCoreCookies
#新建隨筆方位地址
editUrl = baseinfo.editUrl
#獲取session
s = requests.session()

#
#r = s.get(loginUrl,headers = loginHeaders,verify = False )

#獲取cookie
c = requests.cookies.RequestsCookieJar()

# 添加登錄需要的兩個cookie
c.set(".CNBlogsCookie",CNBlogsCookie)
c.set('.Cnblogs.AspNetCore.Cookies',CnblogsAspNetCoreCookies)
#更新cookie
s.cookies.update(c)


body = {"__VIEWSTATE": "",
        "__VIEWSTATEGENERATOR":"FE27D343",
        "Editor$Edit$txbTitle":"這是繞過登錄的標題: -*- Bluesky -*-",
        "Editor$Edit$EditorBody":"<p>這里是中文內容:http://www.cnblogs.com/Skyyj/</p>",
        "Editor$Edit$Advanced$ckbPublished":"on",
        "Editor$Edit$Advanced$chkDisplayHomePage":"on",
        "Editor$Edit$Advanced$chkComments":"on",
        "Editor$Edit$Advanced$chkMainSyndication":"on",
        "Editor$Edit$lkbDraft":"存為草稿",
         }
r2 = s.post(editUrl, data=body, verify=False)
#獲取請求返回的響應信息
print r2.content

 

body中的值是可以通過開發者模式查看,如下圖:

填寫標題

 

 

response的返回內容還有其它更多信息

-- r.status_code     #響應狀態碼
-- r.content           #字節方式的響應體,會自動為你解碼 gzip 和 deflate 壓縮
-- r.headers          #以字典對象存儲服務器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回None
-- r.json()             #Requests中內置的JSON解碼器
-- r.url                  # 獲取url
-- r.encoding         # 編碼格式
-- r.cookies           # 獲取cookie
-- r.raw                #返回原始響應體
-- r.text               #字符串方式的響應體,會自動根據響應頭部的字符編碼進行解碼
-- r.raise_for_status() #失敗請求(非200響應)拋出異常

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM