【问题标题】:Get tab information from Google Chrome in C/Go在 C/Go 中从 Google Chrome 获取标签信息
【发布时间】:2013-11-02 12:38:08
【问题描述】:

我想在 Google Chrome 运行时收集一些信息。目前我正在使用一些 applescript (https://gist.github.com/jcla1/6525572) 执行此操作,但我想用 C 或 Go 重写它。

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

  • # 打开的标签页
  • 当前活动网址

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

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

附:只需要在 OSX 上工作!

【问题讨论】:

    标签: c google-chrome go applescript


    【解决方案1】:

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

    由于您只需要基本信息,因此您可以忽略大部分调试 api,只需下载 JSON 索引即可。首先,使用chrome --remote-debugging-port=9222 启动 chrome。请注意,所有 chrome 窗口都需要关闭才能正常工作。您也可以使用 --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 等变化。

    【讨论】:

    • 本来打算避免轮询,但正如您所指出的,另一个选择是编写一个 chrome ext 来监视事件,所以我现在就这样做。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多