python爬虫 Playwright 介绍 作者:马育民 • 2026-08-04 11:21 • 阅读:10001 # 介绍 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 全部成熟 ❌ 痛点 1. **浏览器驱动版本强绑定**:Chrome版本升级,chromedriver必须同步更换,极易出现版本不匹配报错 2. 默认不自带浏览器,依赖机器本地已安装浏览器 3. CI、服务器环境经常遭遇缺失依赖、显示驱动问题 #### Playwright ✅ 优点 1. 安装框架时**自动下载配套浏览器二进制包**,独立环境,不依赖本机浏览器 2. 不存在驱动版本冲突,零驱动管理 3. Windows/macOS/Linux 环境一致性极高,“本地能跑服务器翻车”现象大幅减少 ❌ 缺点 1. 放弃 IE 支持,老旧项目无法使用 2. 不支持小众浏览器 ### 等待机制(稳定性最大差距) #### 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 原文出处:http://www.malaoshi.top/show_1GW3neX7o2dX.html