Python-获取Local Storage和Session Storage

 

 

一、简介

LocalStorage 是只读的。数据存储也是跨浏览器会话。LocalStorage 类似于SessionStorage。

区别在于,数据存储在 LocalStorage 是无期限的,而当页面会话结束——也就是说当页面被关闭时,数据存储在 SessionStorage 会被清除 。

 

二、演示示例

 

三、代码实现

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import yaml
from pathlib import Path

URL = "你的测试链接"
USER_MES = ("你的账号", "你的密码")
LOCAL_STORAGE_PATH = Path("你的生成yaml文件路径")  # 如: Path("tmp/localstorage.yaml")

class StorageHelper:
    user_name_loc = (By.XPATH, "lalala")
    pass_word_loc = (By.XPATH, "dididi")
    login_button_loc = (By.XPATH, "lilili")

    def __init__(self, wait_secs=10):
        self.wait_secs = wait_secs

    def _wait(self, driver, locator):
        return WebDriverWait(driver, self.wait_secs).until(
            EC.presence_of_element_located(locator)
        )

    def save_localstorage(self):
        driver = webdriver.Chrome()
        try:
            driver.get(URL)
            self._wait(driver, self.user_name_loc).send_keys(USER_MES[0])
            self._wait(driver, self.pass_word_loc).send_keys(USER_MES[1])
            self._wait(driver, self.login_button_loc).click()

            # 等页面完成登录后,可等待某标识元素或接口完成
            WebDriverWait(driver, self.wait_secs).until(
                lambda d: d.execute_script("return window.localStorage.length") > 0
            )

            local_storage = driver.execute_script("return window.localStorage")
            LOCAL_STORAGE_PATH.parent.mkdir(parents=True, exist_ok=True)
            with LOCAL_STORAGE_PATH.open("w", encoding="utf-8") as f:
                yaml.safe_dump(dict(local_storage), f, allow_unicode=True)
            print(f"localStorage 已保存到 {LOCAL_STORAGE_PATH}")
        finally:
            driver.quit()

    def load_localstorage(self, driver):
        data = yaml.safe_load(LOCAL_STORAGE_PATH.read_text(encoding="utf-8"))
        for k, v in data.items():
            driver.execute_script("localStorage.setItem(arguments[0], arguments[1]);", k, v)
        print("localStorage 注入完成")

    # 如果要用 sessionStorage,只需把下面两行替换:
    # local_storage = driver.execute_script("return window.sessionStorage")
    # driver.execute_script("sessionStorage.setItem(arguments[0], arguments[1]);", k, v)

# 使用示例:
# helper = StorageHelper()
# helper.save_localstorage()
# driver = webdriver.Chrome()
# driver.get(URL)
# helper.load_localstorage(driver)
# 刷新或跳转受保护页进行后续操作

执行完成即可查看生成的.yaml文件

 

posted @ 2022-12-13 14:55  莲(LIT)  阅读(2445)  评论(0)    收藏  举报