前言
我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了
(博客园的登录机制已经变了,不能用账号和密码登录了,换个网站,或者用cookie登录吧)
一、删除草稿箱
1.我们前面讲过登录后保存草稿箱,那可以继续接着操作:删除刚才保存的草稿
2.用fiddler抓包,抓到删除帖子的请求,从抓包结果可以看出,传的json参数是postId
3.这个postId哪里来的呢?可以看上个请求url地址
4.也就是说保存草稿箱成功之后,重定向一个url地址,里面带有postId这个参数。那接下来我们提取出来就可以了
二、提取参数
1.我们需要的参数postId是在保存成功后url地址,这时候从url地址提出对应的参数值就行了,先获取保存成功后url
2.通过正则提取需要的字符串,这个参数值前面(postid=)和后面(&)字符串都是固定的
3.这里正则提出来的是list类型,取第一个值就可以是字符串了(注意:每次保存需要修改内容,不能重复)
三,传参
1.删除草稿箱的json参数传上面取到的参数:{"postId": postid[0]}
2.json数据类型post里面填json就行,会自动转json
3.接着前面的保存草稿箱操作,就可以删除成功了
四、参考代码
(敲黑板!!!由于博客园的登录机制变了,后面所有的登录地方全部用cookie登录)
1 # coding:utf-8 2 import requests 3 4 # 先打开登录首页,获取部分cookie 5 url = "https://passport.cnblogs.com/user/signin" 6 headers = { 7 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0" 8 } # get方法其它加个ser-Agent就可以了 9 10 s = requests.session() 11 r = s.get(url, headers=headers,verify=False) 12 print s.cookies 13 14 # 添加登录需要的两个cookie 15 c = requests.cookies.RequestsCookieJar() 16 17 c.set('.CNBlogsCookie', '这里是抓到的') # 填上面抓包内容 18 c.set('.Cnblogs.AspNetCore.Cookies','这里是抓到的') # 填上面抓包内容 19 c.set('AlwaysCreateItemsAsActive',"True") 20 c.set('AdminCookieAlwaysExpandAdvanced',"True") 21 s.cookies.update(c) 22 print s.cookies 23 24 # -----------登录全部走cookie登录--- 25 26 27 # 第二步:保存草稿 28 url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1" 29 body = {"__VIEWSTATE": "", 30 "__VIEWSTATEGENERATOR":"FE27D343", 31 "Editor$Edit$txbTitle":"这是3111", 32 "Editor$Edit$EditorBody":"<p>这里111:http://www.cnblogs.com/yoyoketang/</p>", 33 "Editor$Edit$Advanced$ckbPublished":"on", 34 "Editor$Edit$Advanced$chkDisplayHomePage":"on", 35 "Editor$Edit$Advanced$chkComments":"on", 36 "Editor$Edit$Advanced$chkMainSyndication":"on", 37 "Editor$Edit$Advanced$txbEntryName":"", 38 "Editor$Edit$Advanced$txbExcerpt":"", 39 "Editor$Edit$Advanced$tbEnryPassword":"", 40 "Editor$Edit$lkbDraft":"存为草稿", 41 } 42 43 r2 = s.post(url2, data=body, verify=False) 44 # 获取当前url地址 45 print r2.url 46 47 # 第三步:正则提取需要的参数值 48 import re 49 postid = re.findall(r"postid=(.+?)&", r2.url) 50 print postid # 这里是list 51 # 提取为字符串 52 print postid[0] 53 54 # 第四步:删除草稿箱 55 url3 = "https://i.cnblogs.com/post/delete" 56 json3 = {"postId": postid[0]} 57 r3 = s.post(url3, json=json3, verify=False) 58 print r3.json()