playwright可以获取浏览器缓存的cookie信息,可以将这些cookies信息保存到本地,还可以加载本地cookies。

获取cookies 相关操作

在登录前和登录后分别打印 cookies 信息,对比查看是否获取成功。

from playwright.sync_api import sync_playwright


with sync_playwright() as p:

browser = p.chromium.launch(headless=False)

context = browser.new_context()

page = context.new_page()


print(f"登录前,cookies为空:{context.cookies()}")

page.goto('http://127.0.0.1:8200/users/login/')

page.locator('#username').fill('test@qq.com')

page.locator('#password_l').fill('123456')

page.get_by_text('立即登录').click()


page.wait_for_load_state('networkidle')


# 获取cookies

print(f"登录后,cookies:{context.cookies()}")

运行结果

登录前,cookies为空:[]

登录后,cookies:[

{

'name': 'csrftoken',

'value': 'jLpzcaH8RiG8VstuqAXGL5wWq3nycAhtxb2e9yTPKhJBk1FxHFBwpbeD0p6C4DSM',

'domain': '127.0.0.1',

'path': '/',

'expires': 1747969603.971844,

'httpOnly': False,

'secure': False, 'sameSite': 'Lax'

}, {

'name': 'sessionid',

'value': 'jd49av5t88d0eulmxvy0ig15vtexaort',

'domain': '127.0.0.1', 'path': '/',

'expires': 1717729603.972194,

'httpOnly': True,

'secure': False,

'sameSite': 'Lax'

}

]

add_cookies 添加cookies

context.add_cookies() 可以添加 cookies,cookies的格式与 context.cookies() 获取的格式一致

from playwright.sync_api import sync_playwright


with sync_playwright() as p:

browser = p.chromium.launch(headless=False)

context = browser.new_context()

page = context.new_page()


cookies = [

{'name': 'csrftoken',

'value': 'jLpzcaH8RiG8VstuqAXGL5wWq3nycAhtxb2e9yTPKhJBk1FxHFBwpbeD0p6C4DSM',

'domain': '127.0.0.1',

'path': '/',

'expires': 1747969603.971844,

'httpOnly': False,

'secure': False,

'sameSite': 'Lax'

}, {

'name': 'sessionid',

'value': 'jd49av5t88d0eulmxvy0ig15vtexaort',

'domain': '127.0.0.1',

'path': '/',

'expires': 1717729603.972194,

'httpOnly': True,

'secure': False,

'sameSite': 'Lax'

}

]

context.add_cookies(cookies)

print(f"添加后,查看cookies:{context.cookies()}")


# 访问页面,验证是否成功

page.goto('http://127.0.0.1:8200/users/userinfo/')

添加cookies的格式与前面context.cookies() 获取cookies的格式是一致的。

storageState保存登录cookies

Playwright 提供了一种在测试中重用登录状态的方法。这样您就可以只登录一次,然后跳过所有测试的登录步骤。
Web 应用程序使用基于 cookie 或基于令牌的身份验证,其中经过身份验证的状态存储为cookie或本地存储。Playwright 提供browserContext.storageState([options])方法,可用于从经过身份验证的上下文中检索存储状态,然后创建具有预填充状态的新上下文。
Cookie 和本地存储状态可以跨不同的浏览器使用。它们取决于您的应用程序的身份验证模型:某些应用程序可能需要 cookie 和本地存储。

以下代码片段从经过身份验证的上下文中检索状态,并使用该状态创建一个新上下文。

from playwright.sync_api import Playwright, sync_playwright, expect

# 上海悠悠 wx:283340479

# blog:https://www.cnblogs.com/yoyoketang/


def run(playwright: Playwright) -> None:

browser = playwright.chromium.launch(headless=False)

context = browser.new_context()

page = context.new_page()

page.goto('https://github.com/login')


# Interact with login form

page.get_by_label("Username or email address").fill("yoyo")

page.get_by_label("Password").fill("*********")

page.get_by_role("button", name="Sign in").click()

# Continue with the test


# 保存storage state 到指定的文件

storage = context.storage_state(path="auth/state.json")


# ---------------------

context.close()

browser.close()


with sync_playwright() as playwright:

run(playwright)

图片

于是在本地会保存一个state.json文件

这样在其它地方就可以使用本地的cookies

# Create a new context with the saved storage state.context = browser.new_context(storage_state="state.json")

需注意的是context.storage_state()保存的cookies格式和 context.cookies() 获取的cookies格式是不一样的。
所以加载本地的cookies格式不能直接保存context.cookies() 获取的cookies。

清空 clear_cookies()

1.43 版本后,browser_context.clear_cookies()支持仅删除某些cookie的筛选器。

# Clear all cookies.context.clear_cookies()# New: clear cookies with a particular name.context.clear_cookies(name="session-id")# New: clear cookies for a particular domain.context.clear_cookies(domain="my-origin.com")

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐