Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python接口自动化(三十四)-封装与调用--函数和参数化(详解)

python接口自动化(三十四)-封装与调用--函数和参数化(详解)

作者头像
北京-宏哥
发布于 2019-09-11 10:15:28
发布于 2019-09-11 10:15:28
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

简介

  前面虽然实现了参数的关联,但是那种只是记流水账的完成功能,不便于维护,也没什么可读性,随着水平和技能的提升,再返回头去看前边写的代码,简直是惨不忍睹那样的代码是初级入门的代码水平都达不到。接下来这篇由我带领小伙伴们把每一

个鼠标点击动作写成一个函数,这样更方便维护了,而且可读性也高,后期其他维护人员在维护代码的时候看起来赏心悦目,就不会骂娘了。

  参数化的思维只需记住一点:不要写死,这样就便于维护,否则就会牵一发而动全身,一处修改导致处处修改,不便于维护。

登录函数

1、s 参数是 session 的一个实例类,先放这里,方便写后面代码

2、登录函数传三个参数,s 是需要调用前面的 session 类,所以必传,可以传个登录的 url,然后 payload 是账号和密码

保存草稿

1、编辑内容的标题 title 和正文 body_data 参数化了,这样后面可以方便传不同值

2、这里返回了获取到新的 url 地址,因为后面的 postid 参数需要在这里提取

提取 postid

1、这里用正则表达式提取 url 里面的 postid

删除草稿

1、传个 url 和 postid 就可以了

参考代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 # coding=utf-8
 2 #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 3 
 4 #2.注释:包括记录创建时间,创建人,项目名称。
 5 '''
 6 Created on 2019-5-13
 7 @author: 北京-宏哥
 8 Project:学习和使用封装与调用--函数和参数化
 9 '''
10 #3.导入模块
11 import requests
12 
13 def login(s, url, payload):
14  
15  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
16 
17  "Accept": "application/json, text/javascript, */*; q=0.01",
18  "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
19  "Accept-Encoding": "gzip, deflate, br",
20  "Content-Type": "application/json; charset=utf-8",
21  "X-Requested-With": "XMLHttpRequest",
22  "Content-Length": "385",
23  "Cookie": "xxx 已省略",
24  "Connection": "keep-alive"
25  }
26  r = s.post(url, json=payload, headers=headers, verify=False)
27  result = r.json()
28  print (result)
29  return result['success'] # 返回 True 或 False
30  
31 def save_box(s, url2, title, body_data):
32  '''# 获取报存之后 url 地址'''
33  body = {"__VIEWSTATE": "",
34  "__VIEWSTATEGENERATOR": "FE27D343",
35  "Editor$Edit$txbTitle": title,
36  "Editor$Edit$EditorBody": "<p>"+body_data+"</p>",
37  "Editor$Edit$Advanced$ckbPublished": "on",
38  "Editor$Edit$Advanced$chkDisplayHomePage": "on",
39  "Editor$Edit$Advanced$chkComments": "on",
40  "Editor$Edit$Advanced$chkMainSyndication": "on",
41  "Editor$Edit$lkbDraft": "存为草稿",
42  }
43  r2 = s.post(url2, data=body, verify=False)
44  print(r2.url)
45  return r2.url
46 def get_postid(u):
47  '''正则提取 postid'''
48  import re
49  postid = re.findall(r"postid=(.+?)&", u)
50  print (postid) # 这里是 list
51  if len(postid) < 1:
52   return ''
53  else:
54   return postid[0]
55 def delete_box(s,url3, postid):
56  '''删除草稿箱'''
57  json3 = {"postId": postid}
58  r3 = s.post(url3, json=json3, verify=False)
59  print (r3.json())
60 if __name__ == "__main__":
61  #-------------由于博客园的登录机制改变这部分代码仅作为参考start-------
62  '''
63  #登录url
64  url = "https://passport.cnblogs.com/user/signin"
65  payload = {
66  "input1": "xxx",
67  "input2": "xxx",
68  "remember": True
69  }
70  s = requests.session()
71  login(s, url, payload)
72  '''
73  # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------
74 
75  #编辑随笔url
76  url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
77  u = save_box(s, url2, "北京-宏哥学习和使用封装与调用--函数和参数化", "1、学习和使用封装与调用--函数和参数化")
78  postid = get_postid(u)
79  # 删除随笔url
80  url3 = "https://i.cnblogs.com/post/delete"
81  delete_box(s, url3, postid)

由于博客园的登录机制改变,我们想要让代码跑起来还需要用老办法绕过验证码通过cookie登录替换登录这个动作

改造代码如下

第一步:将登录方法注释掉

第二步:将登录方法所传的参数和调用登录的方法注释掉

第三步:通过cookie登录绕过验证码,实现登录

第五步:直接运行代码,查看结果

第六步:由于我们新增又删除,所以看到的界面看到的效果还是不太明显,为了让小伙伴们看到明显效果,我们这里还是通过老方法:打断点

第七步:在调用删除随笔的方法前打断点,双击方法前边出现一个大红点

第八步:debug运行代码,点击右上角的昆虫

第九步:浏览器登录查看随笔页面

postid

第十步:继续运行。执行删除随笔的方法

代码运行结果

第十一步:刷新随笔页面,查看刚刚新增的那条随笔消失了

改造后参考代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1 # coding=utf-8
  2 #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3 
  4 #2.注释:包括记录创建时间,创建人,项目名称。
  5 '''
  6 Created on 2019-5-13
  7 @author: 北京-宏哥
  8 Project:学习和使用封装与调用--函数和参数化
  9 '''
 10 #3.导入模块
 11 import requests
 12 # # 先打开登录首页,获取部分cookie
 13 # url = "https://passport.cnblogs.com/user/signin"
 14 # # 登录成功后保存编辑内容
 15 # url2= "https://i.cnblogs.com/EditPosts.aspx?opt=1"
 16 # s = requests.session()     #s参数作为全局变量
 17 #-------------由于博客园的登录机制改变这部分代码仅作为参考start-------
 18 '''
 19 def login(s, url, payload):
 20  
 21  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
 22 
 23  "Accept": "application/json, text/javascript, */*; q=0.01",
 24  "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
 25  "Accept-Encoding": "gzip, deflate, br",
 26  "Content-Type": "application/json; charset=utf-8",
 27  "X-Requested-With": "XMLHttpRequest",
 28  "Content-Length": "385",
 29  "Cookie": "xxx 已省略",
 30  "Connection": "keep-alive"
 31  }
 32  r = s.post(url, json=payload, headers=headers, verify=False)
 33  result = r.json()
 34  print (result)
 35  return result['success'] # 返回 True 或 False
 36  '''
 37  # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------
 38 def save_box(s, url2, title, body_data):
 39  '''# 获取报存之后 url 地址'''
 40  body = {"__VIEWSTATE": "",
 41  "__VIEWSTATEGENERATOR": "FE27D343",
 42  "Editor$Edit$txbTitle": title,
 43  "Editor$Edit$EditorBody": "<p>"+body_data+"</p>",
 44  "Editor$Edit$Advanced$ckbPublished": "on",
 45  "Editor$Edit$Advanced$chkDisplayHomePage": "on",
 46  "Editor$Edit$Advanced$chkComments": "on",
 47  "Editor$Edit$Advanced$chkMainSyndication": "on",
 48  "Editor$Edit$lkbDraft": "存为草稿",
 49  }
 50  r2 = s.post(url2, data=body, verify=False)
 51  print(r2.url)
 52  return r2.url
 53 def get_postid(u):
 54  '''正则提取 postid'''
 55  import re
 56  postid = re.findall(r"postid=(.+?)&", u)
 57  print (postid) # 这里是 list
 58  if len(postid) < 1:
 59   return ''
 60  else:
 61   return postid[0]
 62 def delete_box(s,url3, postid):
 63  '''删除草稿箱'''
 64  json3 = {"postId": postid}
 65  r3 = s.post(url3, json=json3, verify=False)
 66  print (r3.json())
 67 if __name__ == "__main__":
 68  #-------------由于博客园的登录机制改变这部分代码仅作为参考start-------
 69  '''
 70  #登录url
 71  url = "https://passport.cnblogs.com/user/signin"
 72  payload = {
 73  "input1": "xxx",
 74  "input2": "xxx",
 75  "remember": True
 76  }
 77  s = requests.session()
 78  login(s, url, payload)
 79  '''
 80  # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------
 81  url = "https://passport.cnblogs.com/user/signin"
 82  headers = {
 83      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
 84  }  # get方法其它加个ser-Agent就可以了
 85  s = requests.session()
 86  r = s.get(url, headers=headers, verify=False)
 87  print(s.cookies)
 88  # 添加登录需要的两个cookie
 89  c = requests.cookies.RequestsCookieJar()
 90  c.set('.CNBlogsCookie',
 91        'XXX')  # 填上面抓包内容  具体查看前边的cookie登录,这里不赘述
 92  c.set('.Cnblogs.AspNetCore.Cookies',
 93        'XXX')  # 填上面抓包内容   具体查看前边cookie登录,这里不赘述
 94  c.set('AlwaysCreateItemsAsActive', "True")
 95  c.set('AdminCookieAlwaysExpandAdvanced', "True")
 96  s.cookies.update(c)
 97  print(s.cookies)
 98  result = r.content
 99 
100  #编辑随笔url
101  url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
102  u = save_box(s, url2, "北京-宏哥学习和使用封装与调用--函数和参数化", "1、学习和使用封装与调用--函数和参数化")
103  postid = get_postid(u)
104  # 删除随笔url
105  url3 = "https://i.cnblogs.com/post/delete"
106  delete_box(s, url3, postid)

小结

1、封装好处:

第一:重用;

第二:不必关心具体的实现;

第三:面向对象三大特征之一;

第四,具有安全性!

2、哈哈,各位小伙伴们,封装与调用--函数和参数化就是这么简单!!!小编能力有限欢迎各位批评指正。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
  流程相关的接口,主要用 session 关联,如果写成函数(如上篇),s 参数每个函数都要带,每个函数多个参数,这时候封装成类会更方便。在这里我们还是以博客园为例,带着小伙伴们实践一下。
北京-宏哥
2019/09/11
3.1K0
python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
python接口自动化4-绕过验证码登录(cookie)
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接)。 获取不到也没关系,可以通过添加cookie的方式绕过验证码。 一、抓登录coo
上海-悠悠
2018/04/08
2.5K0
python接口自动化4-绕过验证码登录(cookie)
python接口自动化3-自动发帖(session)
前言 上一篇模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等,这时候如何保持会话呢? 一、session简介 1.查看帮助文档,贴了一部分,后面省略了 >>import requests >>help(requests.session()) class Session(SessionRedirectMixin) | A Requests session. | | Provides cookie persistence, connection-pooling
上海-悠悠
2018/04/08
1.3K0
python接口自动化3-自动发帖(session)
python接口自动化(十三)--cookie绕过验证码登录(详解)
  有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接)。获取不到也没关系,可以通过添加cookie的方式绕过验证码。(注意:并不是所有的登录都是用cookie来保
北京-宏哥
2019/09/11
4.4K0
python接口自动化(十三)--cookie绕过验证码登录(详解)
python接口自动化7-参数关联
前言 我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了 一、删除草稿箱 1.我们前面讲过登录后保存草
上海-悠悠
2018/04/08
9120
python接口自动化7-参数关联
python接口自动化8-参数化
前言 前面一篇实现了参数的关联,那种只是记流水账的完成功能,不便于维护,也没什么可读性,接下来这篇可以把每一个动作写成一个函数,这样更方便了。 参数化的思维只需记住一点:不要写死! 一、登录函数
上海-悠悠
2018/04/08
8170
python接口自动化8-参数化
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
  有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理。现在企业公司一般常见的接口因为json数据容易处理,所以绝大多数返回数据也是 json 格式的,我们在做判断时候,往往只需要提取其中
北京-宏哥
2019/09/11
1.6K0
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
python接口自动化(十六)--参数关联接口后传(详解)
  大家对前边的自动化新建任务之后,接着对这个新建任务操作了解之后,希望带小伙伴进一步巩固胜利的果实,夯实基础。因此再在沙场实例演练一下博客园的相关接口。我们用自动化发随笔之后,要想接着对这篇随笔操作,不用说就需
北京-宏哥
2019/09/11
9320
python接口自动化(十六)--参数关联接口后传(详解)
python接口自动化2-发送post请求
前言 发送post的请求参考例子很简单,实际遇到的情况却是很复杂的,首先第一个post请求肯定是登录了,但登录是最难处理的。登录问题解决了,后面都简单了。 一、查看官方文档 1.学习一个新的模块,其
上海-悠悠
2018/04/08
8160
python接口自动化2-发送post请求
python接口自动化6-重定向(Location)
前言 某屌丝男A鼓起勇气向女神B打电话表白,女神B是个心机婊觉得屌丝男A是好人,不想直接拒绝于是设置呼叫转移给闺蜜C了,最终屌丝男A和女神闺蜜C表白成功了,这种场景其实就是重定向了。 一、重定向 1. (Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置,从地址A跳转到地址B了。 2.重定向状态码: --301 redirect: 301 代表永久性转移(Permanently Moved) --302 redirect: 302 代表暂时性转移(Temporarily Moved )
上海-悠悠
2018/04/08
1.5K0
python接口自动化6-重定向(Location)
python接口自动化(十五)--参数关联接口(详解)
  我们用自动化新建任务之后,要想接着对这个新建任务操作,那就需要用参数关联了,新建任务之后会有一个任务的Jenkins-Crumb,获取到这个Jenkins-Crumb,就可以通过传这个任务Jenkins-Crumb继续操作这个新建的任务。
北京-宏哥
2019/09/11
1.6K0
python接口自动化(十五)--参数关联接口(详解)
python接口自动化(十八)--重定向(Location)(详解)
  在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url。URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作。但是自己又不希望通过主域名的二级目录进行访问,而
北京-宏哥
2019/09/11
2.5K0
python接口自动化(十八)--重定向(Location)(详解)
python接口自动化18-requests-toolbelt处理multipart/form-data
一、requests-toolbelt 1.官方文档地址:[requests-toolbelt官方文档](https://pypi.python.org/pypi/requests-toolbelt/) 2.环境安装 > pip install requests-toolbelt 二、multipart/form-data传文件 ``` from requests_toolbelt import MultipartEncoder import requests m = MultipartEncoder(
企鹅号小编
2018/03/02
4.2K0
python接口自动化18-requests-toolbelt处理multipart/form-data
python接口自动化(十一)--发送post【data】(详解)
  前面登录博客园的是传 json 参数,由于其登录机制的改变没办法演示,然而在工作中有些登录不是传 json 的,如 jenkins 的登录,这里小编就以jenkins 登录为案例,传 data 参数,给各位童鞋详细演练一下。
北京-宏哥
2019/09/11
1.1K0
python接口自动化(十一)--发送post【data】(详解)
Selenium2+python自动化24-js处理富文本
前言 上一篇Selenium2+python自动化23-富文本(自动发帖)解决了富文本上iframe问题,其实没什么特别之处,主要是iframe的切换,本篇讲解通过js的方法处理富文本上ifr
上海-悠悠
2018/04/08
1.1K0
Selenium2+python自动化24-js处理富文本
python接口自动化11-post传data参数案例
前言: 前面登录博客园的是传json参数,有些登录不是传json的,如jenkins的登录,本篇以jenkins登录为案例,传data参数。 一、登录jenkins抓包 1.登录jenkins,
上海-悠悠
2018/04/08
1.1K0
python接口自动化11-post传data参数案例
python接口自动化(十四)--session关联接口(详解)
  上一篇cookie绕过验证码模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等等,这时候如何保持会话呢?这里我以jenkins平台为例,给小伙伴们在沙场演练一下。
北京-宏哥
2019/09/11
1.9K0
python接口自动化(十四)--session关联接口(详解)
python接口自动化9-https请求(SSL)
前言 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590) 小编环境: python:2.7.12 requests:2.13.0 fiddler:v4.6.2.0 一、SSL问题 1.不启用fiddler,直接发https请求
上海-悠悠
2018/04/08
9630
python接口自动化9-https请求(SSL)
python接口自动化24-token关联登录
登录网站的时候,经常会遇到传token参数,token关联并不难,难的是找出服务器第一次返回token的值所在的位置,取出来后就可以动态关联了
上海-悠悠
2018/07/25
9470
python接口自动化24-token关联登录
python接口自动化14-multipart/form-data上传图片
前言 在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片 一、上传接口 1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了
上海-悠悠
2018/04/08
2.3K0
python接口自动化14-multipart/form-data上传图片
推荐阅读
相关推荐
python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档