在 Playwright 里,“完全载入”没有唯一标准,要看业务到底关心什么。
把常见判定策略从“最宽松”到“最严格”列出来,按场景挑一个即可:
-
只要 HTML 下载下来(最快)
page.goto(url, wait_until='commit') -
DOM 树解析完,不等待外链资源(DOM Ready)
page.goto(url, wait_until='domcontentloaded') -
默认级别:DOM + 所有同步资源(图片/JS/CSS)下载并执行完
page.goto(url, wait_until='load') # 默认就是这个 -
网络空闲:3 个关键资源以内、500 ms 内无新请求(适合单页应用)
page.goto(url, wait_until='networkidle')可选更严格
networkidle=500(500 ms 无请求才算完)。 -
自定义“业务 Ready”——等关键节点或数据
page.goto(url, wait_until='domcontentloaded') page.wait_for_selector('#app .data-list', state='attached') # 关键列表出现 page.wait_for_load_state('networkidle') # 再确保接口收完 -
前端自己抛事件(最准)
让开发在首屏渲染最后主动window.dispatchEvent(new Event('app-ready')),
然后脚本里:page.goto(url) page.wait_for_function('window["app-ready"] === true') # 或监听事件
一句话总结:
- 传统多页站点 →
wait_until='load'就够; - 单页/大量异步 → 先
domcontentloaded再networkidle或wait_for_selector; - 想和产品体验对齐 → 让前端埋“app-ready”事件,脚本里等它即可。