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
相关产品推荐
相关产品推荐

