Chrome远程调试协议是Chrome浏览器开放的一套调试接口,允许外部程序通过WebSocket或者HTTP请求与浏览器进行通信,获取浏览器的运行状态、控制浏览器行为。在使用Go语言获取浏览器标签页信息时,需要先让Chrome以远程调试模式启动,之后通过调用对应的协议接口拿到标签页列表数据。

开启Chrome远程调试模式
要使用Chrome远程调试协议,首先需要将Chrome浏览器启动在远程调试模式下,不同系统的启动命令略有区别,核心是需要添加--remote-debugging-port参数指定调试端口。以下是常见系统的启动示例:
- Windows系统:在Chrome安装目录下执行命令
chrome.exe --remote-debugging-port=9222 - macOS系统:执行命令
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --remote-debugging-port=9222 - Linux系统:执行命令
google-chrome --remote-debugging-port=9222
启动后,Chrome会在9222端口提供调试服务,我们可以通过访问http://127.0.0.1:9222/json接口获取当前所有的标签页信息。
Go语言请求调试接口获取标签页信息
Go语言的标准库net/http可以很方便地发送HTTP请求,我们只需要向http://127.0.0.1:9222/json发送GET请求,然后解析返回的JSON数据即可拿到标签页信息。下面是完整的实现代码:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
// TabInfo 定义标签页信息的结构体,对应调试接口返回的字段
type TabInfo struct {
ID string `json:"id"` // 标签页唯一ID
Title string `json:"title"` // 标签页标题
URL string `json:"url"` // 标签页当前URL
Type string `json:"type"` // 标签页类型,page表示普通页面
WebSocketURL string `json:"webSocketDebuggerUrl"` // 该标签页的WebSocket调试地址
}
func main() {
// 调试接口的地址,端口需要和Chrome启动时的远程调试端口一致
debugURL := "http://127.0.0.1:9222/json"
// 发送GET请求
resp, err := http.Get(debugURL)
if err != nil {
fmt.Printf("请求调试接口失败: %vn", err)
return
}
defer resp.Body.Close()
// 读取响应内容
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Printf("读取响应内容失败: %vn", err)
return
}
// 解析JSON数据到标签页切片
var tabs []TabInfo
err = json.Unmarshal(body, &tabs)
if err != nil {
fmt.Printf("解析JSON数据失败: %vn", err)
return
}
// 输出所有标签页信息
if len(tabs) == 0 {
fmt.Println("当前没有打开的浏览器标签页")
return
}
fmt.Println("当前浏览器标签页信息:")
for _, tab := range tabs {
fmt.Printf("标签页ID: %sn", tab.ID)
fmt.Printf("标题: %sn", tab.Title)
fmt.Printf("URL: %sn", tab.URL)
fmt.Printf("类型: %sn", tab.Type)
fmt.Printf("WebSocket调试地址: %sn", tab.WebSocketURL)
fmt.Println("-----------------------")
}
}
代码说明
上述代码首先定义了TabInfo结构体,用来映射调试接口返回的JSON数据中的字段,你可以根据实际需求调整结构体的字段,比如如果需要获取标签页的favicon信息,可以添加对应的字段并加上JSON标签。
在main函数中,我们首先构造了调试接口的URL,然后使用http.Get发送请求,读取响应内容后通过json.Unmarshal将JSON数据解析到tabs切片中,最后遍历切片输出每个标签页的核心信息。
注意事项
- 确保Chrome已经以远程调试模式启动,并且端口和代码中使用的端口一致,否则会请求失败。
- 如果Chrome中打开了多个窗口,该接口会返回所有窗口下的标签页信息,包括扩展页面的标签页,你可以通过
Type字段过滤出普通的页面类型标签页。 - 如果需要在程序中持续监听标签页的变化,可以定期调用该接口,或者基于WebSocket连接到对应标签页的
webSocketDebuggerUrl,订阅相关的事件通知。
Chrome_remote_debugging_protocolGo语言浏览器标签页调试协议标签页信息获取修改时间:2026-06-26 16:09:17