在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)
}
rod.New().MustConnect()
启动浏览器,并创建一个新页面。page.MustEval
注入JavaScript代码,监听fetch
事件,并将响应的JSON数据存储在window.interceptedResponse
中。page.MustElement("#myButton").MustClick()
点击页面上的某个标签(假设标签的ID为myButton
)。time.Sleep
等待一段时间,确保请求完成。page.MustEval
获取存储在window.interceptedResponse
中的JSON数据,并打印出来。time.Sleep
的使用是为了简单起见,实际应用中可能需要更复杂的等待逻辑,例如等待某个特定的DOM元素出现或消失。通过这种方式,你可以在Go-rod中拦截并获取特定标签点击后的JSON响应。