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

简介

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

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

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

登录函数

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

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

rIVFJz.png

保存草稿

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

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

UJnmim.png

提取 postid

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

QzMBni.png

删除草稿

1、传个 url 和 postid 就可以了

EziqIv.png

参考代码

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 requests12

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 或 False30

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\": \"

\"+body_data+\"

\",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 returnr2.url46 def get_postid(u):47 \'\'\'正则提取 postid\'\'\'

48 import re49 postid = re.findall(r\"postid=(.+?)&\", u)50 print (postid) # 这里是 list51 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 #登录url64 url = \"https://passport.cnblogs.com/user/signin\"

65 payload ={66 \"input1\": \"xxx\",67 \"input2\": \"xxx\",68 \"remember\": True69 }70 s =requests.session()71 login(s, url, payload)72 \'\'\'73 # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------

74

75 #编辑随笔url76 url2 = \"https://i.cnblogs.com/EditPosts.aspx?opt=1\"

77 u = save_box(s, url2, \"北京-宏哥学习和使用封装与调用--函数和参数化\", \"1、学习和使用封装与调用--函数和参数化\")78 postid =get_postid(u)79 # 删除随笔url80 url3 = \"https://i.cnblogs.com/post/delete\"

81 delete_box(s, url3, postid)

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

改造代码如下

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

fQvIjq.png

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

qYBRra.png

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

eiQRvy.png

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

73ym2a.png

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

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

RNJBRf.png

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

eEjQFr.png

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

fIjY3m.png

postid

zMJfI3.png

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

代码运行结果

U32YBj.png

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

jyuYBn.png

改造后参考代码

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 requests12 # # 先打开登录首页,获取部分cookie13 # 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 或 False36 \'\'\'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\": \"

\"+body_data+\"

\",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 returnr2.url53 def get_postid(u):54 \'\'\'正则提取 postid\'\'\'

55 import re56 postid = re.findall(r\"postid=(.+?)&\", u)57 print (postid) # 这里是 list58 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 #登录url71 url = \"https://passport.cnblogs.com/user/signin\"

72 payload ={73 \"input1\": \"xxx\",74 \"input2\": \"xxx\",75 \"remember\": True76 }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 # 添加登录需要的两个cookie89 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.content99

100 #编辑随笔url101 url2 = \"https://i.cnblogs.com/EditPosts.aspx?opt=1\"

102 u = save_box(s, url2, \"北京-宏哥学习和使用封装与调用--函数和参数化\", \"1、学习和使用封装与调用--函数和参数化\")103 postid =get_postid(u)104 # 删除随笔url105 url3 = \"https://i.cnblogs.com/post/delete\"

106 delete_box(s, url3, postid)

小结

1、封装好处:

第一:重用;

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

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

第四,具有安全性!

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值