什么是Token
Token 也是一种用于身份验证和授权的凭证,但与 Cookie 有一些关键区别。通常,Token 是由服务器生成的一串加密字符串,客户端(如浏览器或移动应用)在用户成功登录后会收到这个 Token,并将其存储在本地(例如,LocalStorage
、SessionStorage
或 Cookie 中)。
Token的主要用途和特点
- 无状态性(Stateless):服务器本身不存储token的状态,每一次请求时,客户端都会把token发送给服务器,服务器通过验证token的有效性来确定用户身份
- 跨域友好(Cross-Origin Friendly):Token一般不依赖于特定的域名,因此更好的再不同域或子域共享
- 安全性增强 (Enhanced Security):特别是像 JWT (JSON Web Tokens) 这样的 Token,包含了签名信息,可以防止篡改。
- 适用范围广(Broader Applicability):Token不仅限于浏览器,也常用于移动应用、API接口等身份验证
常见的Token存储方式
LocalStorage/SessionStorage
:通过JavaScript
存储在浏览器本地、或者会话中Cookie
:也可以把Token存储在Cookie中,但是需要注意安全性;例如设置HttpOnly
和Secure
标志)。
怎么获取、新增、删除Token
由于 Token 通常存储在LocalStorage、SessionStorage
或 Cookie 中,Selenium 获取和管理 Token 的方式取决于其存储位置。
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
class browser_token:
def __init__(self, path, url, options):
self.path = path
self.service = Service(path)
self.options = options
self.driver = webdriver.Chrome(service=self.service, options=self.options)
self.driver.get(url)
def close(self):
time.sleep(5)
self.driver.quit()
# 假设Token存储在BAIDUID_BFESS里面的value
def get_token_from_cookie(self):
all_cookies = self.driver.get_cookies()
BAIDUID_BFESS = None
for cookie in all_cookies:
if cookie['name'] == 'BAIDUID_BFESS':
BAIDUID_BFESS = cookie['value']
break
if BAIDUID_BFESS:
print(f"获取到的 Token (从 Cookie 中): {BAIDUID_BFESS}")
else:
print("未在 Cookie 中找到名为 'BAIDUID_BFESS' 的 Token")
# 从 LocalStorage中获取 Token(假设 Token 的 key 是 'TY_DEVICE_N_ID')
def get_token_from_localstorage(self):
token_from_local_storage = self.driver.execute_script("return window.localStorage.getItem('TY_DEVICE_N_ID');")
if token_from_local_storage:
print(f"获取到的 Token (从 LocalStorage 中): {token_from_local_storage}")
else:
print("未在 LocalStorage 中找到名为 'TY_DEVICE_N_ID' 的 Token")
# 从 SessionStorage 获取 Token (假设 Token 的 key 是 '_bl_sid')
def get_token_from_sessionstorage(self):
token_from_session_storage = self.driver.execute_script("return window.sessionStorage.getItem('_bl_sid');")
if token_from_session_storage:
print(f"获取到的 Token (从 SessionStorage 中): {token_from_session_storage}")
else:
print("未在 SessionStorage 中找到名为 '_bl_sid' 的 Token")
#
# 添加 Token 到 LocalStorage
def add_token_into_localstorage(self):
token_to_add_local = "my_local_token_value"
self.driver.execute_script(f"window.localStorage.setItem('authToken', '{token_to_add_local}');")
print(f"已将 Token '{token_to_add_local}' 添加到 LocalStorage")
# 获取并打印 LocalStorage 中的 Token
retrieved_token_local = self.driver.execute_script("return window.localStorage.getItem('authToken');")
print(f"从 LocalStorage 获取的 Token: {retrieved_token_local}")
# 添加 Token 到 SessionStorage
def add_token_into_sessionstorage(self):
token_to_add_session = "my_session_token_value"
self.driver.execute_script(f"window.sessionStorage.setItem('sessionToken', '{token_to_add_session}');")
print(f"已将 Token '{token_to_add_session}' 添加到 SessionStorage")
# 获取并打印 SessionStorage 中的 Token
retrieved_token_session = self.driver.execute_script("return window.sessionStorage.getItem('sessionToken');")
print(f"从 SessionStorage 获取的 Token: {retrieved_token_session}")
# 假设LocalStorage 中存在 'my_local_token_value'。并且删除
def del_token_from_localstorage(self):
self.driver.execute_script("window.localStorage.removeItem('my_local_token_value');")
print("已从 LocalStorage 删除 'my_local_token_value'")
# 假设SessionStorage 中存在 'my_session_token_value'。并且删除
def del_token_from_sessionstorage(self):
self.driver.execute_script("window.localStorage.removeItem('my_session_token_value');")
print("已从 LocalStorage 删除 'my_session_token_value'")
if __name__ == '__main__':
serve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'
url = "https://mp.csdn.net/mp_blog/manage/article?"
options = Options()
options.debugger_address = "127.0.0.1:9222"
browser = browser_token(serve_path, url, options)
# browser.get_token_from_cookie()
browser.get_token_from_localstorage()
browser.get_token_from_sessionstorage()
browser.add_token_into_localstorage()
browser.add_token_into_sessionstorage()
browser.del_token_from_localstorage()
browser.del_token_from_sessionstorage()
browser.get_token_from_localstorage()
browser.get_token_from_sessionstorage()
browser.close()