前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python+playwright 学习-89 cookies的获取保存删除相关操作

python+playwright 学习-89 cookies的获取保存删除相关操作

作者头像
上海-悠悠
发布2024-05-29 18:38:56
2470
发布2024-05-29 18:38:56
举报

前言

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

获取cookies 相关操作

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

代码语言:javascript
复制
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()}")

运行结果

代码语言:javascript
复制
登录前,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() 获取的格式一致

代码语言:javascript
复制
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 和本地存储。

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

代码语言:javascript
复制
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

代码语言:javascript
复制
# 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的筛选器。

代码语言:javascript
复制
# 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")
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 获取cookies 相关操作
  • add_cookies 添加cookies
  • storageState保存登录cookies
  • 清空 clear_cookies()
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档