python爬虫 Playwright 介绍

介绍

Playwright 是微软开源的跨浏览器自动化测试与网页爬虫工具库,核心目标:统一一套 API,驱动 Chrome、Firefox、Safari(WebKit)三大浏览器内核,实现网页自动化。
诞生背景:团队来自 Puppeteer 核心开发人员,吸取 Puppeteer 仅支持 Chromium 的短板,打造跨浏览器方案,2020 年正式开源。
支持语言:Python、JavaScript/TypeScript、Java、.NET,多语言绑定,底层共用同一套引擎。

区分两个容易混淆名词

  1. Playwright Library:底层自动化库(用来写爬虫、自定义自动化脚本)
  2. Playwright Test:基于库封装的端到端测试框架,面向前端 E2E 测试,内置断言、测试运行器、并行执行(日常开发大家使用最多)

底层原理

  1. 不基于浏览器原生 WebDriver(Selenium 方案)
    Selenium 通过标准 W3C WebDriver 协议,浏览器启动额外服务,通信延迟高、兼容性问题多。
    Playwright 使用 Chrome DevTools Protocol (CDP) + WebKit/Firefox 自研协议,直接和浏览器内核通信;浏览器不需要开启远程服务,控制深度更强。

  2. 自带浏览器二进制包
    安装时自动下载对应版本 Chromium、Firefox、WebKit,不需要用户本地提前安装浏览器,环境一致性极强,避免“本地能跑服务器报错”。

  3. 隔离上下文模型
    核心设计概念:
    Browser(浏览器进程)→ BrowserContext(浏览器上下文,相当于独立无痕窗口)→ Page(标签页)
    一个 BrowserContext 完全隔离:Cookie、本地存储、缓存、网络状态互不干扰。
    可以在同一个浏览器进程快速创建上千个隔离会话,资源开销远低于启动多个浏览器进程。

能力特性

1. 跨浏览器、跨平台

  • 三大内核:Chromium、Mozilla Firefox、WebKit(Safari 内核),一套脚本无需修改即可在三类浏览器运行
  • 跨操作系统:Windows / MacOS / Linux;支持 headless(无头无界面)、有界面模式
  • 支持模拟移动端设备:直接模拟 iPhone、安卓手机,自动配置视口、触摸事件、UA、设备像素比,无需手动配置

2. 强大等待机制(最大优势之一,区别于 Selenium)

绝大多数自动化工具需要手动写等待延时 sleep,极其不稳定。
Playwright 默认自动智能等待:
执行点击、输入、获取元素等操作前,自动等待元素满足条件:元素存在、可见、可交互、没有被遮挡。
只有超出超时时间才抛出异常,大幅减少人为硬编码等待,脚本稳定性显著提升。

3. 网络层面控制能力

  • 拦截、修改、伪造 HTTP/HTTPS 请求与响应
  • 模拟网络限速、断网、弱网环境
  • 捕获请求、响应、接口日志,支持抓包导出 HAR 文件
  • 支持模拟认证:代理、Basic Auth、Cookie、Token 注入
  • 支持路由转发、屏蔽广告、屏蔽无用资源(图片、字体)提升速度

4. 页面操作能力

  • 支持鼠标精细操作:悬浮、拖拽、右键、双击、滚轮滑动
  • 原生支持触摸手势,适配移动端网页
  • 文件上传、文件下载自动化,无需操作系统弹窗交互
  • 处理弹窗、对话框、表单、iframe、Shadow DOM(很多自动化工具很难穿透 shadow-dom,Playwright原生支持)
  • 支持执行页面 JS,获取页面变量

5. 录制、追踪与调试工具

  • Trace Viewer(王牌功能):运行时录制完整追踪包,包含页面快照、网络请求、DOM、操作时序、控制台日志。出现报错后,可以像视频一样回放每一步,定位失败原因。
  • 自带脚本录制工具:人工操作浏览器,自动生成自动化脚本模板
  • 截图、全屏截图、录屏、元素截图
  • 捕获浏览器控制台报错、页面异常

6. 身份会话管理

依靠 BrowserContext 实现快速复用登录状态:
登录一次后,可以保存上下文状态(Cookie、LocalStorage),后续新建页面直接免登录,不用重复走登录流程,非常适合爬虫与测试。

Playwright Library vs Playwright Test 区别

  1. Playwright Library(基础库)
    通用自动化库,自由度极高。
    ✅ 适用:网页爬虫、自定义自动化工具、批量操作网页、数据采集
    ❌ 没有测试套件、没有断言、没有自动重试、没有并行管理,需要自己封装

  2. Playwright Test(E2E测试框架)
    在 Library 之上封装的完整测试框架,前端主流 E2E 方案。
    ✅ 内置测试运行器、自动并行、测试隔离、断言、重试、测试报告、快照测试
    ✅ 适用:Web项目端到端功能测试(模拟真实用户操作验证系统)

适用场景

  1. Web端端到端自动化测试(最主流)
    模拟真实用户操作:登录、表单提交、页面跳转、流程校验,替代人工重复回归测试。

  2. 轻量级网页数据爬虫
    渲染JS动态页面(SPA Vue/React网站),解决requests无法获取异步渲染内容的痛点;相比Selenium资源占用更低。

    注意:仅用于合法公开数据采集,遵守网站robots协议与法律法规

  3. 批量网页自动化任务
    批量填报表单、批量导出页面数据、自动生成网页截图、批量生成PDF。

  4. 网页兼容性自动化验证
    同一套脚本,快速验证功能在Chrome/Firefox/Safari、移动端页面是否正常。

  5. UI自动化回归、视觉快照测试
    对比页面截图,检测页面UI意外变动。

优势

  1. 稳定性强:智能自动等待,极大降低脚本随机性报错
  2. 环境省心:自带浏览器二进制,无需环境配置,CI/服务器部署友好
  3. API统一简洁,跨浏览器一套代码,学习成本低
  4. 隔离机制优秀,上下文轻量化,支持大规模并发
  5. 调试工具强大(Trace追踪),线上测试报错方便排查
  6. 持续更新活跃,微软长期维护,社区成熟

局限性、短板

  1. 不支持 IE 等老旧浏览器,仅现代三大浏览器内核
  2. 不能驱动桌面客户端软件(只针对网页,区别于AutoIt、PyAutoGUI)
  3. Headless模式下少量网站会识别自动化特征,存在反爬检测风险(所有浏览器自动化工具共同问题)
  4. 如果只需要简单静态网页抓取,相比 requests/axios 更重,资源消耗更高
  5. 移动端仅能模拟浏览器,无法驱动真实App(App自动化需要 Appium)

运行模式说明

  1. Headless 无头模式:不弹出浏览器窗口,后台运行。适合服务器、定时任务、CI流水线,占用资源更低。新版默认无头实现性能大幅优化。
  2. Headful 有界面模式:弹出浏览器窗口,适合开发调试、观察执行流程。

与 Selenium 对比

底层通信机制(最核心分水岭)

Selenium

遵循 W3C WebDriver 标准协议

  1. 架构:脚本 → HTTP 请求 → WebDriver 驱动(chromedriver/geckodriver)→ 浏览器
  2. 浏览器与脚本之间依靠独立驱动进程中转,多层转发,存在额外延迟
  3. 协议通用:任何实现 WebDriver 规范的浏览器都能接入(Chrome、Firefox、Safari、Edge、IE)
  4. 缺点:协议设计偏通用,无法调用浏览器大量私有高级能力,控制力受限

Playwright

微软自研,不基于 WebDriver

  • Chromium 使用 CDP(Chrome DevTools Protocol);Firefox、WebKit 使用官方专属内部协议
  • 脚本直接与浏览器内核通信,不需要额外驱动程序,省去 chromedriver 版本匹配难题
  • 可以深度操控浏览器内部行为(拦截网络、修改响应、穿透ShadowDOM等)

    局限:只支持现代三大内核:Chromium、Firefox、WebKit;不支持 IE

环境部署与兼容性

Selenium

✅ 优点

  1. 支持 IE、老旧浏览器,政企遗留系统兼容首选
  2. 语言生态极完善:Java/Python/JS/C#/Ruby/Kotlin 全部成熟
    ❌ 痛点
  3. 浏览器驱动版本强绑定:Chrome版本升级,chromedriver必须同步更换,极易出现版本不匹配报错
  4. 默认不自带浏览器,依赖机器本地已安装浏览器
  5. CI、服务器环境经常遭遇缺失依赖、显示驱动问题

Playwright

✅ 优点

  1. 安装框架时自动下载配套浏览器二进制包,独立环境,不依赖本机浏览器
  2. 不存在驱动版本冲突,零驱动管理
  3. Windows/macOS/Linux 环境一致性极高,“本地能跑服务器翻车”现象大幅减少
    ❌ 缺点
  4. 放弃 IE 支持,老旧项目无法使用
  5. 不支持小众浏览器

等待机制(稳定性最大差距)

Selenium

  • 没有内置智能等待,只有两种方案:

    1. 硬休眠 sleep():极其不稳定,网络波动直接失败
    2. 手动编写显式等待 WebDriverWait,需要开发者自己判断元素条件
  • 执行点击、输入前,不会自动校验元素是否可见、可点击、是否被遮挡;极易出现偶发“元素不可交互”报错

Playwright

原生自动智能等待(核心优势)
调用 click、fill、select 等操作前,框架自动等待:
元素存在 → 可见 → 启用 → 无遮挡,满足全部条件才执行操作;超时才抛出异常。
绝大多数场景不需要手写等待代码,脚本随机失败率远低于 Selenium。

会话隔离、并发能力

Selenium

  • 典型模式:每启动一个浏览器实例 = 独立进程
  • 如果需要多账号隔离,通常启动多个浏览器,内存开销大
  • 可以通过无痕窗口实现隔离,但API繁琐,隔离完整性一般(缓存、部分数据共享)

Playwright

分层模型:Browser进程 → BrowserContext → Page标签页

  • BrowserContext = 轻量化独立会话(独立无痕环境)
    同一个浏览器进程可以创建数十上百个隔离上下文,Cookie、Storage、缓存完全隔离。
  • 多账号、多用户并发场景,内存占用远低于 Selenium。

网络控制能力

Selenium

原生能力薄弱:

  1. 标准WebDriver只能简单拦截请求;想要修改响应、伪造接口、屏蔽资源,需要额外搭建代理(BrowserMob Proxy)
  2. 捕获HAR抓包、弱网模拟实现复杂,需要大量第三方组件

Playwright

原生内置网络拦截器:

  • 直接拦截、修改请求体、篡改返回响应、屏蔽图片/JS、模拟弱网限速
  • 一键导出HAR日志,无需额外代理工具;爬虫、接口mock场景非常方便

Shadow DOM、Iframe、弹窗处理

Selenium

原生查找元素无法穿透 Shadow DOM,需要复杂JS脚本辅助;
iframe 需要手动切换frame上下文,多层iframe嵌套代码冗长。

Playwright

选择器原生支持穿透 Shadow DOM,内置iframe自动定位;
各类弹窗、文件上传、下载API原生封装,不需要hack方案。

调试工具

Selenium

基础能力:截图。
高级调试需要自行封装日志、录屏;没有官方一体化追踪工具,排查间歇性Bug难度高。

Playwright

王牌功能 Trace Viewer
运行时录制完整回放文件:页面DOM、网络请求、控制台日志、每一步操作时序、截图。出现报错可以像视频一样逐帧回放定位问题。
同时内置录屏、元素截图、控制台捕获等能力。

无头模式(服务器后台运行)

Selenium

传统无头模式兼容性参差不齐,部分网站可以识别;配置参数繁琐。

Playwright

新一代无头模式性能更好,配置极简;同时支持传统无头模式兼容特殊站点。

生态与定位

Selenium

  • 诞生更早,行业元老;标准WebDriver方案
  • 两大场景占优:遗留系统自动化、需要兼容IE浏览器、大型传统企业成熟测试平台
  • 通用自动化标准,大量第三方测试平台、低代码工具底层基于Selenium

Playwright

微软2020年后推出,面向现代Web(SPA、Vue/React前端)

两大核心场景:

  1. Web端E2E自动化测试(Playwright Test)
  2. JS渲染页面爬虫、网页自动化任务
    更适配现代化前后端分离项目

反爬层面客观对比

两者都属于浏览器自动化,都有可能被网站识别,不存在绝对不会被检测的工具:

  • Selenium特征非常典型,各大网站风控系统识别方案成熟
  • Playwright新版默认特征相对更少,但高防护站点(Cloudflare、大型电商)依旧可以识别;都需要额外指纹优化

优缺点汇总简表

维度 Selenium Playwright
通信协议 W3C WebDriver,独立驱动进程 CDP/浏览器私有协议,无额外驱动
浏览器支持 Chrome/Firefox/Safari/Edge/IE Chromium/Firefox/WebKit(无IE)
等待策略 需手动编写等待,容易不稳定 内置智能自动等待,稳定性更高
环境管理 需要手动匹配驱动版本 自带浏览器二进制,无需驱动
会话隔离 多浏览器进程,资源开销高 轻量化BrowserContext,并发友好
网络操作 依赖外部代理实现拦截 原生支持请求拦截、修改响应
ShadowDOM 原生不支持 原生支持穿透查询
调试工具 仅基础截图,无官方追踪回放 Trace完整录制回放,调试体验优秀
上手门槛 基础API简单,稳定脚本封装成本高 API设计统一,写出稳定脚本更容易

选型建议(重点)

✅ 优先选择 Selenium

  1. 项目需要兼容 IE、老旧浏览器
  2. 公司现有自动化平台、测试系统底层基于WebDriver,不能重构
  3. 团队有大量成熟Selenium脚本资产,迁移成本极高

✅ 优先选择 Playwright

  1. 现代Web项目(Vue/React SPA)E2E测试
  2. 动态渲染网页爬虫、批量网页自动化
  3. 需要多账号并发隔离、服务器CI持续集成
  4. 不想处理浏览器驱动版本冲突问题
  5. 追求脚本稳定性,减少随机报错
  6. 需要频繁拦截网络、Mock接口、定位偶现BUG

原文出处:/show_1GW3neX7o2dX.html