Requsts方法 -- Blog流程类进行关联

1、接口封装关联

1.有些接口经常会用到比如登录的接口,这时候我们可以每个接口都封装成一个方法,如:登录、保存草稿、发帖、删帖,这四个接口就可以写成四个方法
2.接口封装好了后,后面我们写用例那就直接调用封装好的接口就行了,有些参数,可以参数化,如保存草稿的 title 和 body 两个参数是动态的。
3.像这种流程类的接口,后面的会依赖前面的,就可以用 session 关联起来
4.保存以下脚本

import requests
#禁用安全请求警告
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
"""
1.由于登录时候是多加 2 个 cookie,我们可以先用 get 方法打开登录首页,获取部分 cookie
2.再把登录需要的 cookie 添加到 session 里
3.添加成功后,随便编辑正文和标题保存到草稿箱
"""
class Blog():
def __init__(self,s):
self.s = s #session 全局会话实例化

def login(self):
# 先打开登录首页,获取部分 cookie
url = "https://account.cnblogs.com/signin?returnurl=https%3A%2F%2Fwww.cnblogs.com%2F"

header = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}

self.s = requests.Session()
r = self.s.get(url,headers=header)
print(r.cookies)

# 添加登录需要的两个 cookie
c = requests.cookies.RequestsCookieJar()
c.set(".Cnblogs.AspNetCore.Cookies","Fiddler自己抓取Cookie")
c.set(".CNBlogsCookie","Fiddler自己抓取Cookie")
# c.set(‘AlwaysCreateItemsAsActive‘,"True")
# c.set(‘AdminCookieAlwaysExpandAdvanced‘,"True")
self.s.cookies.update(c)
# print(s.cookies)
return self.s

def save(self,title,body):
# 登录成功后保存编辑内容
# r1 = s.get("https://i.cnblogs.com/EditPosts.aspx?opt=1", headers=header,verify=False)
# print(r1.text)

# 保存草稿箱
#参数 1:title # 标题
#参数 2:body # 内容
url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
body = {
"__VIEWSTATE":"",
"__VIEWSTATEGENERATOR":"FE27D343",
"Editor$Edit$txbTitle":title,
"Editor$Edit$EditorBody":"<p>%s</p>"%body,
"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":"存为草稿",
}

r2 = self.s.post(url2,data=body,verify=False)
# print(r.content.decode("utf-8"))
#获取当前的url地址
save_url = r2.url
# print(save_url)
return save_url

def get_postid(self,sava_url):
#正则获取需要的postid参数
import re
postid = re.findall(r"postid=(.*?)&",sava_url)
# print(postid) #正则提取的值是list

#提取为字符串
# print(postid[0])
return postid[0]

def delete_box(self,postid):
#删除草稿箱
url3 = "https://i.cnblogs.com/post/delete"
form_json = {"postId":postid}
result = self.s.post(url3,json=form_json,verify=False)
# print(result.json())
return result.json()
#一定要return 返回值,不然会出现TypeError: ‘NoneType‘ object is not subscriptable

if __name__ == "__main__":
s = requests.Session()

原文地址:https://www.cnblogs.com/Teachertao/p/11148807.html

时间: 2024-10-09 19:54:17

Requsts方法 -- Blog流程类进行关联的相关文章

python接口自动化(三十五)-封装与调用--流程类接口关联(详解)

简介 流程相关的接口,主要用 session 关联,如果写成函数(如上篇),s 参数每个函数都要带,每个函数多个参数,这时候封装成类会更方便.在这里我们还是以博客园为例,带着小伙伴们实践一下. 接口封装大致流程 1.在接口测试中,有些接口经常会被用到比如登录的接口,这时候我们可以每个接口都封装成一个方法,如:登录.保存草稿.发布随笔.删除随笔,这四个接口就可以写成四个方法 2.接口封装好了后,后面我们写用例那就直接调用封装好的接口就行了,有些参数,可以参数化,如保存草稿的 title 和 bod

iOS开发大招-使用运行时runtime方法给一个类添加属性

看过一些第三方开源类库的源代码,经常发现他们 给一个 类 添加了一个原本不存在的属性, 比如PPrealSideController 就给 UIViewController添加了一个 self.pprealSideController的属性? 他是如何实现的呢? 1.基本的实现思路 首先我们需要了解,实际上 在我们使用  类似于self.newProperty的语句的时候, 根据点语法的规则实际上是调用的  setNewProperty方法,和  newProperty方法, 那我们可以知道他肯

Java 类与类的关联、聚合、继承、实现关系

关联关系(最弱的一种关系): 关联关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的.关联可以是单向.双向的.表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量. 例如学生和老师 老师要讲课, 这 是一个方法, 要传个参数进去, 参数是学生对象 继承关系(避免多重继承) 继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extend

【MyBatis源码分析】insert方法、update方法、delete方法处理流程(上篇)

打开一个会话Session 前文分析了MyBatis将配置文件转换为Java对象的流程,本文开始分析一下insert方法.update方法.delete方法处理的流程,至于为什么这三个方法要放在一起说,是因为: 从语义的角度,insert.update.delete都是属于对数据库的行进行更新操作 从实现的角度,我们熟悉的PreparedStatement里面提供了两种execute方法,一种是executeUpdate(),一种是executeQuery(),前者对应的是insert.upda

用UseMiddleware扩展方法注册中间件类

用UseMiddleware扩展方法注册中间件类 .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除了直接用ApplicationBuilder的Use()方法注册中间件外,还可以使用ApplicationBuilder的扩展方法UseMiddleware()注册中间件.这种情况下可以注册类型,这个方法会通过反射解析这个类型,并把它包装成Func<

addTarget:self 的意思是说,这个方法在本类中

addTarget:self 的意思是说,这个方法在本类中也可以传入其他类的指针*/ addTarget:self 的意思是说,这个方法在本类中,布布扣,bubuko.com

Sort方法根据T类某个字段对泛型集合List&lt;T&gt;排序

实现:采用Sort方法根据T类某个字段对泛型集合List<T>排序. 实现代码如下: static void Main(string[] args) { List<Stud> studs = new List<Stud>() { new Stud() { Name = "B", Score = 80 }, new Stud() { Name = "C", Score = 30 }, new Stud() { Name = &quo

从七个方面全方位分析流程类需求

今天讲讲流程分析. 之前的文章<需求分析师,如何分析流程类需求>从业务上说明了如何去分析流程需求,这次我换个角度,再更细致的将流程拆分. 通过此篇文章,你将会知道: 流程流转的类型有哪些? 流程流转的功能有哪些? 流程签核类型有哪些? 流程的变更类型有哪些? 消息通知提醒有哪些? 查看完整的流程? 外部接口支持? 一.流程流转类型 你可能以为流程不就是一条线吗?但其实不然,还有其他类型的流程. 从谁到谁到谁,这是最基本的流程类型,叫做"串行". 例如:A->B->

react篇章-React State(状态)-将生命周期方法添加到类中

将生命周期方法添加到类中 在具有许多组件的应用程序中,在销毁时释放组件所占用的资源非常重要. 每当 Clock 组件第一次加载到 DOM 中的时候,我们都想生成定时器,这在 React 中被称为挂载. 同样,每当 Clock 生成的这个 DOM 被移除的时候,我们也会想要清除定时器,这在 React 中被称为卸载. 我们可以在组件类上声明特殊的方法,当组件挂载或卸载时,来运行一些代码: <!DOCTYPE html> <html> <head> <meta cha