You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Playwright保存登录状态报错:NameError: name 'context' is not defined

问题分析与解决办法

你的代码存在两个核心问题,直接导致了NameError:

错误点1:变量定义顺序颠倒

你在代码开头就调用page = context.new_page(),但此时context还没有被创建和赋值,Python自然找不到这个变量,抛出NameError。

错误点2:存储状态保存逻辑错误

你在登录完成后才创建新上下文,再尝试保存状态,这完全不符合Playwright保存登录状态的逻辑——应该先创建上下文,用这个上下文打开页面完成登录,再从该上下文导出存储状态。


修正后的代码

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 1. 启动浏览器
    browser = p.chromium.launch(headless=False, slow_mo=50)
    # 2. 创建浏览器上下文(这一步必须在创建页面之前)
    context = browser.new_context()
    # 3. 从上下文创建页面
    page = context.new_page()
    
    # 4. 执行登录操作
    page.fill("input#input-username", "demo")
    page.fill("input#input-password", "demo")
    page.click("button[type=submit]")
    
    # 5. 登录成功后,从当前上下文保存存储状态到文件
    context.storage_state(path="website1.json")
    
    # 如果需要复用登录状态,后续可以这样创建上下文:
    # reuse_context = browser.new_context(storage_state="website1.json")
    # reuse_page = reuse_context.new_page()

关键逻辑说明

  • 必须先通过browser.new_context()创建上下文,再用上下文创建页面,确保页面属于该上下文。
  • 登录操作完成后,调用context.storage_state()将当前上下文的Cookie、LocalStorage等登录状态写入指定文件。
  • 后续复用状态时,只需在创建新上下文时传入storage_state="website1.json",新上下文就会带有已登录的状态。

内容的提问来源于stack exchange,提问作者Jack9992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:10:26