在之前的博客介绍了如何利用 Selenium去搭建 cookie池,进行自动化登录、获取信息等。那什么是cookie呢?它的作用又是什么呢? 这里,再重复简单介绍一下。


   cookie 是浏览器储存在用户电脑上的一小段文本文件。该文件里存了加密后的用户信息,过期时间等,且每次请求都会带上 cookie。用户在下次访问的时候,就会把本地的cookie文件加上url一起发送给服务器,服务器以此来判断用户的状态。由于cookie容量有限,只有4kb,有时候不可能将所有的用户信息都存到里面,因此 session可以解决这个问题,服务器通过身份信息在 session中查询用户的其他信息,这样我们的所有操作都会被保留。以下举一个例子演示怎样设置session。



在这里插入图片描述



import requests

session = requests.Session()
headers = {
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}

// 设置 session 的全局 headers
session.headers.update(headers)

// 默认使用全局的 headers
session.get('https://passport.vip.com/')

//自定义 headers
custom_headers = { 'referer': 'https://passport.vip.com/' }


// 既有全局的 user-agent 也有自定义的 referer
session.get('https://passport.vip.com/', headers=custom_headers)


   在讲解Cookie的获取和保存应用前,简单介绍一下 cookie在浏览器的基本结构组成。



   可见,主要组成部分为 Name-Value 键值对 和 Expires 这个生命周期,也就是失效的时间。



在这里插入图片描述



   获取 cookie : 通过 Document 对象 document.cookie创建和读取后,以分号 ; split 成一个数组,再通过 for 循环,添加判断条件,当查找到对应的 name 后,返回对应的用户名。如果找不到,返回空值。



function getCookie(cname) {
  var name = cname + '=';
  var ca = document.cookie.split(';'); 
  for (var i = 0; i < ca.length; i++) {
      if (ca[i].indexOf(name) >= 0) {
         return ca[i].split('=')[1];
          }
        }
        return '';
  }


   保存、设置 cookie : 创建一个标准的中国时间对象,再通过 setTime() 方法,设置cookie的生命周期,其中 getTime() 就是把时间对象转变成格林威治的时间戳(单位为毫秒),最后把时间戳通过 toGMTString()方法转成 GMT的标准时间。



function setCookie(cname, cvalue, exdays) {
   var d = new Date();
   d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);
   var expires = 'expires=' + d.toGMTString();
   document.cookie = cname + '=' + cvalue + ';' + expires;
}


在这里插入图片描述



在这里插入图片描述



在这里插入图片描述



   校检 cookie : 通过回调函数 getCookie() 和 setCookie() ,添加判断条件,当检测到 Local cookie,就会自动弹出欢迎的提示框,否则就要输入用户名,保存到 cookie里。

function checkCookie() {
   var user = getCookie('username');
   if (user) {
      alert('欢迎 ' + user + ' 再次访问');
        } else {
          user = prompt('请输入你的名字:');
          if (user) {
            setCookie('username', user, 8);
          }
        }
      }


   最后,通过 window.onload 页面加载后,执行回调函数 checkCookie()



    window.onload = function () {
       checkCookie();
      };


   完整的代码如下:



<script>

 window.onload = function () {
        checkCookie();
      };

     
 function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);
    var expires = 'expires=' + d.toGMTString();
    document.cookie = cname + '=' + cvalue + ';' + expires;
      }

    
 function getCookie(cname) {
    var name = cname + '=';
    var ca = document.cookie.split(';'); 
    for (var i = 0; i < ca.length; i++) {
       if (ca[i].indexOf(name) >= 0) {
          return ca[i].split('=')[1];
          }
        }
    return '';
      }

 function checkCookie() {
    var user = getCookie('username');
       if (user) {
         alert('欢迎 ' + user + ' 再次访问');
        } else {
          user = prompt('请输入你的名字:');
          if (user) {
            setCookie('username', user, 8);
          }
        }
      }
</script>


   测试演示: 例如当首次登录界面后,输入用户名



在这里插入图片描述



   可见,刚才测试输入的用户名以及 Expires 都成功添加到 cookies,用户有效的生命周期为 8天,那就是刚才函数 setCookie() 里面的第3个参数。



在这里插入图片描述



   在不删除 cookie的情况下,把浏览器关掉,再重新打开时,由于系统检测到本地 cookie 有相对应的用户名,因此会自动执行 checkCookie() 里的 alert() 函数内容,那就是弹窗语句。


   下一期将继续介绍软件开发、测试中各种应用的实例,有不明白的,欢迎私聊哦!



在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐