You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Playwright中如何处理page.goto多响应问题并判断页面加载成功

问题原因

page.on('response') 会监听页面生命周期内触发的所有网络请求响应:除了page.goto主动发起的主文档请求外,还包括页面加载过程中自动发起的CSS、JS、图片、异步接口等子资源请求,所以出现多条响应记录属于正常现象。

解决方案

可以根据使用场景选择以下任意一种方式判断页面是否成功响应:

  • 直接读取page.goto的返回结果
    page.goto 本身会等待主文档请求完成,直接返回主文档对应的响应对象,无需额外监听response事件就可以直接获取主页面状态:
response = page.goto("https://example_url.com")
# 2xx/3xx 状态码下 response.ok 为 True
if response.ok:
    print(f"页面请求成功,状态码:{response.status}")
else:
    print(f"页面请求失败,状态码:{response.status}")
  • 从response事件中过滤主文档请求
    如果必须通过response事件做监听,可通过匹配请求URL、资源类型的方式筛选出主文档的响应:
target_url = "https://example_url.com"
def handle_response(res):
    # 匹配URL一致且资源类型为document的请求,即为页面主文档请求
    if res.url == target_url and res.request.resource_type == "document":
        print(f"主页面响应状态:{res.status}")

page.on("response", handle_response)
page.goto(target_url)
  • 配合页面加载状态做二次确认
    可以在page.goto中指定等待条件,确认页面加载到预期状态才算成功:
# 等待页面DOM加载完成
page.goto("https://example_url.com", wait_until="domcontentloaded")
# 等待页面load事件触发(默认配置)
page.goto("https://example_url.com", wait_until="load")
# 等待网络空闲(500ms内没有新的网络请求)
page.goto("https://example_url.com", wait_until="networkidle")

内容的提问来源于stack exchange,提问作者Gentrit Hoxha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:36:03