簡介
大家對前邊的自動化新建任務之后,接着對這個新建任務操作了解之后,希望帶小伙伴進一步鞏固勝利的果實,夯實基礎。因此再在沙場實例演練一下博客園的相關接口。我們用自動化發隨筆之后,要想接着對這篇隨筆操作,不用說就需
要用參數關聯了,發隨筆之后會有一個隨筆的 id,獲取到這個 id,繼續操作傳這個隨筆 id 就可以了(博客園的登錄機制已經變了,不能用賬號和密碼登錄了,這里用 cookie 登錄)
大致流程步驟:web界面操作登錄抓包查看cookie—>代碼模擬cookie登錄—>web界面操作新建隨筆和保存隨筆—>抓包查看新建隨筆和保存隨筆的url和參數等—>代碼模擬新建隨筆並保存編輯內容—>web界面操作刪除隨筆—>抓取刪除操作請求—>提取參數—>傳參—>代碼實現。
一、刪除隨筆
1、我們前面講過登錄后新建隨筆和保存隨筆后,不記得可以點擊傳送門那可以繼續接着操作:刪除剛才新建的隨筆

2、用fiddler抓包,抓到刪除新建隨筆的請求,從抓包結果可以看出,傳的json參數是postId

3.這個postId哪里來的呢?可以看上個請求的url地址

4、也就是說保存草稿箱成功之后,重定向一個 url 地址,里面帶有 postId 這個參數。那我們想辦法將這個參數提取出來就可以了
二、提取參數
1、我們需要的參數 postId 是在保存成功后 url 地址,這時候從 url 地址提出對應的參數值就行了,先獲取保存成功后 url
2、通過正則表達式從保存的url提取需要的字符串,這個參數值前面(postid=)和后面(&)字符串都是固定的
3、這里正則提出來的是 list 類型,取第一個值就可以是字符串了(注意:每次保存需要修改內容,不能重復)

三、傳參
1、刪除草稿箱的 json 參數傳上面取到的參數:{"postId": postid[0]}
2、json 數據類型 post 里面填 json 就行,會自動轉 json
3、接着前面的保存隨筆的操作,就可以刪除成功了
注意:同理和jenkins一樣,如果想看清楚,可以在刪除新建隨筆出打斷點,看到新建的隨筆后,再次執行下邊的代碼 看看是不是可以刪掉新建隨筆

四、參考代碼
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())
五、小結
1、好了,參數關聯接口就是這么簡單,相信各位小伙伴下回遇到此種類似的問題,不會慌了,應該是十拿九穩的把它KO掉。
2、有興趣的自己可以向上一篇一樣,自己練習一下打斷點,自己可以體驗一下其中的樂趣和神奇。
最后歡迎各位小伙伴探討和留言!!!
