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