文章目录
-
- [一、Playwright 是什么?能解决什么问题](#一、Playwright 是什么?能解决什么问题)
- [二、Playwright 基本使用方法(Python)](#二、Playwright 基本使用方法(Python))
-
- [1. 安装与初始化](#1. 安装与初始化)
- [2. 最小可运行示例](#2. 最小可运行示例)
- [3. 核心概念说明](#3. 核心概念说明)
- [4. 元素定位与操作](#4. 元素定位与操作)
- [5. 等待机制(稳定性的关键)](#5. 等待机制(稳定性的关键))
- [6. 文件下载 / 上传](#6. 文件下载 / 上传)
- [7. 登录态复用(生产级必备)](#7. 登录态复用(生产级必备))
- [8. 网络拦截与接口感知(Playwright 的核心优势)](#8. 网络拦截与接口感知(Playwright 的核心优势))
- [三、Playwright 的常见使用场景总结](#三、Playwright 的常见使用场景总结)
-
- [场景 1:后台系统自动操作](#场景 1:后台系统自动操作)
- [场景 2:SPA 页面数据采集](#场景 2:SPA 页面数据采集)
- [场景 3:系统巡检与告警](#场景 3:系统巡检与告警)
- [场景 4:自动化测试(UI / E2E)](#场景 4:自动化测试(UI / E2E))
- [四、Playwright 与 Selenium 的使用场景对比](#四、Playwright 与 Selenium 的使用场景对比)
-
- [1. 相同点](#1. 相同点)
- [2. 核心差异对比](#2. 核心差异对比)
- [3. 使用场景选择建议](#3. 使用场景选择建议)
-
- [更适合 Playwright 的场景](#更适合 Playwright 的场景)
- [更适合 Selenium 的场景](#更适合 Selenium 的场景)
- 五、优缺点总结
-
- [Playwright 优点](#Playwright 优点)
- [Playwright 不足](#Playwright 不足)
- 六、结语
随着前端技术的发展,越来越多的系统变成了 SPA(前后端分离)应用,传统浏览器自动化在稳定性、等待机制、接口感知能力 等方面逐渐暴露短板。
Playwright 作为新一代浏览器自动化框架,正在被越来越多团队用于 自动化测试、数据采集、运维脚本、系统巡检 等场景。
本文将从实战角度出发,重点介绍:
- Playwright 的使用方法与常见使用场景
- Playwright 与 Selenium 的使用场景对比及优缺点分析
一、Playwright 是什么?能解决什么问题
Playwright 是由 Microsoft 推出的现代化浏览器自动化框架,支持使用代码控制真实浏览器完成用户操作。
它的核心定位不是"替代 Selenium",而是:
- 在 现代 Web 场景(SPA、复杂交互、接口驱动页面) 下,提供更稳定、更易用的自动化能力
典型适用场景
- UI / E2E 自动化测试
- 需要登录、JS 渲染的页面采集
- 后台系统自动化运维(导报表、批量操作)
- 页面可用性巡检(健康检查)
- 自动生成截图 / PDF / 留痕材料
二、Playwright 基本使用方法(Python)
1. 安装与初始化
bash
pip install playwright
python -m playwright install
playwright install用于下载 Playwright 自带的浏览器运行时,这是很多新手最容易忽略的一步。
2. 最小可运行示例
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
context = browser.new_context()
page = context.new_page()
page.goto("https://example.com", wait_until="domcontentloaded")
page.screenshot(path="example.png", full_page=True)
browser.close()
3. 核心概念说明
| 概念 | 说明 |
|---|---|
| Browser | 浏览器实例 |
| Context | 浏览器上下文(类似独立无痕窗口,Cookie 隔离) |
| Page | 标签页 |
推荐做法 :
始终使用 Browser → Context → Page 结构,便于多账号隔离和工程扩展。
4. 元素定位与操作
Playwright 主推 Locator 机制,自带自动等待能力。
python
page.get_by_role("button", name="登录").click()
page.get_by_placeholder("请输入账号").fill("admin")
常用定位方式优先级建议:
- role / label / placeholder(最稳)
- text
- css
- xpath(兜底)
5. 等待机制(稳定性的关键)
页面加载等待
python
page.goto(url, wait_until="networkidle")
等元素出现
python
page.locator(".user-info").wait_for(state="visible")
等接口返回(非常重要)
python
with page.expect_response(lambda r: "api/list" in r.url and r.status == 200):
page.get_by_role("button", name="查询").click()
Playwright 的稳定性很大一部分来自于"等条件,而不是 sleep"。
6. 文件下载 / 上传
python
with page.expect_download() as d:
page.get_by_role("button", name="导出").click()
d.value.save_as("result.xlsx")
7. 登录态复用(生产级必备)
python
# 首次登录后保存
context.storage_state(path="state.json")
# 后续直接复用
context = browser.new_context(storage_state="state.json")
非常适合:
- 定时任务
- 运维脚本
- 报表系统
8. 网络拦截与接口感知(Playwright 的核心优势)
python
def handle(route, request):
if "api/user/info" in request.url:
route.fulfill(
status=200,
content_type="application/json",
body='{"name": "mock_user"}'
)
else:
route.continue_()
page.route("**/*", handle)
可用于:
- 自动化测试 mock 数据
- 加速页面加载
- 精准获取接口 JSON(替代 DOM 解析)
三、Playwright 的常见使用场景总结
场景 1:后台系统自动操作
- 登录 → 查询 → 导出 → 保存
- 极适合报表、运营系统、BI 平台
场景 2:SPA 页面数据采集
- 直接监听接口返回 JSON
- 不再依赖脆弱的 DOM 结构
场景 3:系统巡检与告警
- 页面打不开 / 元素缺失即告警
- 截图 + trace 留痕
场景 4:自动化测试(UI / E2E)
- 自动等待 + 网络拦截
- 更适合现代前端架构
四、Playwright 与 Selenium 的使用场景对比
1. 相同点
- 都能控制真实浏览器
- 都支持多语言
- 都能用于自动化测试与脚本任务
- 都支持无头/有头模式
2. 核心差异对比
| 维度 | Playwright | Selenium |
|---|---|---|
| 浏览器依赖 | 自带并管理浏览器 | 依赖系统浏览器 + driver |
| 等待机制 | 自动等待(默认) | 需手写等待 |
| 稳定性 | 高 | 依赖工程经验 |
| 网络拦截 | 原生支持 | 原生较弱 |
| SPA 适配 | 非常友好 | 容易不稳定 |
| 多账号隔离 | Context 原生支持 | 需多开浏览器 |
| 调试能力 | Trace / 录像 | 相对较弱 |
| 生态成熟度 | 新但完善 | 非常成熟 |
3. 使用场景选择建议
更适合 Playwright 的场景
- 前后端分离 / SPA 项目
- 多账号并发任务
- 自动化采集接口数据
- 追求稳定、低维护成本
- CI/CD 自动化测试
更适合 Selenium 的场景
- 公司已有大量 Selenium 存量
- 传统 Web 系统
- 团队对 Selenium 非常熟悉
- 依赖某些特殊浏览器生态
五、优缺点总结
Playwright 优点
- 自动等待,脚本更稳
- 网络拦截能力强
- 多 Context 设计非常适合生产任务
- 工程化能力强(trace、录像、mock)
Playwright 不足
- 相对较新,中文资料少于 Selenium
- WebKit ≠ 完全等同真实 Safari
- 对老系统支持不如 Selenium 广泛
六、结语
Selenium 是"经典且稳健的老将",Playwright 是"为现代 Web 而生的新一代工具"。
如果你的系统是:
- SPA / Vue / React / 前后端分离
- 需要接口级感知
- 需要高稳定性、低维护成本
👉 优先选择 Playwright
如果你所在团队:
- 已有成熟 Selenium 体系
- 或对 Selenium 有强工程积累
👉 继续使用 Selenium 也是合理选择