简介
大家对前边的自动化新建任务之后, 接着对这个新建任务操作了解之后, 希望带小伙伴进一步巩固胜利的果实, 夯实基础. 因此再在沙场实例演练一下博客园的相关接口. 我们用自动化发随笔之后, 要想接着对这篇随笔操作, 不用说就需
要用参数关联了, 发随笔之后会有一个随笔的 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 一样, 如果想看清楚, 可以在删除新建随笔出打断点, 看到新建的随笔后, 再次执行下边的代码 看看是不是可以删掉新建随笔
四, 参考代码
- # 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', 'XXX') # 填上面抓包内容
- c.set('.Cnblogs.AspNetCore.Cookies','XXX') # 填上面抓包内容
- c.set('AlwaysCreateItemsAsActive',"True")
- c.set('AdminCookieAlwaysExpandAdvanced',"True")
- s.cookies.update(c)
- print (s.cookies)
- # 登录成功后保存编辑内容
- url2= "https://i.cnblogs.com/EditPosts.aspx?opt=1"
- body = {"__VIEWSTATE": "",
- "__VIEWSTATEGENERATOR":"FE27D343",
- "Editor$Edit$txbTitle":"这是绕过登录的标题: 北京 - 宏哥",
- "Editor$Edit$EditorBody":"<p > 这里是中文内容: http://www.cnblogs.com/duhong/</p>",
- "Editor$Edit$Advanced$ckbPublished":"on",
- "Editor$Edit$Advanced$chkDisplayHomePage":"on",
- "Editor$Edit$Advanced$chkComments":"on",
- "Editor$Edit$Advanced$chkMainSyndication":"on",
- "Editor$Edit$lkbDraft":"存为草稿",
- }
- r2 = s.post(url2, data=body, verify=False)
- #print (r.content.decode('utf-8'))
- # 第三步: 正则提取需要的参数值
- import re
- postid = re.findall(r"postid=(.+?)&", r2.url)
- print(type(postid))
- 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())
五, 小结
1, 好了, 参数关联接口就是这么简单, 相信各位小伙伴下回遇到此种类似的问题, 不会慌了, 应该是十拿九稳的把它 KO 掉.
2, 有兴趣的自己可以向上一篇一样, 自己练习一下打断点, 自己可以体验一下其中的乐趣和神奇.
最后欢迎各位小伙伴探讨和留言!!!
来源: https://www.cnblogs.com/du-hong/p/10715555.html