Requests方法 -- 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()
最新文章
- [LeetCode] Word Pattern II 词语模式之二
- eclipse中输入中文为繁体
- 请将 php.ini 中的 short_open_tag 设置为 On,否则无法继续安装。
- [C#] zdbviewcs: 跨平台数据库查看器。支持SqlServer、Oracle、MySql等数据库
- 解决android的ListView嵌套在ScrollView中不能被滚动的问题
- REST性能测试方案
- C++11—lambda函数
- C# JObject解析Json(多方法解析Json 二)
- 逻辑回归的分布式实现 [Logistic Regression / Machine Learning / Spark ]
- apk 加密
- python文件操作汇总
- 设计模式之观察者模式(Observer Pattern)
- 如何解决mysql数据库8小时无连接自动关闭
- ECshop 表结构
- 深入理解Android View(转)
- Oracle12c_安装1——准备工作
- springmvc重定向
- Asp.Net Core 轻松学-玩转配置文件
- Linux文件系统的目录结构详解
- window7 修改docker安装的machine 位置
热门文章
- 图分析Rapids cuGraph
- NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架
- thymeleaf+Springboot实现自定义标签
- Spring Cloud Alibaba(14)---SpringCloudAlibaba整合Sleuth
- Python_selenium页面元素整合设计经验
- pycham_编码格式设置,处理打印log乱码,处理读取配置文件报错
- python常识系列14-->;正则表达式基础之re模块
- Jenkins 进阶篇 - 数据备份
- 「JVM」知识点详解一:JVM运行原理详解
- 【TCP/IP】TCP详解笔记