易君召
发布于 2026-08-17 / 作者:易君召 / 1 阅读
0

Playwright vs Selenium 核心区别

两者都是 Web 自动化测试工具,Selenium 老牌成熟,Playwright 微软后起之秀,底层都操作浏览器,但架构、能力、使用体验差异很大。

1. 底层架构

Selenium

  • 遵循 WebDriver W3C 标准,中间需要浏览器驱动:ChromeDriver / GeckoDriver / EdgeDriver

  • 工作流程:脚本 → Selenium 库 → 驱动程序 → 浏览器

  • 驱动和浏览器版本必须匹配,版本不匹配就报错,这是高频坑。

  • 多浏览器是各自独立驱动,API 虽然统一,但各浏览器行为存在差异。

Playwright

  • 微软自研,不使用 WebDriver,浏览器内置调试协议(Chrome DevTools Protocol CDP)

  • 脚本直接通过 CDP 协议和浏览器通信,不需要单独下载驱动,安装 playwright 会自动下载对应浏览器二进制包。

  • 同一套 API,Chrome、Firefox、WebKit(Safari 内核)行为高度统一。

重点:Selenium 操作浏览器是外部模拟用户行为;Playwright 直接调用浏览器内部接口,能力更强。

2. 核心能力对比表

对比项

Selenium

Playwright

驱动管理

手动 / 第三方管理驱动,版本容易冲突

内置浏览器,无需额外驱动

等待机制

主要靠 time.sleep() / 显式等待 WebDriverWait,需要手写等待条件

自动等待,点击、输入前自动等待元素可交互,极少需要 sleep

弹窗 / 网络拦截

处理麻烦,网络抓包需要额外代理库

原生支持网络拦截、mock 接口、修改请求响应,拦截请求非常方便

多标签 / 多页面 / 多上下文

支持,API 繁琐,写起来啰嗦

原生强大,一行创建 page、context,隔离 cookie 缓存,适合多账号场景

iframe

写起来繁琐,要切换 frame

自动检测 iframe,API 简洁

移动端模拟

仅设备视口模拟,能力弱

原生支持移动端设备模拟,模拟手机浏览器

录制脚本

Selenium IDE,功能简陋

playwright codegen,录制质量很高,自动生成等待逻辑

语言支持

Java/Python/C#/JS

Python/JS/Java/.NET

浏览器

Chrome、Firefox、Edge、Safari

Chrome、Firefox、WebKit (Safari 内核),可以直接跑 Safari 内核自动化

性能

一般,网络慢环境容易超时

更快,CDP 协议,自动等待减少失败

安装

pip install selenium,自己下载 chromedriver

pip install playwright && playwright install

3. 关键差异详解

✅ 等待机制(最大体验差距)

Selenium

必须手动写等待,否则元素没加载完直接抛异常

python

运行

# selenium 显式等待示例
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"btn")))

Playwright

调用 page.click()page.fill() 内部自动等待:等待元素可见、可启用、不被遮挡,超时才报错。几乎不用手写等待。

python

运行

page.get_by_id("btn").click() # 内部自动等待

✅ 网络 Mock 能力

Selenium 本身不能拦截网络请求,要搭配 mitmproxy 等第三方工具。

Playwright 原生:拦截请求、替换接口返回、屏蔽图片、修改 header。

python

运行

# playwright mock接口示例
page.route("/api/data", lambda route: route.fulfill(json={"code":0}))

✅ 隔离上下文

Playwright 的 BrowserContext 可以实现多个独立会话,每个 context 独立 cookie、存储,模拟多账号登录,不用多次启动浏览器。

Selenium 要多开浏览器实例,资源开销大。

✅ Safari 支持

Selenium 操作 Safari 非常麻烦,macOS 还需要开启远程自动化;

Playwright 内置 WebKit,跨平台直接跑 Safari 内核,Windows 也可以跑 WebKit。

4. 各自适合场景

🟦 Selenium 适合

  1. 老项目、历史自动化代码大量基于 Selenium,迁移成本高

  2. 严格需要遵循 W3C WebDriver 标准,对接第三方测试平台只支持 WebDriver 协议

  3. 已有 Selenium 技术栈,团队熟悉

缺点:维护成本高,大量等待代码,容易出现偶现 flaky 测试(不稳定用例)

🟩 Playwright 适合

  1. 新项目优先选,web 自动化、爬虫、E2E 测试

  2. 需要接口 mock、网络拦截、多账号会话隔离

  3. 想要更少的维护成本,降低用例不稳定

  4. 需要兼容 WebKit (Safari)

缺点:不兼容 WebDriver 协议,老平台无法直接接入;生态比 Selenium 小。

5. 常见误区

  1. Playwright 不是只能做测试,也可以用来轻量爬虫;Selenium 也可以爬虫,但更容易被反爬识别。

  2. Playwright 底层 Chrome 依然是真实浏览器,不是无头虚拟 DOM,同样会加载完整网页。

  3. Selenium4 也支持 CDP,但是只是附加能力,不是原生设计,不如 Playwright 顺手。

简单总结

  • Selenium:标准、老牌、生态大,驱动版本坑多,需要手动处理大量等待

  • Playwright:现代、内置浏览器、自动等待、网络拦截强大,写更少代码,稳定性更好,新项目优先


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/playwright-vs-selenium-core-differences

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/