杰瑞科技汇

Python如何获取localStorage数据?

我们可以通过一些“自动化”或“抓取”技术,模拟一个真实的浏览器去操作网页,从而读取其 LocalStorage,这里最常用和最强大的工具是 Selenium

Python如何获取localStorage数据?-图1
(图片来源网络,侵删)

下面我将详细介绍两种主流方法:

  1. 使用 Selenium (推荐):模拟一个完整的浏览器,可以执行 JavaScript 代码来获取 LocalStorage,这是最可靠、最通用的方法。
  2. 使用 Playwright:由 Microsoft 开发,是 Selenium 的一个现代化替代品,通常更快、更稳定,API也更友好。

使用 Selenium

Selenium 可以自动化一个浏览器(如 Chrome、Firefox),让我们可以像用户一样与网页交互,包括执行 JavaScript。

第 1 步:安装 Selenium 和浏览器驱动

  1. 安装 Selenium 库

    pip install selenium
  2. 下载浏览器驱动: Selenium 需要一个“驱动程序”来控制你的浏览器,这里以 Chrome 为例。

    Python如何获取localStorage数据?-图2
    (图片来源网络,侵删)
    • 确保你已安装 Google Chrome
    • 访问 ChromeDriver 下载页面
    • 下载与你 Chrome 浏览器版本匹配的 chromedriver,如果不确定版本,可以下载最新的稳定版。
    • 将下载的 chromedriver.exe (Windows) 或 chromedriver (macOS/Linux) 放在你的 Python 脚本所在的目录,或者将其添加到系统的环境变量 PATH 中。

第 2 步:编写 Python 脚本

下面的脚本会打开一个网页,等待几秒钟让网页完全加载(包括执行 JS 代码并设置 LocalStorage),然后通过执行 JavaScript 代码来获取所有的 LocalStorage 键值对。

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# --- 1. 设置 WebDriver ---
# 如果你把 chromedriver 放在了脚本同目录下
service = Service(executable_path='chromedriver') 
driver = webdriver.Chrome(service=service)
# 如果你 chromedriver 已经在系统 PATH 中,可以直接使用
# driver = webdriver.Chrome()
# --- 2. 打开目标网页 ---
# 我们以一个可以方便操作 LocalStorage 的测试网页为例
# 你可以替换成任何你想要抓取的网页
url = "https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_storage_local"
driver.get(url)
print("已打开网页,等待页面加载...")
try:
    # --- 3. 切换到 iframe (如果需要) ---
    # W3Schools 的示例在 iframe 中,所以需要先切换过去
    # WebDriverWait 会等待 iframe 可见,避免找不到元素
    wait = WebDriverWait(driver, 10)
    iframe = wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "iframeResult")))
    print("已切换到 iframe")
    # --- 4. 执行 JavaScript 来设置和获取 LocalStorage ---
    # (a) 首先确保页面有 LocalStorage 数据
    #     我们执行一段 JS 代码来设置一些示例数据
    script_to_set_data = """
        localStorage.setItem('username', 'john_doe');
        localStorage.setItem('theme', 'dark_mode');
        localStorage.setItem('last_login', '2025-10-27T10:00:00Z');
        console.log('LocalStorage data has been set.');
    """
    driver.execute_script(script_to_set_data)
    print("已通过 JS 设置 LocalStorage 数据")
    # (b) 获取所有的键
    script_to_get_keys = "return Object.keys(localStorage);"
    keys = driver.execute_script(script_to_get_keys)
    print(f"获取到 LocalStorage 的所有键: {keys}")
    # (c) 获取所有的值
    #     我们可以遍历键来获取每个值
    all_data = {}
    if keys:
        script_to_get_item = "return arguments[0];"
        for key in keys:
            value = driver.execute_script(script_to_get_item, f"localStorage.getItem('{key}')")
            all_data[key] = value
            print(f"键: '{key}', 值: '{value}'")
    print("\n完整的 LocalStorage 数据:")
    print(all_data)
except Exception as e:
    print(f"发生错误: {e}")
finally:
    # --- 5. 关闭浏览器 ---
    print("\n操作完成,关闭浏览器。")
    time.sleep(5) # 等待5秒,方便你查看结果
    driver.quit()

代码解释:

  1. webdriver.Chrome(): 初始化一个 Chrome 浏览器实例。
  2. driver.get(url): 打开指定的 URL。
  3. WebDriverWait: 一个智能等待机制,它会等待某个条件(如元素出现)满足后再继续执行,而不是死等 time.sleep(),这更稳定可靠。
  4. driver.switch_to.frame(): 如果目标网页的内容在 <iframe> 内,必须先切换到该 iframe 的上下文,才能操作其内部的元素或执行 JS。
  5. driver.execute_script(script, ...): 这是核心方法,它允许你在当前浏览器上下文中执行任意 JavaScript 代码。
    • localStorage.setItem('key', 'value'): 设置一个键值对。
    • localStorage.getItem('key'): 根据键获取值。
    • Object.keys(localStorage): 获取所有键的列表。
    • localStorage.clear(): 清空所有数据(慎用!)。
  6. driver.quit(): 关闭浏览器并释放所有资源。非常重要,否则会残留浏览器进程。

使用 Playwright

Playwright 是一个更现代的自动化工具,API 设计更简洁,性能也更好。

第 1 步:安装 Playwright

pip install playwright
playwright install

playwright install 命令会自动下载它支持的浏览器(Chromium, Firefox, WebKit)的驱动程序,非常方便。

第 2 步:编写 Python 脚本

Playwright 的语法非常直观。

Python如何获取localStorage数据?-图3
(图片来源网络,侵删)
import time
from playwright.sync_api import sync_playwright
# --- 1. 启动 Playwright ---
with sync_playwright() as p:
    # --- 2. 启动一个浏览器实例 (这里用 Chromium,即 Chrome 的开源版本) ---
    browser = p.chromium.launch(headless=False) # headless=False 会显示浏览器窗口
    # --- 3. 创建一个新页面 ---
    page = browser.new_page()
    # --- 4. 打开目标网页 ---
    url = "https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_storage_local"
    page.goto(url)
    print("已打开网页,等待页面加载...")
    try:
        # --- 5. 处理 iframe ---
        # Playwright 处理 iframe 更简单
        iframe = page.frame_locator("#iframeResult") # 使用 frame_locator 定位 iframe
        print("已定位到 iframe")
        # --- 6. 执行 JavaScript 来设置和获取 LocalStorage ---
        # (a) 设置数据
        page.evaluate("""
            localStorage.setItem('user_id', '12345');
            localStorage.setItem('session_token', 'abcxyz123');
            console.log('LocalStorage data has been set by Playwright.');
        """)
        print("已通过 JS 设置 LocalStorage 数据")
        # (b) 获取所有键
        keys = page.evaluate("Object.keys(localStorage)")
        print(f"获取到 LocalStorage 的所有键: {keys}")
        # (c) 获取所有值
        all_data = {}
        if keys:
            for key in keys:
                # page.evaluate 可以直接返回 JS 表达式的结果
                value = page.evaluate(f"localStorage.getItem('{key}')")
                all_data[key] = value
                print(f"键: '{key}', 值: '{value}'")
        print("\n完整的 LocalStorage 数据:")
        print(all_data)
    except Exception as e:
        print(f"发生错误: {e}")
    finally:
        # --- 7. 关闭浏览器 ---
        print("\n操作完成,关闭浏览器。")
        time.sleep(5) # 等待5秒,方便查看
        browser.close()

Playwright 代码解释:

  1. with sync_playwright() as p:: 使用上下文管理器,确保 Playwright 进程在结束后被正确清理。
  2. p.chromium.launch(): 启动一个 Chromium 浏览器实例。headless=False 会弹出浏览器窗口,方便调试。
  3. page.frame_locator(): 这是 Playwright 推荐的定位 iframe 的方式,比 Selenium 的 switch_to.frame 更灵活。
  4. page.evaluate(js_code): 这是 Playwright 执行 JavaScript 的方式,它非常强大,可以直接返回 JS 表
分享:
扫描分享到社交APP
上一篇
下一篇