当前位置: 首页 > 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.jsqmd.com/news/939467/

相关文章:

  • AI 中转站关停风波:灰色生意背后藏法律风险,合规出口待开启
  • 手把手解决Python 4大高频报错!新手90%都踩过
  • 华为交换机LACP配置避坑指南:eNSP实验里那些容易忽略的细节(接口优先级、抢占延迟实战解析)
  • 避坑指南:在Ubuntu 20.04上从零搭建DAVE与UUV_Simulator水下仿真环境(含CUDA配置与常见报错解决)
  • OpenCV C++圆检测增强模块:多圆稳定识别+抗干扰优化
  • 深入Linux内核:Livepatch如何实现函数“热替换”而不宕机?
  • 从CANoe到实车:UDS Flash刷写全流程自动化测试搭建指南(Python/ CAPL脚本)
  • 如何精准下载GitHub文件和目录:DownGit完整解决方案
  • 计算机毕业设计之资讯求真平台的设计与实现
  • MySQL索引优化宝典:10个案例教你分析慢SQL,让查询速度提升100倍
  • 从MySQL分库分表到OceanBase分区:实战迁移中的那些坑与最佳实践
  • 深度解析开源项目:京东智能评价自动化解决方案完全指南
  • bug描述规范
  • 训练1个电影级AI视频模型要多少算力?独家披露Netflix/腾讯影业联合实验室的3.7PB数据集构建逻辑与轻量化部署路径
  • 白盒测试——动态测试——逻辑覆盖法
  • ChatGPT Windows客户端下载与技术架构深度解析(Electron+Vite+React)
  • 5分钟告别混乱:用Ice重新定义你的macOS菜单栏体验
  • GBase 8c逻辑解码解析
  • ai-agent 响应速度优化
  • ImageJ:开源科学图像分析的完整解决方案
  • 别再只盯着Gini和OOB了:用Python的sklearn实战对比随机森林特征重要性(附完整代码)
  • 从DeLong检验的数学原理到Python复现:一篇搞懂AUC显著性检验的底层逻辑(附完整代码)
  • 维修公司用什么工单系统比较好?2026年真实对比亲测好用
  • 2026年MRAM芯片价格分析,本土厂的优势在哪? - mypinpai
  • 别再手动调参数了!用UE5材质函数快速搞定下雨积水效果(附完整材质蓝图)
  • 用Python和PyTorch实战MADQN:在Switch4游戏里教会4个AI协作通关
  • 超越简单分类:用东南大学齿轮箱数据集实战故障严重度评估与迁移学习
  • 用Python从零实现混沌博弈算法(CGO):一个骰子如何帮你优化参数?
  • 作物生长模拟全流程研究:基于WOFOST与PCSE模型的理论、实操与应用对比
  • ASIC压缩加速器技术解析与存储优化实践