在使用 playwright 自动化测试时,为了保持网站的登录状态,可以通过以下方法实现:
方法 1:保存和加载浏览器上下文的存储状态
playwright 提供了 storagestate 功能,可以保存当前的浏览器存储状态(包括登录的会话信息),并在后续会话中加载。
实现步骤:
登录并保存状态
在第一次运行时,执行登录操作并将状态保存到文件。from playwright.sync_api import sync_playwright def save_login_state(): with sync_playwright() as p: browser = p.chromium.launch(headless=false) context = browser.new_context() page = context.new_page() # 打开登录页面并完成登录 page.goto("https://example.com/login") page.fill("input[name='username']", "your_username") page.fill("input[name='password']", "your_password") page.click("button[type='submit']") # 等待登录完成 page.wait_for_url("https://example.com/dashboard") # 保存登录状态到文件 context.storage_state(path="state.json") browser.close() save_login_state()加载保存的状态
在后续运行中,加载保存的状态文件,避免重复登录。from playwright.sync_api import sync_playwright def use_saved_state(): with sync_playwright() as p: browser = p.chromium.launch(headless=false) # 使用之前保存的存储状态 context = browser.new_context(storage_state="state.json") page = context.new_page() # 直接访问需要登录的页面 page.goto("https://example.com/dashboard") print(page.title()) browser.close() use_saved_state()
方法 2:使用持久化上下文
playwright 支持使用带有持久化存储的浏览器上下文,自动保留登录状态。
实现步骤:
创建持久化上下文
指定一个文件夹来保存浏览器会话数据:from playwright.sync_api import sync_playwright def use_persistent_context(): with sync_playwright() as p: # 创建持久化上下文 user_data_dir = "user_data" browser = p.chromium.launch_persistent_context( user_data_dir, headless=false ) page = browser.new_page() # 打开需要登录的页面 page.goto("https://example.com/login") # 如果首次访问,登录后数据会自动保存到 user_data_dir page.fill("input[name='username']", "your_username") page.fill("input[name='password']", "your_password") page.click("button[type='submit']") page.wait_for_url("https://example.com/dashboard") browser.close() use_persistent_context()后续运行直接加载会话数据
在后续运行中,直接加载同一user_data_dir,会话数据会自动保留:from playwright.sync_api import sync_playwright def use_existing_persistent_context(): with sync_playwright() as p: # 使用之前的持久化上下文 browser = p.chromium.launch_persistent_context( "user_data", headless=false ) page = browser.new_page() # 访问需要登录的页面 page.goto("https://example.com/dashboard") print(page.title()) browser.close() use_existing_persistent_context()
方法 3:使用 cookies 手动保存和加载会话
通过手动保存和加载 cookies 来保持登录状态。
实现步骤:
保存 cookies
from playwright.sync_api import sync_playwright import json def save_cookies(): with sync_playwright() as p: browser = p.chromium.launch(headless=false) context = browser.new_context() page = context.new_page() page.goto("https://example.com/login") page.fill("input[name='username']", "your_username") page.fill("input[name='password']", "your_password") page.click("button[type='submit']") page.wait_for_url("https://example.com/dashboard") # 保存 cookies 到文件 cookies = context.cookies() with open("cookies.json", "w") as f: json.dump(cookies, f) browser.close() save_cookies()加载 cookies
from playwright.sync_api import sync_playwright import json def load_cookies(): with sync_playwright() as p: browser = p.chromium.launch(headless=false) context = browser.new_context() # 加载 cookies with open("cookies.json", "r") as f: cookies = json.load(f) context.add_cookies(cookies) page = context.new_page() page.goto("https://example.com/dashboard") print(page.title()) browser.close() load_cookies()
方法选择
- 方法 1(存储状态):适合短期保留登录状态,并易于分享状态文件。
- 方法 2(持久化上下文):适合长期保留会话(类似普通浏览器),无需额外管理文件。
- 方法 3(cookies 管理):适合需要灵活操作 cookies 的场景。
到此这篇关于playwright保持网站的登录状态的几种方法的文章就介绍到这了,更多相关playwright 登录状态内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论