playwright 启动浏览器卡在 install 是因未预先下载浏览器二进制。必须先执行 playwright install chromium(或 firefox/webkit),否则 launch 会超时;ci/cd 需确保安装在 pip install playwright 之后,windows 权限问题可加 --with-deps 参数解决。

Playwright 启动浏览器为什么卡在 playwright install?
Playwright 不像 Selenium 那样依赖系统已装的浏览器,它默认自带 Chromium、Firefox 和 WebKit 二进制,但首次运行时必须显式下载——很多人直接跑 playwright.launch() 报错,其实只是漏了这步。
常见错误现象:playwright._impl._errors.TimeoutError: Timeout 30000ms exceeded. 或 BrowserType.connect_over_cdp: Failed to connect,本质是浏览器没装,不是网络或代理问题。
- 必须先执行
playwright install chromium(或firefox/webkit),不加参数会装全部,浪费磁盘空间 - CI/CD 环境(如 GitHub Actions)要确保安装步骤在
pip install playwright之后、代码运行之前 - Windows 上如果提示权限错误,别用 PowerShell 的“以管理员身份运行”,改用 CMD 或在项目根目录加
--with-deps参数重试
怎么让 Playwright 真正比 Selenium 快?关键在 launch 参数
快不是框架自动给的,是你关掉冗余功能换来的。Selenium 默认启动完整 GUI 浏览器,Playwright 默认也开图形界面(尤其在 macOS/Linux),这反而拖慢自动化流程。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 始终加
headless=True:playwright.chromium.launch(headless=True),本地调试再设为False - 禁用图片和字体加载能提速 20%–40%,尤其刷大量列表页:
args=["--blink-settings=imagesEnabled=false"] - 不用
slow_mo(除非调试),它会让每个操作强制等待毫秒,生产环境务必删掉 - 避免反复
launch/close浏览器实例,复用browser对象,一个进程内只启一次
page.goto() 超时却页面明明打开了?这是导航生命周期没对齐
Playwright 的 goto 默认等 load 事件,但很多 SPA 页面靠 JS 渲染,DOM 已就绪但 load 没触发,导致假超时;反过来,有些页面 load 很早完成,但核心数据还在 fetch,你接着取 page.query_selector 就拿不到内容。
正确做法是按实际需求选等待策略:
- 等网络空闲(推荐多数场景):
page.goto(url, wait_until="networkidle"),比load更靠谱 - 等某个元素出现(最稳):
page.goto(url); page.wait_for_selector("article.title") - 禁用等待直接跳转(极少数情况):
page.goto(url, wait_until=None),后续全靠手动wait_for_*
别信文档里写的“默认 load 最安全”——它只对传统 SSR 页面友好。
为什么 page.screenshot() 截图空白或截不到动态内容?
截图时机不对,或者页面没真正渲染完。Playwright 的截图是同步调用,但 JS 渲染异步,尤其带懒加载、IntersectionObserver 或 React Suspense 的页面。
容易踩的坑:
- 截图前没等关键区域可见:
page.wait_for_selector(".main-content", state="visible")再截 - 滚动到底部才加载的内容,必须先
page.evaluate("window.scrollTo(0, document.body.scrollHeight)"),再等新节点 - 截图尺寸受
viewport启动参数限制,默认是 1280×720,如果页面响应式断点在 1440px 以上,部分内容可能被 CSS 隐藏——启动时加viewport={"width": 1920, "height": 1080}
真要截长图,别只靠 full_page=True,先确认页面是否支持 document.body.scrollHeight 计算,否则截一半就停。










