python selenium操作cookie的实现
作者:隐泉 发布时间:2021-12-18 22:54:02
由于HTTP协议是无状态协议,所以服务器与客户端通过http协议通讯时,服务器不能记录客户端的信息。
为了解决这个问题,通过 Cookie 和 Session 技术来实现。
Cookie保存在客户端中
Session保存在服务器中
cookie的属性
一般cookie所具有的属性,包括:
Domain:域,表示当前cookie所属于哪个域或子域下面。
对于服务器返回的Set-Cookie中,如果没有指定Domain的值,那么其Domain的值是默认为当前所提交的http的请求所对应的主域名的。比如访问 http://www.example.com,返回一个cookie,没有指名domain值,那么其为值为默认的www.example.com。
Path:表示cookie的所属路径。
Expire time/Max-age:表示了cookie的有效期。expire的值,是一个时间,过了这个时间,该cookie就失效了。或者是用max-age指定当前cookie是在多长时间之后而失效。如果服务器返回的一个cookie,没有指定其expire time,那么表明此cookie有效期只是当前的session,即是session cookie,当前session会话结束后,就过期了。对应的,当关闭(浏览器中)该页面的时候,此cookie就应该被浏览器所删除了。
secure:表示该cookie只能用https传输。一般用于包含认证信息的cookie,要求传输此cookie的时候,必须用https传输。
httponly:表示此cookie必须用于http或https传输。这意味着,浏览器脚本,比如javascript中,是不允许访问操作此cookie的。
得到cookie
#从百度首页登录百度账号,并获取cookie
from selenium import webdriver
from time import sleep
import json
#启动chome浏览器并访问百度首页
option=webdriver.ChromeOptions()
option.add_argument('--start-maximized')
drive=webdriver.Chrome(options=option)
drive.get('http://www.baidu.com')
print(drive.title)
#点击“登录”
eled=drive.find_element_by_link_text("登录")
eled.click()
sleep(2)
#点击“用户名登录”
namelogin=drive.find_element_by_css_selector('p.tang-pass-footerBarULogin')
namelogin.click()
sleep(2)
#输入用户名,密码并登录
username = drive.find_element_by_id('TANGRAM__PSP_10__userName')
username.send_keys('********')
sleep(1)
password = drive.find_element_by_id('TANGRAM__PSP_10__password')
password.send_keys('********')
sleep(1)
submit = drive.find_element_by_id('TANGRAM__PSP_10__submit')
submit.click()
sleep(3)
#获取网站cookie
diccookie=drive.get_cookies()
fw=open('baiducookie.txt','w')
json.dump(diccookie,fw)
fw.close()
从硬盘读取cookie,加入到request请求发送服务器。
import time
import json
启动chome浏览器并访问百度首页
option=webdriver.ChromeOptions()
option.add_argument('--start-maximized')
drive=webdriver.Chrome(options=option)
drive.get('http://www.baidu.com')
print(drive.title)
fr=open('baidu_cookie.txt','r')
cookielist=json.load(fr)
fr.close()
for cookie in cookielist:
drive.add_cookie(cookie)
sleep(5)
drive.get('http://www.baidu.com')
drive.refresh()
通过cookie登录百度失败:
Message: unable to set cookie
Message: invalid argument: invalid 'expiry'
来源:https://www.cnblogs.com/blogzyq/p/11114615.html
猜你喜欢
- 多值运动,也就是对于某个对象来说,不仅仅只是其中一个属性值在变化,而是好多个,比如宽,高,字体,透明度等等同时变化当然了,多值运动会产生一个
- 在实际处理数据时,因系统内存有限,我们不可能一次把所有数据都导出进行操作,所以需要批量导出依次操作。为了加快运行,我们会采用多线程的方法进行
- 前面我们讲了一些Dreamweaver MX的基本操作,相信大家看了后都会觉得比较简单,的确,这是个工具软件,操作方便应该是它的宗旨。其实网
- 在实际使用python时,我们会将一些公共的东西写到一些基础模块中,供其他模块去调用,这时会去import自定义的一些基础模块,然后来导入。
- 本文实例讲述了php面象对象数据库操作类。分享给大家供大家参考。具体实现代码如下://此处构造一个数据库操作类,封装所有数据库操作 //可以
- 函数使用单下划线_开头使用单下划线(_)开头的函数_func不能被模块外部以: from module import *形式导入。但可以用:
- 我其实是同一天看到Robert Treat几人整理的”Mysql 迁移到Oracle前需要了解的50件事“与Baron Schwartz的”
- 往列表头部和尾部添加元素往头部添加元素list.insert(index,new_element)@@@index为新元素的插入位置,当in
- 列表(list)和元组(tuple)的一些基础list和tuple都是一个可以放置任意数据类型的有序集合,都是既可以存放数字、字符串、对象等
- 前言我们在前面的例子里,我们学习使用集合里字符或非集合里的字符,这时都是要把每个字符写出来的,但是有时需要把26个小写字母都放到集合里,那么
- swagger介绍Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言。Swagger与一组开源软件工具
- 我们前期开发了一个只有公司客服人员才能使用的系统——有限的几个客服人员。就是这有限的几个客服人员前几天突然就提出这样的问题:我们每隔很短一段
- PDO::getAvailableDriversPDO::getAvailableDrivers — 返回一个可用驱动的数组(PHP 5 &
- 外键在 MySQL 中,表有两种引擎,一种是 InnoDB ,另外一种是 myisam 。如果使用的是 InnoDB 引擎,是支持外键约束的
- 如何向客户端推送“出错信息”?下面是推送代码:服务器端:on error resume nextconn=se
- 前言subprocess库提供了一个API创建子进程并与之通信。这对于运行生产或消费文本的程序尤其有好处,因为这个API支持通过新进行的标准
- 说到客户端数据存储,可能第一时间想到的是cookies,这是一种网站常见的存储数据的方法。它的最大优点是兼容性好,几乎所有浏览器都具有这个功
- 导言在前面我们学习了如何创建item级的DataList。和可编辑的GridView一样,每个DataList里的item都包含一个Edit
- endswith()方法返回true,如果字符串以指定后缀结尾,否则返回(False可选限制的匹配从给定的索引开始和结束)。语法
- 原先的ctrl+alt+L容易和各种软件的快捷键冲突在setting——keymap——右边搜索栏搜索Reformat Code就会出现该设