python接口自動化(十六)--參數關聯接口後傳(詳解)

簡介

  你們對前邊的自動化新建任務以後,接着對這個新建任務操做了解以後,但願帶小夥伴進一步鞏固勝利的果實,夯實基礎。所以再在沙場實例演練一下博客園的相關接口。咱們用自動化發隨筆以後,要想接着對這篇隨筆操做,不用說就需html

要用參數關聯了,發隨筆以後會有一個隨筆的 id,獲取到這個 id,繼續操做傳這個隨筆 id 就能夠了(博客園的登陸機制已經變了,不能用帳號和密碼登陸了,這裏用 cookie 登陸)web

大體流程步驟:web界面操做登陸抓包查看cookie—>代碼模擬cookie登陸—>web界面操做新建隨筆和保存隨筆—>抓包查看新建隨筆和保存隨筆的url和參數等—>代碼模擬新建隨筆並保存編輯內容—>web界面操做刪除隨筆—>抓取刪除操做請求—>提取參數—>傳參—>代碼實現。正則表達式

1、刪除隨筆

一、咱們前面講過登陸後新建隨筆和保存隨筆後,不記得能夠點擊傳送門那能夠繼續接着操做:刪除剛纔新建的隨筆json

二、用fiddler抓包,抓到刪除新建隨筆的請求,從抓包結果能夠看出,傳的json參數是postIdbash

3.這個postId哪裏來的呢?能夠看上個請求的url地址微信

四、也就是說保存草稿箱成功以後,重定向一個 url 地址,裏面帶有 postId 這個參數。那咱們想辦法將這個參數提取出來就能夠了cookie

2、提取參數

一、咱們須要的參數 postId 是在保存成功後 url 地址,這時候從 url 地址提出對應的參數值就好了,先獲取保存成功後 urlsession

二、經過正則表達式從保存的url提取須要的字符串,這個參數值前面(postid=)和後面(&)字符串都是固定的post

三、這裏正則提出來的是 list 類型,取第一個值就能夠是字符串了(注意:每次保存須要修改內容,不能重複)ui


3、傳參

一、刪除草稿箱的 json 參數傳上面取到的參數:{"postId": postid[0]}

二、json 數據類型 post 裏面填 json 就行,會自動轉 json

三、接着前面的保存隨筆的操做,就能夠刪除成功了

注意:同理和jenkins同樣,若是想看清楚,能夠在刪除新建隨筆出打斷點,看到新建的隨筆後,再次執行下邊的代碼 看看是否是能夠刪掉新建隨筆

4、參考代碼

1 # coding:utf-8
 2 import requests
 3 # 先打開登陸首頁,獲取部分cookie
 4 url = "https://passport.cnblogs.com/user/signin"
 5 headers = {
 6             "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
 7            }  # get方法其它加個ser-Agent就能夠了
 8 s = requests.session()
 9 r = s.get(url, headers=headers,verify=False)
10 print (s.cookies)
11 # 添加登陸須要的兩個cookie
12 c = requests.cookies.RequestsCookieJar()
13 c.set('.CNBlogsCookie', 'XXX')  # 填上面抓包內容
14 c.set('.Cnblogs.AspNetCore.Cookies','XXX')  # 填上面抓包內容
15 c.set('AlwaysCreateItemsAsActive',"True")
16 c.set('AdminCookieAlwaysExpandAdvanced',"True")
17 s.cookies.update(c)
18 print (s.cookies)
19 # 登陸成功後保存編輯內容
20 url2= "https://i.cnblogs.com/EditPosts.aspx?opt=1"
21 body = {"__VIEWSTATE": "",
22         "__VIEWSTATEGENERATOR":"FE27D343",
23         "Editor$Edit$txbTitle":"這是繞過登陸的標題:北京-宏哥",
24         "Editor$Edit$EditorBody":"<p>這裏是中文內容:http://www.cnblogs.com/duhong/</p>",
25         "Editor$Edit$Advanced$ckbPublished":"on",
26         "Editor$Edit$Advanced$chkDisplayHomePage":"on",
27         "Editor$Edit$Advanced$chkComments":"on",
28         "Editor$Edit$Advanced$chkMainSyndication":"on",
29         "Editor$Edit$lkbDraft":"存爲草稿",
30          }
31 r2 = s.post(url2, data=body, verify=False)
32 #print (r.content.decode('utf-8'))
33 
34 # 第三步:正則提取須要的參數值
35 import re
36 postid = re.findall(r"postid=(.+?)&", r2.url)
37 print(type(postid))
38 print (postid) # 這裏是 list
39 # 提取爲字符串
40 print (postid[0])
41 # 第四步:刪除草稿箱
42 url3 = "https://i.cnblogs.com/post/delete"
43 json3 = {"postId": postid[0]}
44 r3 = s.post(url3, json=json3, verify=False)
45 print (r3.json())複製代碼

5、小結

一、好了,參數關聯接口就是這麼簡單,相信各位小夥伴下回遇到此種相似的問題,不會慌了,應該是十拿九穩的把它KO掉。

二、有興趣的本身能夠向上一篇同樣,本身練習一下打斷點,本身能夠體驗一下其中的樂趣和神奇。

最後歡迎各位小夥伴探討和留言!!!

爲了方便你們在移動端也能看到我分享的博文,現已註冊我的微信公衆號,掃描左下方二維碼便可,歡迎你們關注,有時間會及時分享相關技術博文。

爲了方便你們互動討論相關技術問題,現已組建專門的微信羣,因爲微信羣滿100,請您掃描右下方宏哥我的微信二維碼拉你進羣
(請務必備註:進羣)
,歡迎你們加入這個你們庭,咱們一塊兒暢遊知識的海洋。

感謝您花時間閱讀此篇文章,若是您以爲這篇文章你學到了東西也是爲了犒勞下博主的碼字不易不妨打賞一下吧,讓博主能喝上一杯咖啡,在此謝過了!
若是您以爲閱讀本文對您有幫助,請點一下左下角 「推薦」按鈕,您的
「推薦」
將是我最大的寫做動力!另外您也能夠選擇 關注我,能夠很方便找到我!
本文版權歸做者和博客園共有,來源網址: www.cnblogs.com/du-hong 歡迎各位轉載,可是未經做者本人贊成,轉載文章以後必須在文章頁面明顯位置給出做者和原文鏈接,不然保留追究法律責任的權利!
我的微信公衆號 我的微信
相關文章
相關標籤/搜索