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

释放双眼,带上耳机,听听看~!

简介

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

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

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

登录函数

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

2、登录函数传三个参数,s 是需要调用前面的 session 类,所以必传,可以传个登录的 url,然后 payload 是账号和密码
python接口自动化(三十四)-封装与调用--函数和参数化(详解)

保存草稿

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

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

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

提取 postid

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

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

删除草稿

1、传个 url 和 postid 就可以了

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

参考代码

 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登录替换登录这个动作

改造代码如下

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

postid

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

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

代码运行结果

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

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

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

 改造后参考代码

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

给TA打赏
共{{data.count}}人
人已打赏
随笔日记

spaCy 学习 第二篇:语言模型

2020-11-9 4:51:12

随笔日记

目前下载VS2017你可能会遇到这个坑

2020-11-9 4:51:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索