selenium之Token

什么是Token

Token 也是一种用于身份验证和授权的凭证,但与 Cookie 有一些关键区别。通常,Token 是由服务器生成的一串加密字符串,客户端(如浏览器或移动应用)在用户成功登录后会收到这个 Token,并将其存储在本地(例如,LocalStorageSessionStorage或 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中,但是需要注意安全性;例如设置 HttpOnlySecure 标志)。
怎么获取、新增、删除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()
相关推荐
achene_ql9 分钟前
深入探索 RKNN 模型转换之旅
python·目标检测·rk3588·模型部署·rk3566
@十八子德月生1 小时前
8天Python从入门到精通【itheima】-1~5
大数据·开发语言·python·学习
每天一个秃顶小技巧2 小时前
02.Golang 切片(slice)源码分析(一、定义与基础操作实现)
开发语言·后端·python·golang
安特尼3 小时前
招行数字金融挑战赛数据赛道赛题一
人工智能·python·机器学习·金融·数据分析
serve the people3 小时前
解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
开发语言·python·conda
多多*4 小时前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
正在走向自律4 小时前
从0到1:Python机器学习实战全攻略(8/10)
开发语言·python·机器学习
西西弗Sisyphus5 小时前
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本
开发语言·python
Taichi呀5 小时前
PyCharm 快捷键指南
ide·python·pycharm
Stara05115 小时前
基于注意力机制与iRMB模块的YOLOv11改进模型—高效轻量目标检测新范式
人工智能·python·深度学习·神经网络·目标检测·计算机视觉·yolov11