两者都是 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. 核心能力对比表
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 适合
老项目、历史自动化代码大量基于 Selenium,迁移成本高
严格需要遵循 W3C WebDriver 标准,对接第三方测试平台只支持 WebDriver 协议
已有 Selenium 技术栈,团队熟悉
缺点:维护成本高,大量等待代码,容易出现偶现 flaky 测试(不稳定用例)
🟩 Playwright 适合
新项目优先选,web 自动化、爬虫、E2E 测试
需要接口 mock、网络拦截、多账号会话隔离
想要更少的维护成本,降低用例不稳定
需要兼容 WebKit (Safari)
缺点:不兼容 WebDriver 协议,老平台无法直接接入;生态比 Selenium 小。
5. 常见误区
Playwright 不是只能做测试,也可以用来轻量爬虫;Selenium 也可以爬虫,但更容易被反爬识别。
Playwright 底层 Chrome 依然是真实浏览器,不是无头虚拟 DOM,同样会加载完整网页。
Selenium4 也支持 CDP,但是只是附加能力,不是原生设计,不如 Playwright 顺手。
简单总结
Selenium:标准、老牌、生态大,驱动版本坑多,需要手动处理大量等待
Playwright:现代、内置浏览器、自动等待、网络拦截强大,写更少代码,稳定性更好,新项目优先
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢