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

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

简介


  

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

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

  

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


登录函数



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

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


1232840-20190513114931058-1407169831.png


保存草稿



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

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


1232840-20190513115206721-41296126.png


提取 postid



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


1232840-20190513115557644-1634287280.png


删除草稿



1、传个 url 和 postid 就可以了


1232840-20190513115704488-253526171.png


参考代码



 # coding=utf-8
  #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
  #2.注释:包括记录创建时间,创建人,项目名称。
  '''
  Created on 2019-5-13
  @author: 北京-宏哥
  Project:学习和使用封装与调用--函数和参数化
  '''
 #3.导入模块
 import requests
 def login(s, url, payload):
  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
  "Accept": "application/json, text/javascript, */*; q=0.01",
  "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
  "Accept-Encoding": "gzip, deflate, br",
  "Content-Type": "application/json; charset=utf-8",
  "X-Requested-With": "XMLHttpRequest",
  "Content-Length": "385",
  "Cookie": "xxx 已省略",
  "Connection": "keep-alive"
  }
  r = s.post(url, json=payload, headers=headers, verify=False)
  result = r.json()
  print (result)
  return result['success'] # 返回 True 或 False
 def save_box(s, url2, title, body_data):
  '''# 获取报存之后 url 地址'''
  body = {"__VIEWSTATE": "",
  "__VIEWSTATEGENERATOR": "FE27D343",
  "Editor$Edit$txbTitle": title,
  "Editor$Edit$EditorBody": "<p>"+body_data+"</p>",
  "Editor$Edit$Advanced$ckbPublished": "on",
  "Editor$Edit$Advanced$chkDisplayHomePage": "on",
  "Editor$Edit$Advanced$chkComments": "on",
  "Editor$Edit$Advanced$chkMainSyndication": "on",
  "Editor$Edit$lkbDraft": "存为草稿",
  }
  r2 = s.post(url2, data=body, verify=False)
  print(r2.url)
  return r2.url
 def get_postid(u):
  '''正则提取 postid'''
  import re
  postid = re.findall(r"postid=(.+?)&", u)
  print (postid) # 这里是 list
  if len(postid) < 1:
   return ''
  else:
   return postid[0]
 def delete_box(s,url3, postid):
  '''删除草稿箱'''
  json3 = {"postId": postid}
  r3 = s.post(url3, json=json3, verify=False)
  print (r3.json())
if __name__ == "__main__":
  #-------------由于博客园的登录机制改变这部分代码仅作为参考start-------
  '''
  #登录url
  url = "https://passport.cnblogs.com/user/signin"
  payload = {
  "input1": "xxx",
  "input2": "xxx",
  "remember": True
  }
  s = requests.session()
  login(s, url, payload)
  '''
  # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------
  #编辑随笔url
  url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
  u = save_box(s, url2, "北京-宏哥学习和使用封装与调用--函数和参数化", "1、学习和使用封装与调用--函数和参数化")
  postid = get_postid(u)
  # 删除随笔url
  url3 = "https://i.cnblogs.com/post/delete"
  delete_box(s, url3, postid)


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


改造代码如下



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


1232840-20190513130636751-1727500905.png


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


1232840-20190513130732743-1672247342.png


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


1232840-20190513131012759-1737420003.png


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

1232840-20190513152918996-1717613603.png


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

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


1232840-20190513131733317-285409792.png


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


1232840-20190513131850842-1165025449.png


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


1232840-20190513132015301-623275556.png


postid


1232840-20190513132405316-115333701.png


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

代码运行结果


1232840-20190513151502357-447736374.png


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


1232840-20190513151543412-2138688762.png


改造后参考代码



 # coding=utf-8
   #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
   #2.注释:包括记录创建时间,创建人,项目名称。
   '''
  Created on 2019-5-13
   @author: 北京-宏哥
   Project:学习和使用封装与调用--函数和参数化
   '''
  #3.导入模块
 import requests
 # # 先打开登录首页,获取部分cookie
 # url = "https://passport.cnblogs.com/user/signin"
 # # 登录成功后保存编辑内容
 # url2= "https://i.cnblogs.com/EditPosts.aspx?opt=1"
 # s = requests.session()     #s参数作为全局变量
 #-------------由于博客园的登录机制改变这部分代码仅作为参考start-------
  '''
 def login(s, url, payload):
   headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
  "Accept": "application/json, text/javascript, */*; q=0.01",
  "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
  "Accept-Encoding": "gzip, deflate, br",
  "Content-Type": "application/json; charset=utf-8",
  "X-Requested-With": "XMLHttpRequest",
  "Content-Length": "385",
  "Cookie": "xxx 已省略",
  "Connection": "keep-alive"
   }
  r = s.post(url, json=payload, headers=headers, verify=False)
   result = r.json()
   print (result)
  return result['success'] # 返回 True 或 False
  '''
  # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------
 def save_box(s, url2, title, body_data):
  '''# 获取报存之后 url 地址'''
  body = {"__VIEWSTATE": "",
  "__VIEWSTATEGENERATOR": "FE27D343",
  "Editor$Edit$txbTitle": title,
  "Editor$Edit$EditorBody": "<p>"+body_data+"</p>",
  "Editor$Edit$Advanced$ckbPublished": "on",
   "Editor$Edit$Advanced$chkDisplayHomePage": "on",
   "Editor$Edit$Advanced$chkComments": "on",
   "Editor$Edit$Advanced$chkMainSyndication": "on",
   "Editor$Edit$lkbDraft": "存为草稿",
   }
  r2 = s.post(url2, data=body, verify=False)
  print(r2.url)
  return r2.url
  def get_postid(u):
   '''正则提取 postid'''
  import re
   postid = re.findall(r"postid=(.+?)&", u)
  print (postid) # 这里是 list
   if len(postid) < 1:
    return ''
   else:
   return postid[0]
  def delete_box(s,url3, postid):
   '''删除草稿箱'''
  json3 = {"postId": postid}
  r3 = s.post(url3, json=json3, verify=False)
  print (r3.json())
  if __name__ == "__main__":
  #-------------由于博客园的登录机制改变这部分代码仅作为参考start-------
   '''
   #登录url
   url = "https://passport.cnblogs.com/user/signin"
  payload = {
   "input1": "xxx",
  "input2": "xxx",
   "remember": True
   }
   s = requests.session()
  login(s, url, payload)
   '''
   # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------
  url = "https://passport.cnblogs.com/user/signin"
  headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"
  }  # get方法其它加个ser-Agent就可以了
  s = requests.session()
   r = s.get(url, headers=headers, verify=False)
   print(s.cookies)
  # 添加登录需要的两个cookie
  c = requests.cookies.RequestsCookieJar()
  c.set('.CNBlogsCookie',
        'XXX')  # 填上面抓包内容  具体查看前边的cookie登录,这里不赘述
  c.set('.Cnblogs.AspNetCore.Cookies',
         'XXX')  # 填上面抓包内容   具体查看前边cookie登录,这里不赘述
  c.set('AlwaysCreateItemsAsActive', "True")
   c.set('AdminCookieAlwaysExpandAdvanced', "True")
   s.cookies.update(c)
  print(s.cookies)
  result = r.content
  #编辑随笔url
  url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
  u = save_box(s, url2, "北京-宏哥学习和使用封装与调用--函数和参数化", "1、学习和使用封装与调用--函数和参数化")
  postid = get_postid(u)
  # 删除随笔url
  url3 = "https://i.cnblogs.com/post/delete"
  delete_box(s, url3, postid)


小结



1、封装好处:

第一:重用;

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

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

第四,具有安全性!


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

相关文章
|
2月前
|
搜索推荐 Python
使用Python自动化生成物业通知单
本文介绍如何使用Python结合Pandas和python-docx库自动化生成物业通知单。通过读取Excel数据并填充至Word模板,实现高效准确的通知单批量制作。包括环境准备、代码解析及效果展示,适用于物业管理场景。
88 14
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
305 10
|
2月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
213 61
|
1月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
75 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
1月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
114 15
|
1月前
|
存储 安全 数据可视化
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
70 3
|
2月前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
96 7
|
2月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
108 7
|
2月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
88 4
|
2月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!

推荐镜像

更多