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

Playwright Python如何拦截同URL的不同XHR请求?

解决Playwright无法捕获点击触发的XHR请求问题

你的问题核心是代码在页面初始加载完成后直接关闭了浏览器,完全没有执行点击“Choisir une date”按钮的操作,自然捕获不到切换日期后产生的新XHR请求。

解决思路

  1. 保留response监听器,不要提前终止浏览器进程
  2. 模拟点击日期选择按钮,触发新的请求
  3. 等待新的目标请求完成后,再关闭浏览器并返回最新数据

修改后的代码

from playwright.sync_api import sync_playwright 
import json 

def scrapping_XHR(url, name_php_file):
    data = []
    with sync_playwright() as p: 
        def handle_response(response): 
            if name_php_file in response.url: 
                # 确保响应是JSON格式再解析,避免格式错误报错
                if response.headers.get("content-type") == "application/json":
                    try:
                        data.append(response.json())
                    except:
                        pass
        
        browser = p.chromium.launch(headless=False)  # 可视化模式方便调试,上线可改回True
        page = browser.new_page() 
        page.on("response", handle_response) 
        
        # 打开页面并等待初始加载完成
        page.goto(url, wait_until="networkidle") 
        
        # 模拟点击日期选择按钮,触发新的XHR请求
        # 注意:选择器需根据页面实际元素调整,可通过浏览器开发者工具获取
        page.click("text=Choisir une date")
        
        # 精准等待目标请求完成,比固定延时更可靠
        page.wait_for_response(lambda resp: name_php_file in resp.url)
        
        # 关闭浏览器
        browser.close()
    
    # 返回最新的请求数据
    return data[-1] if data else None

关键说明

  • 选择器调整:如果文本选择器text=Choisir une date不生效,可替换为元素的CSS选择器(比如page.click("#date-picker-btn")),具体选择器可通过浏览器开发者工具查看元素属性获取。
  • 请求等待:page.wait_for_response会一直监听直到目标URL的请求完成,避免了固定延时的不确定性。
  • 异常处理:新增JSON解析的异常捕获,防止非JSON格式的响应导致代码崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:45:29