python接口测试之参数关联遇到的问题
利用博客园登陆保存草稿以及删除草稿进行参数关联练习
1、草稿保存成功之后无法获取到保存成功的草稿id
解决方案:保存之后利用sleep函数等待几秒之后
2、程序报如下错误:
1 2 | raise TypeError( repr (o) + " is not JSON serializable" ) TypeError: { 'postId' , '9167249' } is not JSON serializable |
代码中post方法中必须传递的是json格式的参数
利用博客园登陆保存草稿以及删除草稿的源码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | # coding:utf-8 import requests import logging import re import time logging.captureWarnings( True ) # 先打开登录首页,获取部分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" } #开启一个session会话 s = requests.session() r = s.get(url = url,headers = headers,verify = False ) # print(s.cookies) #创建一个cookie对象 c = requests.cookies.RequestsCookieJar() #添加登陆中需要的两个cookie c. set ( '.CNBlogsCookie' , '需要抓取的内容' ) # 填上面抓包内容 c. set ( '.Cnblogs.AspNetCore.Cookies' , '需要抓取的内容' ) # 填上面抓包内容 c. set ( 'AlwaysCreateItemsAsActive' , 'True' ) c. set ( 'AdminCookieAlwaysExpandAdvanced' , "True" ) #更新保存的cookie信息 s.cookies.update(c) # print(s.cookies) # result1 = r.content # result2 = r.json() # print(result2) # print(result1) # 登陆成功之后保存编辑内容 r1 = s.get( 'https://i.cnblogs.com/EditPosts.aspx?opt=1' ,headers = headers,verify = False ) #保存草稿内容 print (r1.status_code) url2 = 'https://i.cnblogs.com/EditPosts.aspx?opt=1' body = { '__VIEWSTATE' :'', '__VIEWSTATEGENERATOR' : 'FE27D343' , 'Editor$Edit$txbTitle' : '这是满满06' , 'Editor$Edit$EditorBody' : '<p>满满测试</p>' , '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' : '存为草稿' } #获取保存草稿的postid r2 = s.post(url2,data = body,verify = False ) time.sleep( 2 ) print (r2.url) postid = re.findall(r "postid=(.+?)&" ,r2.url) print (postid) print (postid[ 0 ]) #删除草稿 url3 = 'https://i.cnblogs.com/post/delete' json3 = { "postId" :postid[ 0 ]} r3 = s.post(url3,json = json3,verify = False ) time.sleep( 2 ) print (r3.json()) |
注意:
每一次草稿保存成功之后,需要更改草稿的标题才能成功进行下一次操作,否则会报错
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步