Documentation ¶
Overview ¶
Package cdp for application layer communication with browser.
Example (Customize_cdp_log) ¶
package main import ( "fmt" "github.com/Fromsko/rodPro/lib/cdp" "github.com/Fromsko/rodPro/lib/launcher" "github.com/Fromsko/rodPro/lib/utils" ) func main() { ws := cdp.MustConnectWS(launcher.New().MustLaunch()) cdp.New(). Logger(utils.Log(func(args ...interface{}) { switch v := args[0].(type) { case *cdp.Request: fmt.Printf("id: %d", v.ID) } })). Start(ws) }
Output:
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ErrCtxDestroyed = &Error{
Code: -32000,
Message: "Execution context was destroyed.",
}
ErrCtxDestroyed type
var ErrCtxNotFound = &Error{
Code: -32000,
Message: "Cannot find context with specified id",
}
ErrCtxNotFound type
var ErrNodeNotFoundAtPos = &Error{
Code: -32000,
Message: "No node found at given location",
}
ErrNodeNotFoundAtPos type
var ErrNotAttachedToActivePage = &Error{
Code: -32000,
Message: "Not attached to an active page",
}
ErrNotAttachedToActivePage type
var ErrObjNotFound = &Error{
Code: -32000,
Message: "Could not find object with given id",
}
ErrObjNotFound type
var ErrSearchSessionNotFound = &Error{
Code: -32000,
Message: "No search session with given id found",
}
ErrSearchSessionNotFound type
var ErrSessionNotFound = &Error{
Code: -32001,
Message: "Session with given id not found.",
}
ErrSessionNotFound type
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is a devtools protocol connection instance.
Example ¶
package main import ( "context" "fmt" "github.com/Fromsko/rodPro/lib/cdp" "github.com/Fromsko/rodPro/lib/launcher" "github.com/Fromsko/rodPro/lib/proto" "github.com/Fromsko/rodPro/lib/utils" "github.com/ysmood/gson" ) func main() { ctx := context.Background() // launch a browser url := launcher.New().MustLaunch() // create a controller client := cdp.New().Start(cdp.MustConnectWS(url)) go func() { for range client.Event() { // you must consume the events utils.Noop() } }() // Such as call this endpoint on the api doc: // https://chromedevtools.github.io/devtools-protocol/tot/Page#method-navigate // This will create a new tab and navigate to the test.com res, err := client.Call(ctx, "", "Target.createTarget", map[string]string{ "url": "http://test.com", }) utils.E(err) fmt.Println(len(gson.New(res).Get("targetId").Str())) // close browser by using the proto lib to encode json _ = proto.BrowserClose{}.Call(client) }
Output: 32
func MustStartWithURL ¶
MustStartWithURL helper for ConnectURL
func New ¶
func New() *Client
New creates a cdp connection, all messages from Client.Event must be received or they will block the client.
func StartWithURL ¶
StartWithURL helper to connect to the u with the default websocket lib.
func (*Client) Call ¶
func (cdp *Client) Call(ctx context.Context, sessionID, method string, params interface{}) ([]byte, error)
Call a method and wait for its response
func (*Client) Event ¶
Event returns a channel that will emit browser devtools protocol events. Must be consumed or will block producer.
type Dialer ¶
type Dialer interface {
DialContext(ctx context.Context, network, address string) (net.Conn, error)
}
Dialer interface for WebSocket connection
type ErrBadHandshake ¶
ErrBadHandshake type
func (*ErrBadHandshake) Error ¶
func (e *ErrBadHandshake) Error() string
type Error ¶
type Error struct { Code int `json:"code"` Message string `json:"message"` Data string `json:"data"` }
Error of the Response
type Event ¶
type Event struct { SessionID string `json:"sessionId,omitempty"` Method string `json:"method"` Params json.RawMessage `json:"params,omitempty"` }
Event from browser
type Request ¶
type Request struct { ID int `json:"id"` SessionID string `json:"sessionId,omitempty"` Method string `json:"method"` Params interface{} `json:"params,omitempty"` }
Request to send to browser
type Response ¶
type Response struct { ID int `json:"id"` Result json.RawMessage `json:"result,omitempty"` Error *Error `json:"error,omitempty"` }
Response from browser
type WebSocket ¶
type WebSocket struct { // Dialer is usually used for proxy Dialer Dialer // contains filtered or unexported fields }
WebSocket client for chromium. It only implements a subset of WebSocket protocol. Both the Read and Write are thread-safe. Limitation: https://bugs.chromium.org/p/chromium/issues/detail?id=1069431 Ref: https://tools.ietf.org/html/rfc6455
type WebSocketable ¶
type WebSocketable interface { // Send text message only Send([]byte) error // Read returns text message only Read() ([]byte, error) }
WebSocketable enables you to choose the websocket lib you want to use. Such as you can easily wrap gorilla/websocket and use it as the transport layer.
func MustConnectWS ¶
func MustConnectWS(wsURL string) WebSocketable
MustConnectWS helper to make a websocket connection