Playwright 更好用,尤其在新项目中几乎没理由选 Pyppeteer;后者已基本停止维护,存在Python 3.11+兼容失败、asyncio卡死、Chrome升级报错等问题,而Playwright由微软官方支持,功能完整、自动管理浏览器、API稳定且反爬能力更强。

Playwright 更好用,尤其在新项目中几乎没理由选 Pyppeteer。
Pyppeteer 已基本停止维护,连基础兼容性都难保障
Pyppeteer 是 Puppeteer 的非官方 Python 移植版,从 2018 年起就由社区零星维护。它的核心问题不是功能少,而是“动不了”:Python 3.11+ 下 pyppeteer 安装会失败,asyncio 行为变更导致 launch 卡死,Chrome 版本升级后常出现 Target closed 或 Browser closed unexpectedly 错误。官方 GitHub 仓库自 2022 年后无有效提交,Issues 堆积超 300 条,多数无人回应。
常见踩坑点:
- 用
pip install pyppeteer安装后,运行pyppeteer.launch()报AttributeError: module 'asyncio' has no attribute 'get_event_loop_policy' - 即使降级到 Python 3.9,新版 Chromium(120+)启动时大概率触发
TimeoutError: waiting for getNetworkConditions - 无法复用 Playwright 的浏览器二进制文件,每次都要单独下载、校验、解压,路径管理混乱
Playwright Python 版是微软官方支持的完整实现
Playwright 的 Python 绑定(playwright 包)不是封装,而是和 JS/Java/C# 版本共用同一套协议层与浏览器适配逻辑。它自带浏览器管理、自动等待、上下文隔离、网络拦截等能力,且所有功能在 Python 中 1:1 可用。
实操建议:
- 安装直接跑
pip install playwright,再执行playwright install chromium firefox webkit—— 不用手动找 driver 或解压 zip - 启动浏览器不用操心版本兼容:
browser = playwright.chromium.launch(headless=True)自动匹配内置二进制 - 写点击逻辑时,
page.click("button#submit")默认等待元素可见 + 可点击,不用加page.wait_for_selector或page.is_visible - 需要多标签页或隔离登录态?直接
context = browser.new_context(),比 Pyppeteer 手动管理Browser和Page实例干净得多
反爬场景下,Playwright 的 CDP 控制粒度更可控
很多人以为 Pyppeteer 因为“更贴近 CDP”所以更适合反爬,其实相反:Playwright 提供了更底层、更稳定的 CDP 接口接入方式,比如 browser.new_browser_cdp_session(),能直接发原始 CDP 命令;而 Pyppeteer 的 CDP 封装残缺,page._client.send() 在新版中已失效,且没有错误重试机制。
实际调试中容易忽略的点:
- Playwright 支持
ignoreHTTPSErrors=True和bypassCSP=True两个关键参数,Pyppeteer 对后者支持不完整 - Playwright 的
page.route()网络拦截可精准匹配 URL 正则、修改响应头、甚至返回 mock body;Pyppeteer 的page.setRequestInterception需手动启用,且拦截后必须显式continue或abort,漏掉就会卡住整个页面 - Playwright 内置
playwright codegen录制工具,生成的 Python 代码可直接运行;Pyppeteer 没有等效方案,只能靠手写或抄 JS 示例再翻译
如果你正在维护一个用了 Pyppeteer 的老脚本,迁移成本其实很低:大部分 API 名称一致(page.goto、page.eval_on_selector),只需替换 import、初始化方式和少数异步写法。真正麻烦的是那些绕过反爬的定制逻辑——它们往往绑死了 Pyppeteer 的内部属性,比如直接操作 page._network_manager,这种代码在 Playwright 里必须重写,但换来的稳定性值得花半天重构。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











