Playwright Python如何拦截同URL的不同XHR请求?
解决Playwright无法捕获点击触发的XHR请求问题
你的问题核心是代码在页面初始加载完成后直接关闭了浏览器,完全没有执行点击“Choisir une date”按钮的操作,自然捕获不到切换日期后产生的新XHR请求。
解决思路
- 保留
response监听器,不要提前终止浏览器进程 - 模拟点击日期选择按钮,触发新的请求
- 等待新的目标请求完成后,再关闭浏览器并返回最新数据
修改后的代码
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
相关产品推荐
相关产品推荐

