python接口自动化之参数关联

一、删除草稿箱

1.我们前面讲过登录后保存草稿箱,那可以继续接着操作:删除刚才保存的草稿

python接口自动化之参数关联_第1张图片
image.png

2.用fiddler抓包,抓到删除帖子的请求,从抓包结果可以看出,传的json参数是postId

python接口自动化之参数关联_第2张图片
image.png

3.这个postId哪里来的呢?可以看上个请求url地址

python接口自动化之参数关联_第3张图片
image.png

4.也就是说保存草稿箱成功之后,重定向一个url地址,里面带有postId这个参数。那接下来我们提取出来就可以了

二、提取参数

1.我们需要的参数postId是在保存成功后url地址,这时候从url地址提出对应的参数值就行了,先获取保存成功后url

2.通过正则提取需要的字符串,这个参数值前面(postid=)和后面(&)字符串都是固定的

3.这里正则提出来的是list类型,取第一个值就可以是字符串了(注意:每次保存需要修改内容,不能重复)

python接口自动化之参数关联_第4张图片
image.png

三,传参

1.删除草稿箱的json参数传上面取到的参数:{"postId": postid[0]}

2.json数据类型post里面填json就行,会自动转json

3.接着前面的保存草稿箱操作,就可以删除成功了

python接口自动化之参数关联_第5张图片
image.png

四、参考代码

(敲黑板!!!由于博客园的登录机制变了,后面所有的登录地方全部用cookie登录)

coding:utf-8

import requests

先打开登录首页,获取部分cookie

url = "https://passport.cnblogs.com/user/signin"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
} # get方法其它加个ser-Agent就可以了

s = requests.session()
r = s.get(url, headers=headers,verify=False)
print s.cookies

添加登录需要的两个cookie

c = requests.cookies.RequestsCookieJar()

c.set('.CNBlogsCookie', '这里是抓到的') # 填上面抓包内容
c.set('.Cnblogs.AspNetCore.Cookies','这里是抓到的') # 填上面抓包内容
c.set('AlwaysCreateItemsAsActive',"True")
c.set('AdminCookieAlwaysExpandAdvanced',"True")
s.cookies.update(c)
print s.cookies

-----------登录全部走cookie登录---

第二步:保存草稿

url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
body = {"__VIEWSTATE": "",
"__VIEWSTATEGENERATOR":"FE27D343",
"EditortxbTitle":"这是3111",
"EditorEditorBody":"

这里111:http://www.cnblogs.com/yoyoketang/

",
"EditorAdvancedEditchkDisplayHomePage":"on",
"EditorAdvancedEditchkMainSyndication":"on",
"EditorAdvancedEdittxbExcerpt":"",
"EditorAdvancedEdit$lkbDraft":"存为草稿",
}

r2 = s.post(url2, data=body, verify=False)

获取当前url地址

print r2.url

第三步:正则提取需要的参数值

import re
postid = re.findall(r"postid=(.+?)&", r2.url)
print postid # 这里是list

提取为字符串

print postid[0]

第四步:删除草稿箱

url3 = "https://i.cnblogs.com/post/delete"
json3 = {"postId": postid[0]}
r3 = s.post(url3, json=json3, verify=False)
print r3.json()

你可能感兴趣的:(python接口自动化之参数关联)