c - 在 C/Go 中从 Google Chrome 获取标签页信息

标签 c google-chrome go applescript

我想在 Google Chrome 浏览器运行时收集一些信息。目前我正在使用一些 applescript ( https://gist.github.com/jcla1/6525572 ) 来做这件事,但我想用 C 或 Go 重写它。

有谁知道 Chrome 公开的 API 来收集如下信息:

  • # 打开标签页
  • 当前有效的 URL

到目前为止,我只发现我可以使用 CGWindowListCopyWindowInfo (Carbon) 获取当前选项卡的标题,它运行良好但显然不提供 URL(而不是 #open tabs等)。

理想情况下,Chrome 应该有一个事件架构,我可以 Hook 它并接收与输入新 URL 相关的所有事件。

附言只需要在 OSX 上工作!

最佳答案

我已经编写了 Go 程序来使用远程调试协议(protocol)远程控制/检查 chrome。它的工作方式是您首先从特定的 url 获取 JSON 数据,它会提供打开的选项卡和基本信息,例如选项卡的当前 url。然后,您可以使用 JSON 对象中的 websocket 链接来控制/检查各个选项卡。

由于只需要基本信息,可以忽略大部分调试接口(interface),直接下载JSON索引即可。首先,使用 chrome --remote-debugging-port=9222 启动 chrome .请注意,需要关闭所有 chrome 窗 Eloquent 能正常工作。您也可以使用 --user-data-dir=<some dir>以全新的配置文件启动,这样您就可以让其他 Chrome 窗口保持打开状态。

打开端口后,获取数据就很容易了。只需转到 http://localhost:9222/json并解码数据。这是我使用的代码:

type Tab struct {
    Description          string `json:"description"`
    DevtoolsFrontendUrl  string `json:"devtoolsFrontendUrl"`
    FaviconUrl           string `json:"faviconUrl"`
    Id                   string `json:"id"`
    ThumbnailUrl         string `json:"thumbnailUrl"`
    Title                string `json:"title"`
    Type                 string `json:"type"`
    Url                  string `json:"url"`
    WebSocketDebuggerUrl string `json:"webSocketDebuggerUrl"`
}

func GetTabs() ([]Tab, error) {
    resp, err := http.Get("http://localhost:9222/json")
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var tabs []Tab
    err = json.NewDecoder(resp.Body).Decode(&tabs)
    if err != nil {
        return nil, err
    }

    return tabs, nil
}

您可以获得更多信息here .


不幸的是,当使用此 API 打开新选项卡时,无法接收事件。但是,当您连接到 websockets 的选项卡以任何方式发生更改时,您会收到通知。如果你愿意发疯,你可以构建一个扩展来监控新标签和加载的 url 等变化。

关于c - 在 C/Go 中从 Google Chrome 获取标签页信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19741977/

相关文章:

c++ - Libmosquitto 发布不会将所有消息传递到 Azure IoT 中心

mongodb - Golang mongodb 字段级加密

javascript - JS : Run a keyboard command from JavaScript

json - 如何解析 JSON 提取数组

go - 从终端关闭服务器的正确方法是什么?

c - 修改C中链表中的数据?

c++ - 范围内的结构与函数定义

chdir 之后 readdir 中出现 C 段错误

google-chrome - chrome.webNavigation.onTabReplaced 不触发

css - Chrome/Firefox 28+ 中的图像模糊