当前位置:   article > 正文

Python自动化测试之request库【session简介与自动写博客】(二)_python session

python session

目录:导读

session简介

session登录

自动写博客

获取登录cookies

抓取写博客接口

requests自动写博客

写在最后


http协议是无状态的,也就是每个请求都是独立的。那么登录后的一系列动作,都需要用cookie来验证身份是否是登录状态,为了高效的管理会话,保持会话,于是就有了session。

session简介

  session是一种管理用户状态和信息的机制,与cookies的不同的是,session的数据是保存在服务器端。说的明白点就是session相当于一个虚拟的浏览器,在这个浏览器上处于一种保持登录的状态。

session登录

格式:

  1. # session 用法
  2. | Basic Usage::
  3. |
  4. | >>> import requests
  5. | >>> s = requests.Session()
  6. | >>> s.get('https://httpbin.org/get')
  7. | <Response [200]>
  8. |
  9. | Or as a context manager::
  10. |
  11. | >>> with requests.Session() as s:
  12. | >>> s.get('https://httpbin.org/get')
  13. | <Response [200]>

1.举个例子,模拟百度登录场景

2.查看登录后百度账号的cookies值,经过观察发现是由”BAIDUID“和"BDUSS"

3.导入requests模块,使用session()函数

4.携带cookies进行请求,通过返回内容,判断是否登录成功。

  1. # coding:utf-8
  2. import requests
  3. # 保持登录状态
  4. s = requests.session()
  5. url = 'https://www.baidu.com/'
  6. # 请求头
  7. headers = {
  8. "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
  9. }
  10. r = s.post(url,headers=headers)
  11. # 查看的cookies值
  12. cooks = {
  13. "BDUSS":"xxxxxxx",
  14. "BAIDUID":"XXXXXXXX"
  15. }
  16. # 添加登录所携带的cookies
  17. c = requests.cookies.RequestsCookieJar()
  18. c.set("BDUSS",cooks["BDUSS"])
  19. c.set("BAIDUID",cooks["BAIDUID"])
  20. s.cookies.update(c)
  21. # 判断是否登录成功
  22. r2 = s.get(url,headers=headers)
  23. if '我在谁身旁' in r2.text:
  24. print('登录成功')
  25. else:
  26. print("登录失败")
  27. 执行结果:
  28. 登录成功

这个时候就可以做一些登录过后的操作。

session模拟浏览器,浏览器中登录状态,只要浏览器不退出,就可以继续做其他的操作了。

自动写博客

我们先理下书写的思路:

1.通过request访问博客园;

2.通过session保存cookies;

3.携带保存的cookies进行请求写博客的接口

4.编写博客内容,进行保存,发博客

获取登录cookies

1.通过fiddler\F12进行抓取未登录的cookies值

2.再次抓取Fiddler\F12进行抓取登录后的cookies值

3.把cookies放到session中

  1. # coding:utf-8
  2. import requests
  3. import urllib3
  4. from bs4 import BeautifulSoup
  5. urllib3.disable_warnings()
  6. s = requests.session()
  7. s.verify = False # 全局的
  8. url = 'https://passport.cnblogs.com/user/signin'
  9. headers = {
  10. "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
  11. }
  12. r = s.get(url,headers=headers)
  13. cooks = {
  14. ".Cnblogs.AspNetCore.Cookies":"XXXXXXXX",
  15. ".CNBlogsCookie":"XXXXXX"
  16. }
  17. c = requests.cookies.RequestsCookieJar()
  18. c.set(".CNBlogsCookie", cooks[".CNBlogsCookie"]) # 登陆有效的cookies
  19. c.set(".Cnblogs.AspNetCore.Cookies", cooks[".Cnblogs.AspNetCore.Cookies"])
  20. s.cookies.update(c)
  21. url1 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
  22. r1 = s.get(url1)
  23. if "博客后台管理" in r1.text:
  24. print("登录成功!")

抓取写博客接口

1.抓取编写博客接口,获取编写内容,查看Raw获取接口内容

2.把这些值通过字典的形式进行编写如:{“name”:“value”}

  1. body = {
  2. "__VIEWSTATE":"",
  3. "__VIEWSTATEGENERATOR":"FE27D343",
  4. "Editor$Edit$txbTitle":"编辑草稿",
  5. "Editor$Edit$EditorBody":"这是编辑草稿的内容",
  6. "Editor$Edit$Advanced$ckbPublished":"on",
  7. "Editor$Edit$Advanced$chkDisplayHomePage":"on",
  8. "Editor$Edit$Advanced$chkComments":"on",
  9. "Editor$Edit$Advanced$chkMainSyndication":"on",
  10. "Editor$Edit$Advanced$txbEntryName":"",
  11. "Editor$Edit$Advanced$txbExcerpt":"",
  12. "Editor$Edit$Advanced$txbTag":"",
  13. "Editor$Edit$Advanced$tbEnryPassword":"",
  14. "Editor$Edit$lkbDraft":"存为草稿"
  15. }
'
运行

requests自动写博客

1.重新编写草稿内容,然后通过session进行重新发帖(草稿内容部分进行了改变,方便区分)

  1. # coding:utf-8
  2. import requests
  3. import urllib3
  4. from bs4 import BeautifulSoup
  5. urllib3.disable_warnings()
  6. s = requests.session()
  7. s.verify = False # 全局的
  8. url = 'https://passport.cnblogs.com/user/signin'
  9. headers = {
  10. "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
  11. }
  12. r = s.get(url,headers=headers)
  13. cooks = {
  14. ".Cnblogs.AspNetCore.Cookies":"XXXXXXXXX",
  15. ".CNBlogsCookie":"XXXXXX"
  16. }
  17. c = requests.cookies.RequestsCookieJar()
  18. c.set(".CNBlogsCookie", cooks[".CNBlogsCookie"]) # 登陆有效的cookies
  19. c.set(".Cnblogs.AspNetCore.Cookies", cooks[".Cnblogs.AspNetCore.Cookies"])
  20. s.cookies.update(c)
  21. url1 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
  22. r1 = s.get(url1)
  23. if "博客后台管理" in r1.text:
  24. print("登录成功!")
  25. body = {
  26. "__VIEWSTATE":"",
  27. "__VIEWSTATEGENERATOR":"FE27D343",
  28. "Editor$Edit$txbTitle":"编辑草稿自动写博客",
  29. "Editor$Edit$EditorBody":"这是编辑草稿的内容自动写博客",
  30. "Editor$Edit$Advanced$ckbPublished":"on",
  31. "Editor$Edit$Advanced$chkDisplayHomePage":"on",
  32. "Editor$Edit$Advanced$chkComments":"on",
  33. "Editor$Edit$Advanced$chkMainSyndication":"on",
  34. "Editor$Edit$Advanced$txbEntryName":"",
  35. "Editor$Edit$Advanced$txbExcerpt":"",
  36. "Editor$Edit$Advanced$txbTag":"",
  37. "Editor$Edit$Advanced$tbEnryPassword":"",
  38. "Editor$Edit$lkbDraft":"存为草稿"
  39. }
  40. # 请求保存草稿接口
  41. r2 = s.post(url1,headers=headers,data=body)

2.发送请求后通过查看博客园的草稿箱查看是否保存成功

写在最后

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

看到这篇文章的人有觉得我的理解有误的地方,也欢迎评论和探讨~

你也可以加入下方的的群聊去和同行大神交流切磋

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/802766
推荐阅读
相关标签
  

闽ICP备14008679号