简介
前面虽然完成了参数的联系关系,然则那种只是记流水账的完胜利用,不便于保护,也没什么可读性,跟着水温和妙技的提拔,再返转头去看前边写的代码,简直是惨绝人寰那样的代码是低级入门的代码程度都达不到。接下来这篇由我率领小伙伴们把每一
个鼠标点击行动写成一个函数,如许更轻易保护了,并且可读性也高,后期其他保护职员在保护代码的时刻看起来心旷神怡,就不会骂娘了。
参数化的头脑只需记着一点:不要写死,如许就便于保护,不然就会牵一发而动全身,一处修正致使到处修正,不便于保护。
登录函数
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 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": "<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 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登录替代登录这个行动
革新代码以下
第一步:将登录要领解释掉
第二步:将登录要领所传的参数和挪用登录的要领解释掉
第三步:经由过程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 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": "<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 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、哈哈,列位小伙伴们,封装与挪用--函数和参数化就是这么简朴!!!小编才能有限迎接列位批评指正。
Comment here is closed