【目的】
通过登录成功后获取浏览器的cookie,再次打开界面通过添加cookie数据达到免登陆效果
一、selenium通过添加cookies免登陆
1、通过selenium登录成功,登录成功后,使用driver.get_cookies()获取获取所有cookies
2、将cookies数据保存
3、登录任一界面,未登录跳转至登录界面
4、读取cookies文件获取cookie,使用driver.add_cookie()添加
5、刷新该界面,界面显示已登录状态
友情提醒:cookie中的httponly如果值为True,则无法通过该方式登陆
代码参考:
#coding=utf-8
import json
from selenium import webdriver
import requests
class cookies:
def __init__(self,driver):
self.driver=driver
#获取cookies保存到文件
def save_cookie(self):
cookies=self.driver.get_cookies()
json_cookies=json.dumps(cookies)
with open('d:/cookies_csnd.json','w') as f:
f.write(json_cookies)
#读取文件中的cookie
def add_cookie(self):
self.driver.delete_all_cookies()
dict_cookies={}
with open('d:/cookies.json','r',encoding='utf-8') as f:
list_cookies=json.loads(f.read())
for i in list_cookies:
self.driver.add_cookie(i)
if __name__ == '__main__':
driver=webdriver.Chrome()
#进行登录
driver.find_element_by_xpath('//div/ul/li[@class="user"]/input').send_keys("xxxxxxxxxx")
driver.find_element_by_xpath('//div/ul/li[@class="password"]/input').send_keys("123456")
driver.find_element_by_xpath('//div/ul/li[@class="jump"]/button').click()
cookies=cookies(driver)
cookies.save_cookie()#保存cookies
driver.delete_all_cookies()#删除当前所有的cookies
#打开想要跳转的界面,此步不可缺少,不然会报错
driver.get("xxxxxxxxx")
cookies.add_cookies()#添加cookie
driver.get("xxxxxxxxx")#重新打开,该界面显示登录状态
cookie内容解读:
-
name:cookie的名称
-
value:cookie对应的值,动态生成的
-
domain:服务器域名
-
expiry:Cookie有效终止日期
-
path:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie
-
httpOnly:防脚本攻击
-
secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时