谈谈selenium中的cookie操作

发布时间 2023-10-20 13:31:31作者: 松勤吴老师

实例演示

以登录网易云音乐为例

分两步走

获取cookies

from selenium import webdriver
from pprint import pprint
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://music.163.com/')
driver.delete_all_cookies()  # 此处只是演示api,可以不写的
input('请扫码登录...')
pprint(driver.get_cookies())

注意,执行效果是打开网站后,会等待用户操作

你要先点击登录

再扫码

然后在控制台即可回车继续执行你的代码pprint(driver.get_cookies())

得到 的结果类似如下,是一个List[dict...]的形式,内容非常长

[{'domain': '.music.163.com',
  'expiry': 1732331299,
  'httpOnly': False,
  'name': 'ntes_kaola_ad',
  'path': '/',
  'sameSite': 'Lax',
  'secure': False,
  'value': '1'},
 {'domain': '.music.163.com',
  'expiry': 1732331299,
  'httpOnly': False,
  'name': 'WNMCID',
  'path': '/',
  'sameSite': 'Strict',
  'secure': False,
  'value': 'knwafe.1697771299228.01.0'},
 ...]

装入cookies

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://music.163.com/')
all_cookies = [{'domain': '.music.163.com',
  'expiry': 1732331299,
  'httpOnly': False,
  'name': 'ntes_kaola_ad',
  'path': '/',
  'sameSite': 'Lax',
  'secure': False,
  'value': '1'},
 {'domain': '.music.163.com',
  'expiry': 1732331299,
  'httpOnly': False,
  'name': 'WNMCID',
  'path': '/',
  'sameSite': 'Strict',
  'secure': False,
  'value': 'knwafe.1697771299228.01.0'},
 ...(此处省略部分)]
for cookie in all_cookies:
     driver.add_cookie(cookie)

sleep(2)
driver.get('https://music.163.com/')

值得注意的是

  1. 你在代码中打开了2次网站,第一次是没有登录的状态,cookies装入后就显示为登录了
  2. cookies具有时效性,过了自然就不可以登录了

cookie相关操作

方法 说明
add_cookie(self,cookie_dict) 添加某个cookie,dict形式
delete_all_cookies(self) 删除所有的cookie
delete_cookie(self,name) 删除某个cookie
get_cookie(self,name) 获取cookie中某个name的值
get_cookies(self) 获取所有的cookies,List[dict]形式

说在最后

从效果上看,如果是登录更推荐用options结合user-data去绕过,cookies多少有点勉强