博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium(四)操作cookie,伪造cookie
阅读量:5101 次
发布时间:2019-06-13

本文共 3876 字,大约阅读时间需要 12 分钟。

简介:

Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据。

常见的用途就是保留用户登陆信息,登陆时的7天免登陆,记住我…………这些都是通过cookie实现的。

一:认识cookie

还是firefox,打开百度,登陆一下,shifit+F9,即可弹出存储探查器。看到cookie了吧,百度给你留下的东西还真不少。

chrome快捷键是ctrl+shifit+i

 

Cookie由变量名和值组成,类似Javascript变量。其属性里既有标准的Cookie变量,也有用户自己创建的变量,属性中变量是用“变量=值”形式来保存。

  根据Netscape公司的规定,Cookie格式如下:
  Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
  NAME=VALUE
  这是每一个Cookie均必须有的部分。NAME是该Cookie的名称,VALUE是该Cookie的值。在字符串“NAME=VALUE”中,不含分号、逗号和空格等字符。
  Expires=DATE:Expires变量是一个只写变量,它确定了Cookie有效终止日期。该属性值DATE必须以特定的格式来书写:星期几,DD-MM-YY HH:MM:SS GMT,GMT表示这是格林尼治时间。反之,不以这样的格式来书写,系统将无法识别。该变量可省,如果缺省时,则Cookie的属性值不会保存在用户的硬盘中,而仅仅保存在内存当中,Cookie文件将随着浏览器的关闭而自动消失。
  Domain=DOMAIN-NAME:Domain该变量是一个只写变量,它确定了哪些Internet域中的Web服务器可读取浏览器所存取的Cookie,即只有来自这个域的页面才可以使用Cookie中的信息。这项设置是可选的,如果缺省时,设置Cookie的属性值为该Web服务器的域名。
  Path=PATH:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie。一般如果用户输入的URL中的路径部分从第一个字符开始包含Path属性所定义的字符串,浏览器就认为通过检查。如果Path属性的值为“/”,则Web服务器上所有的WWW资源均可读取该Cookie。同样该项设置是可选的,如果缺省时,则Path的属性值为Web服务器传给浏览器的资源的路径名。
  可以看出我们借助对Domain和Path两个变量的设置,即可有效地控制Cookie文件被访问的范围。
  Secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时,浏览器才向服务器提交相应的Cookie。当前这种协议只有一种,即为HTTPS。

 二:python+selenium 获取cookie

尝试运行下面的代码

from selenium import webdriverdriver=webdriver.Firefox()driver.get('http://www.baidu.com')cookie=driver.get_cookies()print(cookie)driver.quit()print('----------')driver=webdriver.Chrome()driver.get('http://www.baidu.com')cookie=driver.get_cookies()print(cookie)driver.quit()

输出结果大概是这样的:

firefox

[{'name': 'BAIDUID', 'value': '53****************

chrome

[{'domain': '.baidu.com', 'httpOnly': False, 'name': 'H***********

这是由字典组成的列表,也就是列表的嵌套。

分解看一下:

from selenium import webdriverdriver=webdriver.Firefox()driver.get('http://www.baidu.com')cookie=driver.get_cookies()print('firefox')print(cookie)for i in cookie:    for k,v in i.items():        print(k,'-->',v)    print('-------')driver.quit()print('-------------------')driver=webdriver.Chrome()driver.get('http://www.baidu.com')cookie=driver.get_cookies()print('chrome')print(cookie)for i in cookie:    for k,v in i.items():        print(k,'-->',v)    print('-------')driver.quit()

结果比较多,firefox chrome各取一组吧

firefox:

name --> BAIDUIDvalue --> 77E48BCEEFBD3936310DDD65BF9B2732:FG=1path --> /domain --> .baidu.comexpiry --> 3665365219secure --> FalsehttpOnly --> False

chrome:

domain --> .baidu.comexpiry --> 1549417579.219434httpOnly --> Falsename --> BAIDUIDpath --> /secure --> Falsevalue --> E5F0899A387E3944B0B8F09D255D9A73:FG=1

虽然顺序不一样,但是结构是一样的。

domain   path name value expiry secure httpOnly

三:写入cookie

首先介绍一个web调试网站:

这个网站就是调试web用的,比如说我们现在操作的cookie,和服务器交互等等的原理不考虑,但是我们和服务器交互的内容怎么看呢?

这个网站就提供了显示交互内容的功能,不仅有cookie,还有ip user-agent headers …………

现在我们看一下cookies       

 

 cookies是空的。

我们尝试一下写个cookie进去。

"""        Adds a cookie to your current session.        :Args:         - cookie_dict: A dictionary object, with required keys - "name" and "value";            optional keys - "path", "domain", "secure", "expiry"        Usage:            driver.add_cookie({'name' : 'foo', 'value' : 'bar'})            driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})            driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})        """from time import sleepfrom selenium import webdriverdriver = webdriver.Firefox()driver.get('http://httpbin.org/cookies')print(driver.get_cookies())c1 = {    'name':'username',    'value':'jackadam',    # 'path':'/',    # 'domain':'httpbin.org',    # 'secure':False,    # 'expiry':None,}driver.add_cookie(c1)print(driver.get_cookies())sleep(3)driver.refresh()sleep(3)driver.quit()

 

首先访问http://httpbin.org/cookies,然后增加一条cookie,等3秒后刷新,再等3秒,关闭浏览器。

官方文档写的,必选项name value,可选项path domain secure expiry

所以,注释掉的可选项,你也可以加上去。

注意:要首先打开这个网站,才可以给这个网站增加cookie。或许可以通过profile方式,先加载cookie再打开网站(研究中)

 

转载于:https://www.cnblogs.com/jackadam/p/8421233.html

你可能感兴趣的文章
xUtils 中的BitmapUtils 全面注释
查看>>
基础数据类型{dict:'字典'}
查看>>
软工作业 6:软件设计—— 用户体验(案例分析)
查看>>
P1651 塔 (动态规划)
查看>>
SqlServer保留几位小数的两种做法
查看>>
stream、string、byte[] 互转
查看>>
LINQ to Objects和多线程实现文件查找与分组
查看>>
P2473 [SCOI2008]奖励关
查看>>
Linux下安装和卸载jdk步骤详述
查看>>
Ubuntu命令大全(转载)
查看>>
oracle:数据库对象:创建用户和赋予权限,数据表,序列,事务,约束
查看>>
3.8 以符号常量/字面常量取代魔法数
查看>>
linux mysql添加用户名并实现远程访问
查看>>
新的起点ios开发
查看>>
全面理解Javascript闭包和闭包的几种写法及用途
查看>>
mysql变量使用总结
查看>>
C#文件压缩
查看>>
小组互评Alpha版本
查看>>
C Primer Plus(十二)
查看>>
mac下nginx搭建
查看>>