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

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

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

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

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

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

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

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

删除草稿
1、传个 url 和 postid 就可以了
参考代码
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 “EditorEditEditEdittxbTitle”: title,
36 “EditorEditEditEditEditorBody”: “

”+body_data+"

",
37 “Editor EditEditEditAdvanced ckbPublished":"on",38"EditorckbPublished": "on", 38 "EditorckbPublished":"on",38"EditorEdit AdvancedAdvancedAdvancedchkDisplayHomePage”: “on”,
39 “Editor EditEditEditAdvanced chkComments":"on",40"EditorchkComments": "on", 40 "EditorchkComments":"on",40"EditorEdit AdvancedAdvancedAdvancedchkMainSyndication”: “on”,
41 “Editor EditEditEditlkbDraft”: “存为草稿”,
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


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

代码运行结果
第十一步:刷新随笔页面,查看刚刚新增的那条随笔消失了


改造后参考代码
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 “EditorEditEditEdittxbTitle”: title,
43 “EditorEditEditEditEditorBody”: “

”+body_data+"

",
44 “Editor EditEditEditAdvanced ckbPublished":"on",45"EditorckbPublished": "on", 45 "EditorckbPublished":"on",45"EditorEdit AdvancedAdvancedAdvancedchkDisplayHomePage”: “on”,
46 “Editor EditEditEditAdvanced chkComments":"on",47"EditorchkComments": "on", 47 "EditorchkComments":"on",47"EditorEdit AdvancedAdvancedAdvancedchkMainSyndication”: “on”,
48 “Editor EditEditEditlkbDraft”: “存为草稿”,
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©
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、哈哈,各位小伙伴们,封装与调用–函数和参数化就是这么简单!!!小编能力有限欢迎各位批评指正。

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

  1. python接口自动化(十八)--重定向(Location)(详解)

    简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url.URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作.但是自己又不希望通过主域 ...

  2. python接口自动化(十四)--session关联接口(详解)

    简介 上一篇cookie绕过验证码模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等等,这时候如何保持会话呢?这里我以jenkins平台为例,给小伙伴们在沙场演练一下. se ...

  3. python接口自动化(十一)--发送post【data】(详解)

    简介 前面登录博客园的是传 json 参数,由于其登录机制的改变没办法演示,然而在工作中有些登录不是传 json 的,如 jenkins 的登录,这里小编就以jenkins 登录为案例,传 data ...

  4. python接口自动化测试二十四:上传多个附件,参数化

    python接口自动化测试二十四:上传多个附件,参数化 # 添加多个附件参数化files = [("1.png", "1.png") ("2.png& ...

  5. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)–发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先了 ...

  6. Python接口自动化之requests请求封装

    ------·今天距2021年253天·------ 这是ITester软件测试小栈第114次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之Token详解及应用,介绍tok ...

  7. Network 之十四 email 通信架构、Postfix 部署详解

      在之前的博文 Git 之八 详解 Gitlab 本地部署全过程.企业版 PATCH.Gitlab Pages 用到了本地搭建邮件服务器,由于之前对此没有概念,因此,今天专门学习一下(主要是需要配置 ...

  8. python接口自动化(三十九)- logger 日志 - 上(超详解)

    简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP, ...

  9. python接口自动化(十六)--参数关联接口后传(详解)

    简介 大家对前边的自动化新建任务之后,接着对这个新建任务操作了解之后,希望带小伙伴进一步巩固胜利的果实,夯实基础.因此再在沙场实例演练一下博客园的相关接口.我们用自动化发随笔之后,要想接着对这篇随笔操 ...

最新文章

  1. 5G-NR复用与信道编码
  2. Java Proxy和CGLIB动态代理原理
  3. Ayoub's function CodeForces - 1301C(组合数学)
  4. 介绍Angular的注入服务
  5. 力扣 26.删除有序数组中的重复元素
  6. Sublime Text 2中的正则表达式搜索替换
  7. Lock and Load FCPX 报错处理方法
  8. Mootools:Hash中的null值
  9. java求解给定一整数和指定指数求解计算结果
  10. POJ - 2533(动态规划 —— 最长子序列)
  11. c语言开发刷机工具,移动叔叔专用mtk刷机工具
  12. 蒲公英wifi怎么卸载干净_如何卸载蒲公英wifi
  13. windows server 2003忘记密码
  14. 打光篇-Radiometric Photometric概念
  15. phalcon mysql_Phalcon框架数据库读写分离的实现方法
  16. python的海龟绘图
  17. 四、ESP32单片机wifi的AP与STA模式使用
  18. AD接口测试工装研究
  19. HCIP第十五天笔记
  20. 格密码(Lattice)与NTRUEncrypt介绍

热门文章

  1. PHPCMS V9.6.0 SQL注入漏洞EXP
  2. [洛谷P3228] [HNOI2013]数列
  3. 使用Json封装scroll,已处理其兼容性问题
  4. Django学习手册 - ORM 外键
  5. cookie、localStorage和sessionStorage三者的异同
  6. 小程序中曾经遇到的坑(1)----canvas画布
  7. SQL Proc(存储过程)/tran(事物)
  8. BZOJ 1013 球形空间产生器
  9. 为 Analysis Services 数据库使用扩展字段属性(SQL Server 2005 联机丛书(2008 年 11 月))...
  10. 惠普前总裁孙振耀指点职业规划(转帖)