package main | |
import ( | |
"context" | |
"fmt" | |
"log" | |
"net/http" | |
"time" | |
"github.com/mafredri/cdp" | |
"github.com/mafredri/cdp/devtool" | |
"github.com/mafredri/cdp/protocol/network" | |
"github.com/mafredri/cdp/protocol/page" | |
"github.com/mafredri/cdp/rpcc" | |
) | |
func main() { | |
err := run(5 * time.Second) | |
if err != nil { | |
log.Fatal(err) | |
} | |
} | |
func run(timeout time.Duration) error { | |
go func() { | |
srv := http.Server{ | |
Addr: "localhost:8080", | |
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | |
log.Println(r.Header) | |
w.WriteHeader(200) | |
fmt.Fprintln(w, "Hello!") | |
}), | |
} | |
log.Fatal(srv.ListenAndServe()) | |
}() | |
ctx, cancel := context.WithTimeout(context.Background(), timeout) | |
defer cancel() | |
devt := devtool.New("http://127.0.0.1:9222") | |
pt, err := devt.Get(ctx, devtool.Page) | |
if err != nil { | |
pt, err = devt.Create(ctx) | |
if err != nil { | |
return err | |
} | |
} | |
conn, err := rpcc.DialContext(ctx, pt.WebSocketDebuggerURL) | |
if err != nil { | |
return err | |
} | |
defer conn.Close() | |
c := cdp.NewClient(conn) | |
domContent, err := c.Page.DOMContentEventFired(ctx) | |
if err != nil { | |
return err | |
} | |
defer domContent.Close() | |
if err = c.Page.Enable(ctx); err != nil { | |
return err | |
} | |
c.Network.Enable(ctx, nil) | |
err = c.Network.SetExtraHTTPHeaders(ctx, | |
network.NewSetExtraHTTPHeadersArgs( | |
[]byte(`{"Accept-Language": "en_US", "Boop": "Beep"}`), | |
), | |
) | |
if err != nil { | |
return err | |
} | |
navArgs := page.NewNavigateArgs("http://localhost:8080") | |
nav, err := c.Page.Navigate(ctx, navArgs) | |
if err != nil { | |
return err | |
} | |
if _, err = domContent.Recv(); err != nil { | |
return err | |
} | |
fmt.Printf("Page loaded with frame ID: %s\n", nav.FrameID) | |
return nil | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment