在使用 go-rod
库时,你可以通过拦截网络请求来获取特定 a
标签点击后返回的 JSON 响应。go-rod
提供了强大的网络拦截功能,允许你在页面加载或用户交互时捕获和处理网络请求。
以下是一个示例代码,展示了如何拦截 a
标签的请求并获取其 JSON 响应:
package main
import (
"fmt"
"log"
"time"
"github.com/go-rod/rod"
"github.com/go-rod/rod/lib/launcher"
"github.com/go-rod/rod/lib/proto"
)
func main() {
// 启动浏览器
url := launcher.New().Headless(true).MustLaunch()
browser := rod.New().ControlURL(url).MustConnect()
defer browser.MustClose()
// 创建一个新页面
page := browser.MustPage("https://example.com")
// 启用网络拦截
router := page.HijackRequests()
defer router.MustStop()
// 拦截特定请求
router.MustAdd("*.json", func(ctx *rod.Hijack) {
// 继续请求
ctx.ContinueRequest(&proto.FetchContinueRequest{})
// 等待响应
response := ctx.Response()
// 读取响应体
body, err := response.Body()
if err != nil {
log.Fatalf("Failed to read response body: %v", err)
}
// 打印 JSON 响应
fmt.Println("JSON Response:", string(body))
})
// 开始拦截
go router.Run()
// 等待页面加载完成
page.MustWaitLoad()
// 点击页面上的 a 标签
page.MustElement("a").MustClick()
// 等待一段时间以确保请求完成
time.Sleep(5 * time.Second)
}
启动浏览器:使用 launcher
启动一个无头浏览器实例,并通过 rod.New().ControlURL(url).MustConnect()
连接到浏览器。
创建页面:使用 browser.MustPage("https://example.com")
创建一个新页面并导航到目标 URL。
启用网络拦截:通过 page.HijackRequests()
启用网络请求拦截功能。
拦截特定请求:使用 router.MustAdd("*.json", func(ctx *rod.Hijack) { ... })
拦截所有以 .json
结尾的请求。在回调函数中,你可以继续请求并获取响应体。
点击 a
标签:使用 page.MustElement("a").MustClick()
点击页面上的 a
标签,触发请求。
等待请求完成:使用 time.Sleep(5 * time.Second)
等待一段时间,以确保请求完成并捕获到响应。
*.json
)。a
标签是通过 JavaScript 动态加载的,你可能需要在点击之前等待元素加载完成。通过这种方式,你可以轻松地拦截 a
标签的请求并获取其 JSON 响应。