一、接口封裝關聯json
1.有些接口常常會用到好比登陸的接口,這時候咱們能夠每一個接口都封裝成一個方法,如:登陸、保存草稿、發帖、刪帖,這四個接口就能夠寫成四個方法
2.接口封裝好了後,後面咱們寫用例那就直接調用封裝好的接口就好了,有些參數,能夠參數化,如保存草稿的 title 和 body 兩個參數是動態的。
3.像這種流程類的接口,後面的會依賴前面的,就能夠用 session 關聯起來
4.保存如下腳本 安全
import requests
#禁用安全請求警告
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
"""
1.因爲登陸時候是多加 2 個 cookie,咱們能夠先用 get 方法打開登陸首頁,獲取部分 cookie
2.再把登陸須要的 cookie 添加到 session 裏
3.添加成功後,隨便編輯正文和標題保存到草稿箱
"""
class Blog():
def __init__(self,s):
self.s = s #session 全局會話實例化cookie
def login(self):
# 先打開登陸首頁,獲取部分 cookie
url = "https://account.cnblogs.com/signin?returnurl=https%3A%2F%2Fwww.cnblogs.com%2F"session
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}post
self.s = requests.Session()
r = self.s.get(url,headers=header)
print(r.cookies)url
# 添加登陸須要的兩個 cookie
c = requests.cookies.RequestsCookieJar()
c.set(".Cnblogs.AspNetCore.Cookies","Fiddler本身抓取Cookie")
c.set(".CNBlogsCookie","Fiddler本身抓取Cookie")
# c.set('AlwaysCreateItemsAsActive',"True")
# c.set('AdminCookieAlwaysExpandAdvanced',"True")
self.s.cookies.update(c)
# print(s.cookies)
return self.sspa
def save(self,title,body):
# 登陸成功後保存編輯內容
# r1 = s.get("https://i.cnblogs.com/EditPosts.aspx?opt=1", headers=header,verify=False)
# print(r1.text)code
# 保存草稿箱
#參數 1:title # 標題
#參數 2:body # 內容
url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
body = {
"__VIEWSTATE":"",
"__VIEWSTATEGENERATOR":"FE27D343",
"Editor$Edit$txbTitle":title,
"Editor$Edit$EditorBody":"<p>%s</p>"%body,
"Editor$Edit$Advanced$ckbPublished":"on",
"Editor$Edit$Advanced$chkDisplayHomePage":"on",
"Editor$Edit$Advanced$chkComments":"on",
"Editor$Edit$Advanced$chkMainSyndication":"on",
"Editor$Edit$Advanced$txbEntryName":"",
"Editor$Edit$Advanced$txbExcerpt":"",
"Editor$Edit$Advanced$txbTag":"",
"Editor$Edit$Advanced$tbEnryPassword":"",
"Editor$Edit$lkbDraft":"存爲草稿",
}orm
r2 = self.s.post(url2,data=body,verify=False)
# print(r.content.decode("utf-8"))
#獲取當前的url地址
save_url = r2.url
# print(save_url)
return save_urlblog
def get_postid(self,sava_url):
#正則獲取須要的postid參數
import re
postid = re.findall(r"postid=(.*?)&",sava_url)
# print(postid) #正則提取的值是list
#提取爲字符串
# print(postid[0])
return postid[0]
def delete_box(self,postid):
#刪除草稿箱
url3 = "https://i.cnblogs.com/post/delete"
form_json = {"postId":postid}
result = self.s.post(url3,json=form_json,verify=False)
# print(result.json())
return result.json()
#必定要return 返回值,否則會出現TypeError: 'NoneType' object is not subscriptable
if __name__ == "__main__": s = requests.Session()