zoukankan      html  css  js  c++  java
  • python接口自动化(三十四)-封装与调用--函数和参数化(详解)

    简介

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

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

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

    登录函数

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

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

    代码运行结果

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

     改造后参考代码

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

  • 相关阅读:
    Css3炫酷总结使用
    HTML5的你应该记住的一些知识点
    JavaScript 笔记
    Sliverlight linq中的数组筛选数据库中的数据
    理解依赖注入 for Zend framework 2
    Zend Framework 2中如何使用Service Manager
    让注册体验来得更简单点吧
    Flash中国地图 开放源码
    cocos2dx之WebView踩过的坑(android返回键处理问题)
    android游戏的增量更新(资源及代码的热更新)
  • 原文地址:https://www.cnblogs.com/du-hong/p/10844329.html
Copyright © 2011-2022 走看看