使用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
相关产品推荐
相关产品推荐

