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

Playwright Python无法捕获API响应,请求技术支持

Playwright Python 等待API响应超时问题解决

问题根源

  • 响应访问时机错误:在expect_response上下文块中提前访问response.value,此时响应可能还未完成,超时后触发嵌套的InvalidStateError。
  • URL匹配不精确:**.algolia.net/**的通配符模式可能未匹配到实际请求的URL,Playwright的响应匹配对通配符的使用有特定要求。
  • 元素交互时机过早:搜索框未完全加载就绪就进行输入操作,导致请求未正常触发。

修复后的代码

from playwright.sync_api import sync_playwright
import json

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()

    page.goto("https://playwright.dev/")
    page.get_by_role('button', name='Search').click()

    # 确保搜索框完全可交互
    search_box = page.get_by_placeholder('Search docs')
    search_box.wait_for()

    # 使用Lambda表达式精确匹配Algolia的POST请求
    with page.expect_response(lambda res: "algolia.net" in res.url and res.request.method == "POST") as res_info:
        search_box.fill('A')
        # 等待响应完成后获取响应对象
        response = res_info.value
        print(response.json())
        print(json.dumps(response.json(), indent=2))

    browser.close()

核心修改说明

  • 精确匹配响应:用Lambda表达式替代简单通配符,同时校验请求方法为POST,确保只匹配目标搜索请求,避免误匹配其他无关请求。
  • 等待元素就绪:添加search_box.wait_for(),确保搜索框加载完成后再触发输入操作,保证请求正常发起。
  • 正确获取响应:先通过res_info.value获取已完成的响应对象,再调用json()解析内容,避免在等待过程中提前访问导致状态错误。
  • 释放资源:添加browser.close(),确保浏览器实例正确关闭。

额外排查技巧

  • 打开浏览器开发者工具的Network面板,查看实际请求的URL和方法,调整匹配规则。
  • 若仍超时,可增加超时时间:page.expect_response(..., timeout=60000)(单位:毫秒)。
  • 禁用浏览器扩展或用无痕模式启动:browser = p.chromium.launch(headless=False, args=["--incognito"]),排除扩展拦截请求的可能。

内容的提问来源于stack exchange,提问作者Stephen Graham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:52:54