什么是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 timefrom selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Serviceclass browser_token:def __init__(self, path, url, options):self.path = pathself.service = Service(path)self.options = optionsself.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里面的valuedef get_token_from_cookie(self):all_cookies = self.driver.get_cookies()BAIDUID_BFESS = Nonefor cookie in all_cookies:if cookie['name'] == 'BAIDUID_BFESS':BAIDUID_BFESS = cookie['value']breakif 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 到 LocalStoragedef 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 中的 Tokenretrieved_token_local = self.driver.execute_script("return window.localStorage.getItem('authToken');")print(f"从 LocalStorage 获取的 Token: {retrieved_token_local}")# 添加 Token 到 SessionStoragedef 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 中的 Tokenretrieved_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()