Python - Cookie繞過驗證碼登陸

前言html

有些登陸的接口會有驗證碼:短信驗證碼,圖形驗證碼等,這種登陸的話驗證碼參數能夠從後臺獲取的(或者查數據庫最直接)。數據庫

獲取不到也不要緊,能夠經過添加cookie的方式繞過驗證碼。json

 

另外一篇博文  Python Selenium Cookie 繞過驗證碼實現登陸  介紹了另一種處理方式,及實際項目應用實戰,有興趣的同窗能夠點擊查看。服務器

 

1、抓登陸cookiecookie

1.登陸後會生成一個已登陸狀態的cookie,那麼只須要直接把這個值添加到cookies裏面就能夠了。session

2.能夠先手動登陸一次,而後抓取這個cookie,這裏就須要用抓包工具fiddler了工具

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

 

 

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

 

 

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

 

 

代碼實例: 

 

# 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響應)拋出異常

相關文章
相關標籤/搜索