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 欢迎各位转载,可是未经做者本人赞成,转载文章以后必须在文章页面明显位置给出做者和原文链接,不然保留追究法律责任的权利!
我的微信公众号 我的微信
相关文章
相关标签/搜索