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

2019年7月2日11:00:55python接口自动化(三十四)-封装与挪用–函数和参数化(详解)已关闭评论 338

简介

  前面虽然完成了参数的联系关系,然则那种只是记流水账的完胜利用,不便于保护,也没什么可读性,跟着水温和妙技的提拔,再返转头去看前边写的代码,简直是惨绝人寰那样的代码是低级入门的代码程度都达不到。接下来这篇由我率领小伙伴们把每一

个鼠标点击行动写成一个函数,如许更轻易保护了,并且可读性也高,后期其他保护职员在保护代码的时刻看起来心旷神怡,就不会骂娘了。

  参数化的头脑只需记着一点:不要写死,如许就便于保护,不然就会牵一发而动全身,一处修正致使到处修正,不便于保护。

登录函数

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

avatar