一、博客园从登录--添加随笔--删除随笔

1、博客园登录

首先博客园的地址:'https://account.cnblogs.com/signin' (没有可以注册一个)

打开Fiddler抓包(录制打开),账号密码登录一次,获取cookies

未登录时与登录后各抓取一次,查看cookies的变化(多出的部分就是要添加的cookies) 图上多出两个:.Cnblogs.AspNetCore.Cookies、.CNBlogsCookie

为什么要添加cookies,因为要绕过验证码登录,使用cookies保持登录就可以做其他操作了

代码如下:

url = 'https://account.cnblogs.com/signin'
head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'
}
# 1、使用cookies绕过验证码登录,设置cookie
s = requests.session()
c = requests.get(url, headers=head, verify=False,).cookies
c.set('.Cnblogs.AspNetCore.Cookies','这里是抓到的cookies[value]')
c.set('.CNBlogsCookie','这里是抓到的cookies[value]')
s.cookies.update(c)
print(s.cookies)

2、添加随笔

打开博客园新增一个随笔,抓取数据,可以看到地址是  https://i.cnblogs.com/EditPosts.aspx?opt=1



可以看到这个地址重定向了 302状态码
实际我们上传的数据只有 ‘标题和正文’ ,而地址的上传参数则有很多 具体看上图body
我们需要借助上面的cookies登录后,再请求这个地址上传参数
url2 = 'https://i.cnblogs.com/EditPosts.aspx?opt=1'
body = {
'__VIEWSTATE': '',
'__VIEWSTATEGENERATOR': 'FE27D343',
'Editor$Edit$Advanced$chkComments': 'on',
'Editor$Edit$Advanced$chkDisplayHomePage': 'on',
'Editor$Edit$Advanced$chkMainSyndication': 'on',
'Editor$Edit$Advanced$ckbPublished': 'on',
'Editor$Edit$Advanced$tbEnryPassword': '',
'Editor$Edit$Advanced$txbEntryName': '',
'Editor$Edit$Advanced$txbExcerpt': '',
'Editor$Edit$Advanced$txbTag': '',
'Editor$Edit$EditorBody': '<p>这里写body文本内容H5格式貌似</p>',
'Editor$Edit$lkbPost': '发布',
'Editor$Edit$txbTitle': '这里写的是title',
}
#这里post就是添加随笔了,操作后可以去看看自己的博客园有没有新增随笔(注意上面的title不能重复,除非已经删了之前添加的
r = s.post(url2, verify=False, data=body,)
print(type(r.url), r.url)

上传参数后返回response获取重定向后的url,类型为str(获取这个url是因为后面delete接口地址需要json参数postId,postId数据就在这个url里面)

3、提取postId

import re

postid_1 = re.findall(r"postid=(.+?)&", r.url)
print(type(postid_1), postid_1)
js = {'postID': postid_1[0]}   # list需要取下标首位,可以写成json格式上传,delete接口的请求实体传的是json数据

删除地址:https://i.cnblogs.com/post/delete
上图可以看到上传参数postId后返回json数据 删除成功
就是要删除随笔需要 发这个请求 上传这个postid
这个postid如何获得? 看上一个请求 i.cnblogs.com/PostDone.aspx?postid=xxxxxx 而这个请求的url可以在添加随笔的请求的结果里抓取到, 看上面的提取postid参数



4、删除随笔

上面知道了 删除接口地址,知道了参数postid,然后传参就好了
url3 = 'https://i.cnblogs.com/post/delete'
delete = s.post(url3, json=js, verify=False)
print(delete.json()) #这里查看结果删除成功



所有代码如下:
# -*- conding: utf -8 -*-
import requests
import urllib3
import re
urllib3.disable_warnings()

url = 'https://account.cnblogs.com/signin'
url2 = 'https://i.cnblogs.com/EditPosts.aspx?opt=1'

head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'
}
# 1、使用cookies绕过验证码登录,设置cookie
s = requests.session()
c = requests.get(url, headers=head, verify=False,).cookies
c.set('.Cnblogs.AspNetCore.Cookies', '抓包数据')
c.set('.CNBlogsCookie', '抓包数据')
s.cookies.update(c)
print(s.cookies)

# 2、发布随笔
data = {
'__VIEWSTATE': '',
'__VIEWSTATEGENERATOR': 'FE27D343',
'Editor$Edit$Advanced$chkComments': 'on',
'Editor$Edit$Advanced$chkDisplayHomePage': 'on',
'Editor$Edit$Advanced$chkMainSyndication': 'on',
'Editor$Edit$Advanced$ckbPublished': 'on',
'Editor$Edit$Advanced$tbEnryPassword': '',
'Editor$Edit$Advanced$txbEntryName': '',
'Editor$Edit$Advanced$txbExcerpt': '',
'Editor$Edit$Advanced$txbTag': '',
'Editor$Edit$EditorBody': '<p>这里写body文本内容H5格式貌似</p>',
'Editor$Edit$lkbPost': '发布',
'Editor$Edit$txbTitle': '这里写的是title',
}
r = s.post(url2, verify=False, data=data,) # allow_redirects=Flase 禁止重定向 =Ture启动重定向
print(type(r.url), r.url)

# 3、获取重定向postid,params传送
postid_1 = re.findall(r"postid=(.+?)&", r.url)
print(type(postid_1), postid_1) # list需要取下标首位
js = {'postID': postid_1[0]}

# 4、删除随笔
url3 = 'https://i.cnblogs.com/post/delete'
delete = s.post(url3, json=js, verify=False)
print(delete.json())
 
posted @ 2019-05-21 16:25  sugar_pan  Views(515)  Comments(0)    收藏  举报