当前位置: 首页 > news >正文

01-Playwright 浏览器与上下文

01-Playwright 浏览器与上下文

Playwright 的核心架构基于三层模型:Browser → Context → Page。理解这三层对于编写稳定、高效的自动化脚本至关重要。


1. 架构层次

Browser (浏览器实例) └── Context (隔离的浏览环境) └── Page (标签页)
层级说明特点
Browser浏览器进程实例开销大,通常复用
Context独立的浏览器会话类似隐身窗口,cookies/storage 完全隔离
Page单个浏览器标签页主要交互对象

2. 支持的浏览器

fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:# Chromium - 最快,最稳定browser=p.chromium.launch()# Firefox - 部分功能有差异browser=p.firefox.launch()# WebKit - Safari 内核browser=p.webkit.launch()

启动速度对比:

  • Chromium: ~800ms(最快)
  • Firefox: ~1200ms
  • WebKit: ~1500ms

3. Browser 启动选项

browser=p.chromium.launch(headless=True,# True=无头模式, False=有头模式slow_mo=100,# 每个操作延迟 100ms(方便观察)args=[# 浏览器启动参数"--disable-dev-shm-usage",# Docker 中常用"--start-maximized",# 最大化窗口],executable_path="/path/to/chrome",# 自定义浏览器路径downloads_path="./downloads",# 下载保存路径timeout=30000,# 启动超时)

4. Context 上下文配置

Context 是 Playwright 最强大的特性之一,每个 Context 拥有独立的 cookies、localStorage 和 session:

context=browser.new_context(# 视口大小viewport={"width":1280,"height":720},# 用户代理user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",# 语言和时区locale="zh-CN",timezone_id="Asia/Shanghai",# 地理位置geolocation={"latitude":31.2304,"longitude":121.4737},permissions=["geolocation"],# 授予权限# 颜色方案color_scheme="dark",# "light" | "dark" | "no-preference"# 安全ignore_https_errors=True,# 忽略 HTTPS 证书错误# 代理proxy={"server":"http://proxy.example.com:8080","username":"user","password":"pass",},# 存储状态(恢复登录态)storage_state="auth.json",# 视频录制record_video_dir="./videos",record_video_size={"width":1280,"height":720},# HAR 网络录制record_har_path="network.har",)

5. Context 隔离示例

# 两个完全隔离的上下文context1=browser.new_context()context2=browser.new_context()page1=context1.new_page()page2=context2.new_page()# page1 登录page1.goto("https://example.com/login")page1.fill("#username","user1")page1.click("#login-btn")# page2 完全不知道 page1 的登录状态# cookies、localStorage 完全独立page2.goto("https://example.com/dashboard")# page2 会重定向到登录页,因为该 context 未登录

6. 资源管理

# 方式 1: with 语句(推荐)withsync_playwright()asp:browser=p.chromium.launch()context=browser.new_context()page=context.new_page()# ... 操作 ...# 自动释放所有资源# 方式 2: 显式关闭browser=p.chromium.launch()try:page=browser.new_page()page.goto("https://example.com")finally:browser.close()# context 和 page 也会被关闭# 方式 3: 分层关闭page=context.new_page()# ... 使用 ...page.close()# 先关 pagecontext.close()# 再关 contextbrowser.close()# 最后关 browser

7. 存储状态(认证复用)

# 保存登录状态context1=browser.new_context()page1=context1.new_page()page1.goto("https://example.com/login")page1.fill("#username","admin")page1.fill("#password","secret")page1.click("#login-btn")page1.wait_for_url("**/dashboard")# 保存到文件context1.storage_state(path="auth.json")# 后续测试直接复用context2=browser.new_context(storage_state="auth.json")page2=context2.new_page()page2.goto("https://example.com/dashboard")# page2 已处于登录状态!

8. 最佳实践

  1. 复用 Browser:Browser 启动开销大,在测试套件中复用
  2. 每测试一个 Context:利用 Context 隔离确保测试独立
  3. 使用 with 语句:自动清理资源,避免内存泄漏
  4. storage_state 复用认证:避免每次测试重复登录
  5. 选择合适的浏览器:CI 中用 Chromium(最快),兼容性测试用多种浏览器

常用 API 速查

API说明
p.chromium.launch()启动 Chromium
p.firefox.launch()启动 Firefox
p.webkit.launch()启动 WebKit
browser.new_context()创建隔离上下文
context.new_page()创建新标签页
context.storage_state()保存/导出存储状态
browser.close()关闭浏览器
context.close()关闭上下文
page.close()关闭标签页
http://www.rkmt.cn/news/1450869.html

相关文章:

  • 手把手解决Python 4大高频报错!新手90%都踩过
  • 避坑指南:在Ubuntu 20.04上从零搭建DAVE与UUV_Simulator水下仿真环境(含CUDA配置与常见报错解决)
  • 深入Linux内核:Livepatch如何实现函数“热替换”而不宕机?
  • 从CANoe到实车:UDS Flash刷写全流程自动化测试搭建指南(Python/ CAPL脚本)
  • 计算机毕业设计之资讯求真平台的设计与实现
  • 从MySQL分库分表到OceanBase分区:实战迁移中的那些坑与最佳实践
  • 训练1个电影级AI视频模型要多少算力?独家披露Netflix/腾讯影业联合实验室的3.7PB数据集构建逻辑与轻量化部署路径
  • 白盒测试——动态测试——逻辑覆盖法
  • 5分钟告别混乱:用Ice重新定义你的macOS菜单栏体验
  • 别再手动调参数了!用UE5材质函数快速搞定下雨积水效果(附完整材质蓝图)
  • MIPI I3C从设备Verilog实现方案:高性能嵌入式通信架构解析
  • 全光网与PON网络区别对比分析
  • 从实验设计到结果解读:RNA-seq数据归一化(RPKM/TPM)的常见误区与避坑指南
  • 2026年q2郑州优质专科学校选型推荐:郑州工业应用技术学院怎么样/郑州民办大学有那些/实测维度解析 - 优质品牌商家
  • MMD分裂准则在分布随机森林中的原理与应用
  • IAR环境下HT1621B驱动笔段式LCD的可烧录工程包(含调试脚本与硬件验证)
  • 2026年阿里云OpenClaw/Hermes Agent配置Token Plan安装建议收藏
  • 从文本到架构:vscode-plantuml如何重构开发者的UML工作流
  • 民俗活动记录正面临淘汰危机:Sora 2上线后,3类传统工作流已失效(附迁移 checklist)
  • ComfyUI-VideoHelperSuite视频处理模块零除错误深度解析与技术方案
  • 2026年浙江正规钻井服务评测:四家企业核心维度对比 - 优质品牌商家
  • 5分钟掌握微信好友检测:快速发现谁删除了你
  • ## 南山罗湖福田龙华宝安装修必看:ENF定制套餐挑选的核心判断标准 - 产品测评官
  • 亚马逊卖家必看:为什么说AI商品套图正在淘汰传统海外商拍?
  • FPGA加速Mamba推理:SpecMamba方案与优化实践
  • Windows 10/11下保姆级教程:用QEMU 8.2.0跑通OpenHarmony 4.1(ARM Cortex-M4版)
  • 微软更新、360广告与火绒误杀:一场导致Win10黑屏的‘三角债’技术复盘
  • 免费网盘直链解析工具:九大平台高速下载完整指南
  • AI Agent:LLM驱动的智能助手如何改变任务执行方式?
  • USCIS新政后,B1/B2签证入境还能递交美国I-485身份调整吗?