插件窝 干货文章 Go-rod中如何拦截并获取``标签点击后的JSON响应?

Go-rod中如何拦截并获取``标签点击后的JSON响应?

请求 标签 interceptedRespo 响应 325    来源:    2025-03-15

在Go-rod中,你可以通过监听网络请求来拦截并获取特定标签点击后的JSON响应。以下是一个示例代码,展示了如何实现这一点:

package main

import (
    "fmt"
    "log"
    "time"

    "github.com/go-rod/rod"
    "github.com/go-rod/rod/lib/proto"
)

func main() {
    // 启动浏览器
    browser := rod.New().MustConnect()
    defer browser.MustClose()

    // 创建一个新页面
    page := browser.MustPage("https://example.com")

    // 监听网络请求
    page.MustWaitLoad().MustEval(`() => {
        window.interceptedResponse = null;
        window.addEventListener('fetch', async (event) => {
            const response = await fetch(event.request);
            const data = await response.json();
            window.interceptedResponse = data;
        });
    }`)

    // 点击某个标签(假设标签的ID为"myButton")
    page.MustElement("#myButton").MustClick()

    // 等待一段时间以确保请求完成
    time.Sleep(2 * time.Second)

    // 获取拦截到的JSON响应
    response := page.MustEval(`() => window.interceptedResponse`).Str()

    // 打印响应
    fmt.Println("Intercepted JSON Response:", response)
}

代码说明:

  1. 启动浏览器并创建页面:使用rod.New().MustConnect()启动浏览器,并创建一个新页面。
  2. 监听网络请求:通过page.MustEval注入JavaScript代码,监听fetch事件,并将响应的JSON数据存储在window.interceptedResponse中。
  3. 点击标签:使用page.MustElement("#myButton").MustClick()点击页面上的某个标签(假设标签的ID为myButton)。
  4. 等待请求完成:使用time.Sleep等待一段时间,确保请求完成。
  5. 获取拦截到的JSON响应:通过page.MustEval获取存储在window.interceptedResponse中的JSON数据,并打印出来。

注意事项:

  • 你需要确保点击的标签会触发一个网络请求,并且该请求返回的是JSON格式的数据。
  • time.Sleep的使用是为了简单起见,实际应用中可能需要更复杂的等待逻辑,例如等待某个特定的DOM元素出现或消失。

通过这种方式,你可以在Go-rod中拦截并获取特定标签点击后的JSON响应。