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

如何用SeleniumWire持续捕获已加载页面的AJAX请求?

解决SeleniumWire持续捕获AJAX请求的问题

当你使用for request in driver.requests:时,只能遍历执行代码那一刻已存在的请求,后续动态生成的AJAX请求不会被自动捕获。以下两种方案可以解决这个问题:

方案1:轮询捕获新增请求

通过记录请求总数,定期检查并处理新增的请求,适合简单场景:

from seleniumwire import webdriver
import time

# 初始化浏览器
driver = webdriver.Chrome()
driver.get("你的目标网站URL")

# 记录初始请求数量
last_req_count = len(driver.requests)

try:
    while True:
        # 获取从上一次检查到现在新增的请求
        new_requests = driver.requests[last_req_count:]
        for req in new_requests:
            # 过滤并处理AJAX请求(可根据实际URL特征调整判断条件)
            if "ajax" in req.url.lower() or "/api/" in req.url:
                print(f"捕获AJAX请求: {req.url}")
                # 可按需获取请求详情:方法、响应状态等
                # print(f"请求方法: {req.method}, 响应状态: {req.response.status_code if req.response else '无响应'}")
        
        # 更新请求计数,避免重复处理
        last_req_count = len(driver.requests)
        # 匹配你的AJAX请求频率设置检查间隔
        time.sleep(1)
except KeyboardInterrupt:
    # 按Ctrl+C终止时关闭浏览器
    driver.quit()

方案2:使用请求监听器(高效实时捕获)

利用SeleniumWire的事件监听机制,当新请求发起时自动触发处理函数,无需轮询:

from seleniumwire import webdriver

def process_ajax_request(request):
    # 过滤AJAX请求,可自定义判断逻辑
    if "ajax" in request.url.lower() or request.path.startswith("/api/"):
        print(f"实时捕获AJAX请求: {request.url}")
        # 获取请求头、响应内容等信息
        # print(f"请求Headers: {request.headers}")
        if request.response:
            print(f"响应状态码: {request.response.status_code}")

# 初始化浏览器
driver = webdriver.Chrome()
# 注册请求监听器,监听所有新发起的请求
driver.add_listener(process_ajax_request, "request")

driver.get("你的目标网站URL")

# 保持程序运行,直到手动按回车结束
input("按回车键停止捕获并关闭浏览器...")
driver.quit()

注意事项

  • 若只需捕获特定类型的AJAX请求,可通过URL关键字、请求方法(如POST)、请求头特征等条件过滤,避免处理无关请求。
  • 确保使用最新版本的SeleniumWire,避免API兼容性问题。
  • 无需依赖detach选项,代码中的循环或输入阻塞会自动保持浏览器打开状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:44