/godet

Remote client for Chrome DevTools

Primary LanguageGoMIT LicenseMIT

godet

Remote client for Chrome DevTools

Installation

$ go get github.com/raff/godet

Documentation

http://godoc.org/github.com/raff/godet

Example

A pretty complete example is available at cmd/godet/main.go

    import "github.com/raff/godet"

    // connect to Chrome instance
    remote, err = godet.Connect("localhost:9222", true)

    // disconnect when done
    defer remote.Close()

    // get browser and protocol version
    version, err := remote.Version()
    fmt.Println(version)

    // get list of open tabs
    tabs, err := remote.TabList("")
    fmt.Println(tabs)

    // install some callbacks
    remote.CallbackEvent(godet.EventClosed, func(params godet.Params) {
            fmt.Println("RemoteDebugger connection terminated.")
    })

    remote.CallbackEvent("Network.requestWillBeSent", func(params godet.Params) {
            fmt.Println("requestWillBeSent",
                    params["type"],
                    params["documentURL"],
                    params["request"].(map[string]interface{})["url"])
    })

    remote.CallbackEvent("Network.responseReceived", func(params godet.Params) {
            fmt.Println("responseReceived",
                    params["type"],
                    params["response"].(map[string]interface{})["url"])
    })

    remote.CallbackEvent("Log.entryAdded", func(params godet.Params) {
            entry := params["entry"].(map[string]interface{})
            fmt.Println("LOG", entry["type"], entry["level"], entry["text"])
    })

    // create new tab
    tab, err = remote.NewTab("https://www.google.com")

    // enable event processing
    remote.RuntimeEvents(true)
    remote.NetworkEvents(true)
    remote.PageEvents(true)
    remote.DOMEvents(true)
    remote.LogEvents(true)

    // navigate in existing tab
    err := remote.ActivateTab(tabs[0])

    // re-enable events when changing active tab
    remote.AllEvents(true) // enable all events

    err := remote.Navigate("https://www.google.com")

    // evaluate Javascript expression in existing context
    res, err := remote.EvaluateWrap(`
        console.log("hello from godet!")
        return 42;
    `)

    fmt.Println(res)