Documentation ¶
Overview ¶
Example (Basic) ¶
Open github, search for "git"
package main import ( "fmt" "time" "github.com/ysmood/rod" "github.com/ysmood/rod/lib/input" ) func main() { // launch and connect to a browser browser := rod.New().Connect() // Even you forget to close, rod will close it after main process ends defer browser.Close() // timeout will be passed to chained function calls page := browser.Timeout(time.Minute).Page("https://github.com") // make sure windows size is consistent page.Window(0, 0, 1200, 600) // use css selector to get the search input element and input "git" page.Element("input").Input("git").Press(input.Enter) // wait until css selector get the element then get the text content of it text := page.Element(".codesearch-results p").Text() fmt.Println(text) }
Output: Git is the most widely used version control system.
Example (Customize_browser_launch) ¶
The launcher lib comes with a lot of default switches (flags) to launch browser, this example shows how to add or delete switches.
package main import ( "fmt" "github.com/ysmood/rod" "github.com/ysmood/rod/lib/launcher" ) func main() { // set custom browser options // use IDE to check the doc of launcher.New you will find out more info url := launcher.New(). Set("proxy-server", "127.0.0.1:8080"). // add a flag, here we set a http proxy Delete("use-mock-keychain"). // delete a flag Launch() browser := rod.New().ControlURL(url).Connect() defer browser.Close() // auth the proxy // here we use cli tool "mitmproxy --proxyauth user:pass" as an example browser.HandleAuth("user", "pass") // mitmproxy needs cert config to support https, use http here as an example fmt.Println(browser.Page("http://example.com/").Element("title").Text()) // Skip
Output:
Example (Customize_retry_strategy) ¶
Useful when you want to customize the element query retry logic
package main import ( "context" "fmt" "time" "github.com/ysmood/kit" "github.com/ysmood/rod" ) func main() { browser := rod.New().Timeout(time.Minute).Connect() defer browser.Close() page := browser.Page("https://github.com") backoff := kit.BackoffSleeper(30*time.Millisecond, 3*time.Second, nil) // here we use low-level api ElementE other than Element to have more options, // use backoff algorithm to do the retry el, err := page.Timeout(10*time.Second).ElementE(backoff, "", "input") if err == context.DeadlineExceeded { fmt.Println("we can't find the element before timeout") } else { kit.E(err) } // get element without retry el, err = page.ElementE(nil, "", "input") if rod.IsError(err, rod.ErrElementNotFound) { fmt.Println("element not found") } else { kit.E(err) } fmt.Println(el.Eval(`() => this.name`).String()) }
Output: q
Example (Debug_mode) ¶
Rod provides a lot of debug options, you can use set methods to enable them or use environment variables list at "lib/defaults".
package main import ( "fmt" "time" "github.com/ysmood/kit" "github.com/ysmood/rod" "github.com/ysmood/rod/lib/input" "github.com/ysmood/rod/lib/launcher" ) func main() { url := launcher.New(). Headless(false). // run browser on foreground, you can also use env "rod=show" Devtools(true). // open devtools for each new tab Launch() browser := rod.New(). Timeout(time.Minute). ControlURL(url). Trace(true). // show trace of each input action Slowmotion(2 * time.Second). // each input action will take 2 second Connect() // the monitor server that plays the screenshots of each tab, useful when debugging headlee mode browser.ServeMonitor(":9777") defer browser.Close() page := browser.Page("https://www.wikipedia.org/") page.Element("#searchLanguage").Select("[lang=zh]") page.Element("#searchInput").Input("热干面") page.Keyboard.Press(input.Enter) fmt.Println(page.Element("#firstHeading").Text()) // get the image binary img := page.Element(`[alt="Hot Dry Noodles.jpg"]`) _ = kit.OutputFile("tmp/img.jpg", img.Resource(), nil) // pause the js execution // you can resume by open the devtools and click the resume button on source tab page.Pause() // Skip
Output:
Example (Direct_cdp) ¶
Useful when rod doesn't have the function you want, you can call the cdp interface directly easily.
package main import ( "encoding/json" "fmt" "time" "github.com/ysmood/kit" "github.com/ysmood/rod" "github.com/ysmood/rod/lib/proto" ) func main() { browser := rod.New().Timeout(time.Minute).Connect() defer browser.Close() // The code here is how SetCookies works // Normally, you use something like browser.Page("").SetCookies(...).Navigate(url) page := browser.Page("") // call cdp interface directly here // set the cookie before we visit the website // the "proto" lib contains every JSON schema you need to communicate with browser res, err := proto.NetworkSetCookie{ Name: "rod", Value: "test", URL: "https://example.com", }.Call(page) kit.E(err) fmt.Println(res.Success) page.Navigate("https://example.com") // eval js on the page to get the cookie cookie := page.Eval(`() => document.cookie`).String() fmt.Println(cookie) // Or even more low-level way to use raw json to send request to browser. data, _ := json.Marshal(map[string]string{ "name": "rod", "value": "test", "url": "https://example.com", }) _, _ = browser.Call(page.GetContext(), string(page.SessionID), "Network.SetCookie", data) }
Output: true rod=test
Example (Handle_events) ¶
Shows how to subscribe events.
package main import ( "fmt" "time" "github.com/ysmood/rod" "github.com/ysmood/rod/lib/proto" ) func main() { browser := rod.New().Timeout(time.Minute).Connect() defer browser.Close() go browser.EachEvent(func(e *proto.TargetTargetCreated) { // if it's not a page return if e.TargetInfo.Type != proto.TargetTargetInfoTypePage { return } // create a page from the page id page02 := browser.PageFromTargetID(e.TargetInfo.TargetID) // log "hey" on each newly created page page02.Eval(`() => console.log("hey")`) })() page01 := browser.Page("") // print all "console.log" outputs go page01.EachEvent(func(e *proto.RuntimeConsoleAPICalled) { page01.ObjectsToJSON(e.Args).Join(" ") })() // Subscribe events before they happen, run the "wait()" to start consuming the events. // Here we return an optional stop signal at the first event to stop the loop. wait := page01.EachEvent(func(e *proto.PageLoadEventFired) (stop bool) { return true }) page01.Navigate("https://example.com") wait() // the above is the same as below if false { page01.WaitEvent(&proto.PageLoadEventFired{})() } fmt.Println("done") }
Output: done
Example (Hijack_requests) ¶
Request interception example to modify request or response.
package main import ( "fmt" "time" "github.com/ysmood/rod" ) func main() { browser := rod.New().Timeout(time.Minute).Connect() defer browser.Close() router := browser.HijackRequests() defer router.Stop() router.Add("*.js", func(ctx *rod.Hijack) { // Send request load response from real destination as the default value to hijack. // If you want to safe bandwidth and don't call it, you have to mock the entire response (status code, headers, body). ctx.LoadResponse() // override response body, we let all js log string "rod" ctx.Response.SetBody(ctx.Response.StringBody() + "\n document.title = 'hi' ") }) go router.Run() browser.Page("https://www.wikipedia.org/").Wait(`() => document.title == 'hi'`) fmt.Println("done") }
Output: done
Example (Reuse_sessions) ¶
Such as you logged in your github account and you want to reuse the login session, you may want to launch the browser like this example.
package main import ( "fmt" "github.com/ysmood/rod" "github.com/ysmood/rod/lib/launcher" ) func main() { url := launcher.NewUserMode().Launch() browser := rod.New().ControlURL(url).Connect() browser.Page("https://github.com") fmt.Println("done") // Skip
Output:
Example (States) ¶
package main import ( "fmt" "time" "github.com/ysmood/rod" "github.com/ysmood/rod/lib/proto" ) func main() { browser := rod.New().Timeout(time.Minute).Connect() defer browser.Close() page := browser.Page("") // to detect if network is enabled or not fmt.Println(page.LoadState(&proto.NetworkEnable{})) _ = proto.NetworkEnable{}.Call(page) // to detect if network is enabled or not fmt.Println(page.LoadState(&proto.NetworkEnable{})) }
Output: false true
Example (Wait_for_animation) ¶
If a button is moving too fast, you cannot click it as a human, to perfectly simulate human inputs the click trigger by Rod are based on mouse point location, so usually you need wait a button is stable before you can click it.
package main import ( "fmt" "time" "github.com/ysmood/rod" ) func main() { browser := rod.New().Timeout(time.Minute).Connect() defer browser.Close() page := browser.Page("https://getbootstrap.com/docs/4.0/components/modal/") page.WaitLoad().Element("[data-target='#exampleModalLive']").Click() saveBtn := page.ElementMatches("#exampleModalLive button", "Close") // wait until the save button's position is stable // and we don't wait more than 5s, saveBtn will also inherit the 1min timeout from the page saveBtn.Timeout(5 * time.Second).WaitStable().Click().WaitInvisible() fmt.Println("done") }
Output: done
Example (Wait_for_request) ¶
Some page interaction finishes after some network requests, WaitRequestIdle is designed for it.
package main import ( "fmt" "time" "github.com/ysmood/rod" ) func main() { browser := rod.New().Timeout(time.Minute).Connect() defer browser.Close() page := browser.Page("https://duckduckgo.com/") // the page will send a request to fetch the suggestions wait := page.WaitRequestIdle() page.Element("#search_form_input_homepage").Click().Input("test") time.Sleep(300 * time.Millisecond) // wait for js debounce wait() // we must be able to get several suggestion items fmt.Println(len(page.Elements(".search__autocomplete .acp")) > 0) }
Output: true
Index ¶
- func CancelPanic(err error)
- func Event(msg *cdp.Event, evt proto.Payload) bool
- func IsError(err error, code ErrCode) bool
- func SprintFnThis(js string) string
- type Array
- type Box
- type Browser
- func (b *Browser) Call(ctx context.Context, sessionID, methodName string, params json.RawMessage) (res []byte, err error)
- func (b *Browser) CallContext() (context.Context, proto.Client, string)
- func (b *Browser) CancelTimeout() *Browser
- func (b *Browser) Client(c *cdp.Client) *Browser
- func (b *Browser) Close()
- func (b *Browser) CloseE() error
- func (b *Browser) Connect() *Browser
- func (b *Browser) ConnectE() error
- func (b *Browser) Context(ctx context.Context) *Browser
- func (b *Browser) ControlURL(url string) *Browser
- func (b *Browser) DisableDomain(ctx context.Context, sessionID proto.TargetSessionID, method proto.Payload) (recover func())
- func (b *Browser) EachEvent(fn interface{}) (wait func())
- func (b *Browser) EnableDomain(ctx context.Context, sessionID proto.TargetSessionID, method proto.Payload) (recover func())
- func (b *Browser) Event() *goob.Observable
- func (b *Browser) GetContext() context.Context
- func (b *Browser) HandleAuth(username, password string)
- func (b *Browser) HandleAuthE(username, password string) func() error
- func (b *Browser) HijackRequests() *HijackRouter
- func (b *Browser) Incognito() *Browser
- func (b *Browser) IncognitoE() (*Browser, error)
- func (b *Browser) LoadState(sessionID proto.TargetSessionID, method proto.Payload) (has bool)
- func (b *Browser) Page(url string) *Page
- func (b *Browser) PageE(url string) (*Page, error)
- func (b *Browser) PageFromTargetID(targetID proto.TargetTargetID) *Page
- func (b *Browser) PageFromTargetIDE(targetID proto.TargetTargetID) (*Page, error)
- func (b *Browser) Pages() Pages
- func (b *Browser) PagesE() (Pages, error)
- func (b *Browser) ServeMonitor(host string) *kit.ServerContext
- func (b *Browser) Slowmotion(delay time.Duration) *Browser
- func (b *Browser) Timeout(d time.Duration) *Browser
- func (b *Browser) Trace(enable bool) *Browser
- func (b *Browser) WaitEvent(e proto.Payload) (wait func())
- type Element
- func (el *Element) Box() *Box
- func (el *Element) BoxE() (*Box, error)
- func (el *Element) CallContext() (context.Context, proto.Client, string)
- func (el *Element) CancelTimeout() *Element
- func (el *Element) Click() *Element
- func (el *Element) ClickE(button proto.InputMouseButton) error
- func (el *Element) Context(ctx context.Context) *Element
- func (el *Element) Describe() *proto.DOMNode
- func (el *Element) DescribeE() (*proto.DOMNode, error)
- func (el *Element) Element(selector string) *Element
- func (el *Element) ElementByJS(js string, params ...interface{}) *Element
- func (el *Element) ElementByJSE(js string, params Array) (*Element, error)
- func (el *Element) ElementE(selector string) (*Element, error)
- func (el *Element) ElementMatches(selector, regex string) *Element
- func (el *Element) ElementMatchesE(selector, regex string) (*Element, error)
- func (el *Element) ElementX(xpath string) *Element
- func (el *Element) ElementXE(xpath string) (*Element, error)
- func (el *Element) Elements(selector string) Elements
- func (el *Element) ElementsByJS(js string, params ...interface{}) Elements
- func (el *Element) ElementsByJSE(js string, params Array) (Elements, error)
- func (el *Element) ElementsE(selector string) (Elements, error)
- func (el *Element) ElementsX(xpath string) Elements
- func (el *Element) ElementsXE(xpath string) (Elements, error)
- func (el *Element) Eval(js string, params ...interface{}) proto.JSON
- func (el *Element) EvalE(byValue bool, js string, params Array) (*proto.RuntimeRemoteObject, error)
- func (el *Element) Focus() *Element
- func (el *Element) FocusE() error
- func (el *Element) Frame() *Page
- func (el *Element) FrameE() (*Page, error)
- func (el *Element) GetContext() context.Context
- func (el *Element) HTML() string
- func (el *Element) HTMLE() (string, error)
- func (el *Element) Has(selector string) bool
- func (el *Element) HasE(selector string) (bool, error)
- func (el *Element) HasMatches(selector, regex string) bool
- func (el *Element) HasMatchesE(selector, regex string) (bool, error)
- func (el *Element) HasX(selector string) bool
- func (el *Element) HasXE(selector string) (bool, error)
- func (el *Element) Input(text string) *Element
- func (el *Element) InputE(text string) error
- func (el *Element) Next() *Element
- func (el *Element) NextE() (*Element, error)
- func (el *Element) Parent() *Element
- func (el *Element) ParentE() (*Element, error)
- func (el *Element) Parents(selector string) Elements
- func (el *Element) ParentsE(selector string) (Elements, error)
- func (el *Element) Press(key rune) *Element
- func (el *Element) PressE(key rune) error
- func (el *Element) Previous() *Element
- func (el *Element) PreviousE() (*Element, error)
- func (el *Element) Release()
- func (el *Element) ReleaseE() error
- func (el *Element) Resource() []byte
- func (el *Element) ResourceE() ([]byte, error)
- func (el *Element) Screenshot(toFile ...string) []byte
- func (el *Element) ScreenshotE(format proto.PageCaptureScreenshotFormat, quality int) ([]byte, error)
- func (el *Element) ScrollIntoView() *Element
- func (el *Element) ScrollIntoViewE() error
- func (el *Element) Select(selectors ...string) *Element
- func (el *Element) SelectAllText() *Element
- func (el *Element) SelectAllTextE() error
- func (el *Element) SelectE(selectors []string) error
- func (el *Element) SelectText(regex string) *Element
- func (el *Element) SelectTextE(regex string) error
- func (el *Element) SetFiles(paths ...string) *Element
- func (el *Element) SetFilesE(paths []string) error
- func (el *Element) ShadowRoot() *Element
- func (el *Element) ShadowRootE() (*Element, error)
- func (el *Element) Text() string
- func (el *Element) TextE() (string, error)
- func (el *Element) Timeout(d time.Duration) *Element
- func (el *Element) Trace(htmlMessage string) (removeOverlay func())
- func (el *Element) Visible() bool
- func (el *Element) VisibleE() (bool, error)
- func (el *Element) Wait(js string, params ...interface{}) *Element
- func (el *Element) WaitE(js string, params Array) error
- func (el *Element) WaitInvisible() *Element
- func (el *Element) WaitInvisibleE() error
- func (el *Element) WaitStable() *Element
- func (el *Element) WaitStableE(interval time.Duration) error
- func (el *Element) WaitVisible() *Element
- func (el *Element) WaitVisibleE() error
- type Elements
- type ErrCode
- type Error
- type Hijack
- type HijackRequest
- func (ctx *HijackRequest) Body() string
- func (ctx *HijackRequest) Header(key string) string
- func (ctx *HijackRequest) Headers() proto.NetworkHeaders
- func (ctx *HijackRequest) JSONBody() gjson.Result
- func (ctx *HijackRequest) Method() string
- func (ctx *HijackRequest) SetBody(obj interface{})
- func (ctx *HijackRequest) SetHeader(pairs ...string)
- func (ctx *HijackRequest) SetMethod(name string)
- func (ctx *HijackRequest) SetQuery(pairs ...interface{})
- func (ctx *HijackRequest) SetURL(url string)
- func (ctx *HijackRequest) URL() *url.URL
- type HijackResponse
- func (ctx *HijackResponse) Body() []byte
- func (ctx *HijackResponse) BodyE() ([]byte, error)
- func (ctx *HijackResponse) Header(key string) string
- func (ctx *HijackResponse) HeaderE(key string) (string, error)
- func (ctx *HijackResponse) Headers() http.Header
- func (ctx *HijackResponse) HeadersE() (http.Header, error)
- func (ctx *HijackResponse) JSONBody() gjson.Result
- func (ctx *HijackResponse) SetBody(obj interface{})
- func (ctx *HijackResponse) SetHeader(pairs ...string)
- func (ctx *HijackResponse) SetStatusCode(code int)
- func (ctx *HijackResponse) StatusCode() int
- func (ctx *HijackResponse) StatusCodeE() (int, error)
- func (ctx *HijackResponse) StringBody() string
- type HijackRouter
- func (r *HijackRouter) Add(pattern string, handler func(*Hijack))
- func (r *HijackRouter) AddE(pattern string, handler func(*Hijack)) error
- func (r *HijackRouter) Remove(pattern string)
- func (r *HijackRouter) RemoveE(pattern string) error
- func (r *HijackRouter) Run()
- func (r *HijackRouter) Stop()
- func (r *HijackRouter) StopE() error
- type Keyboard
- func (k *Keyboard) Down(key rune)
- func (k *Keyboard) DownE(key rune) error
- func (k *Keyboard) InsertText(text string)
- func (k *Keyboard) InsertTextE(text string) error
- func (k *Keyboard) Press(key rune)
- func (k *Keyboard) PressE(key rune) error
- func (k *Keyboard) Up(key rune)
- func (k *Keyboard) UpE(key rune) error
- type Mouse
- func (m *Mouse) Click(button proto.InputMouseButton)
- func (m *Mouse) ClickE(button proto.InputMouseButton) error
- func (m *Mouse) Down(button proto.InputMouseButton)
- func (m *Mouse) DownE(button proto.InputMouseButton, clicks int64) error
- func (m *Mouse) Move(x, y float64)
- func (m *Mouse) MoveE(x, y float64, steps int) error
- func (m *Mouse) Scroll(x, y float64)
- func (m *Mouse) ScrollE(offsetX, offsetY float64, steps int) error
- func (m *Mouse) Up(button proto.InputMouseButton)
- func (m *Mouse) UpE(button proto.InputMouseButton, clicks int64) error
- type Page
- func (p *Page) AddScriptTag(url string) *Page
- func (p *Page) AddScriptTagE(url, content string) error
- func (p *Page) AddStyleTag(url string) *Page
- func (p *Page) AddStyleTagE(url, content string) error
- func (p *Page) CallContext() (context.Context, proto.Client, string)
- func (p *Page) CancelTimeout() *Page
- func (p *Page) Close()
- func (p *Page) CloseE() error
- func (p *Page) Context(ctx context.Context) *Page
- func (p *Page) Cookies(urls ...string) []*proto.NetworkCookie
- func (p *Page) CookiesE(urls []string) ([]*proto.NetworkCookie, error)
- func (p *Page) DisableDomain(method proto.Payload) (recover func())
- func (p *Page) EachEvent(fn interface{}) (wait func())
- func (p *Page) Element(selector string) *Element
- func (p *Page) ElementByJS(js string, params ...interface{}) *Element
- func (p *Page) ElementByJSE(sleeper kit.Sleeper, thisID proto.RuntimeRemoteObjectID, js string, ...) (*Element, error)
- func (p *Page) ElementE(sleeper kit.Sleeper, objectID proto.RuntimeRemoteObjectID, selector string) (*Element, error)
- func (p *Page) ElementFromObjectID(id proto.RuntimeRemoteObjectID) *Element
- func (p *Page) ElementMatches(selector, regex string) *Element
- func (p *Page) ElementMatchesE(sleeper kit.Sleeper, objectID proto.RuntimeRemoteObjectID, ...) (*Element, error)
- func (p *Page) ElementX(xpath string) *Element
- func (p *Page) ElementXE(sleeper kit.Sleeper, objectID proto.RuntimeRemoteObjectID, xpath string) (*Element, error)
- func (p *Page) Elements(selector string) Elements
- func (p *Page) ElementsByJS(js string, params ...interface{}) Elements
- func (p *Page) ElementsByJSE(thisID proto.RuntimeRemoteObjectID, js string, params Array) (Elements, error)
- func (p *Page) ElementsE(objectID proto.RuntimeRemoteObjectID, selector string) (Elements, error)
- func (p *Page) ElementsX(xpath string) Elements
- func (p *Page) ElementsXE(objectID proto.RuntimeRemoteObjectID, xpath string) (Elements, error)
- func (p *Page) EnableDomain(method proto.Payload) (recover func())
- func (p *Page) Eval(js string, params ...interface{}) proto.JSON
- func (p *Page) EvalE(byValue bool, thisID proto.RuntimeRemoteObjectID, js string, jsArgs Array) (*proto.RuntimeRemoteObject, error)
- func (p *Page) GetContext() context.Context
- func (p *Page) GetDownloadFile(pattern string) func() []byte
- func (p *Page) GetDownloadFileE(pattern string) func() ([]byte, error)
- func (p *Page) GetWindow() *proto.BrowserBounds
- func (p *Page) GetWindowE() (*proto.BrowserBounds, error)
- func (p *Page) HandleDialog(accept bool, promptText string) (wait func())
- func (p *Page) HandleDialogE(accept bool, promptText string) func() error
- func (p *Page) Has(selector string) bool
- func (p *Page) HasE(selector string) (bool, error)
- func (p *Page) HasMatches(selector, regex string) bool
- func (p *Page) HasMatchesE(selector, regex string) (bool, error)
- func (p *Page) HasX(selector string) bool
- func (p *Page) HasXE(selector string) (bool, error)
- func (p *Page) HijackRequests() *HijackRouter
- func (p *Page) IsIframe() bool
- func (p *Page) LoadState(method proto.Payload) (has bool)
- func (p *Page) Navigate(url string) *Page
- func (p *Page) NavigateE(url string) error
- func (p *Page) ObjectToJSON(obj *proto.RuntimeRemoteObject) proto.JSON
- func (p *Page) ObjectToJSONE(obj *proto.RuntimeRemoteObject) (proto.JSON, error)
- func (p *Page) ObjectsToJSON(list []*proto.RuntimeRemoteObject) proto.JSON
- func (p *Page) Overlay(left, top, width, height float64, msg string) (remove func())
- func (p *Page) PDF() []byte
- func (p *Page) PDFE(req *proto.PagePrintToPDF) ([]byte, error)
- func (p *Page) Pause() *Page
- func (p *Page) PauseE() error
- func (p *Page) Release(objectID proto.RuntimeRemoteObjectID) *Page
- func (p *Page) ReleaseE(objectID proto.RuntimeRemoteObjectID) error
- func (p *Page) Root() *Page
- func (p *Page) Screenshot(toFile ...string) []byte
- func (p *Page) ScreenshotE(fullpage bool, req *proto.PageCaptureScreenshot) ([]byte, error)
- func (p *Page) ScreenshotFullPage(toFile ...string) []byte
- func (p *Page) SetCookies(cookies ...*proto.NetworkCookieParam) *Page
- func (p *Page) SetCookiesE(cookies []*proto.NetworkCookieParam) error
- func (p *Page) SetExtraHeaders(dict ...string) (cleanup func())
- func (p *Page) SetExtraHeadersE(dict []string) (func(), error)
- func (p *Page) SetUserAgent(req *proto.NetworkSetUserAgentOverride) *Page
- func (p *Page) SetUserAgentE(req *proto.NetworkSetUserAgentOverride) error
- func (p *Page) Sleeper() kit.Sleeper
- func (p *Page) StopLoading() *Page
- func (p *Page) StopLoadingE() error
- func (p *Page) Timeout(d time.Duration) *Page
- func (p *Page) Viewport(width, height int64, deviceScaleFactor float64, mobile bool) *Page
- func (p *Page) ViewportE(params *proto.EmulationSetDeviceMetricsOverride) error
- func (p *Page) Wait(js string, params ...interface{})
- func (p *Page) WaitE(sleeper kit.Sleeper, thisID proto.RuntimeRemoteObjectID, js string, ...) error
- func (p *Page) WaitEvent(e proto.Payload) (wait func())
- func (p *Page) WaitIdle() *Page
- func (p *Page) WaitIdleE(timeout time.Duration) (err error)
- func (p *Page) WaitLoad() *Page
- func (p *Page) WaitLoadE() error
- func (p *Page) WaitOpen() (wait func() *Page)
- func (p *Page) WaitOpenE() func() (*Page, error)
- func (p *Page) WaitRequestIdle(excludes ...string) (wait func())
- func (p *Page) WaitRequestIdleE(d time.Duration, includes, excludes []string) func()
- func (p *Page) Window(left, top, width, height int64) *Page
- func (p *Page) WindowE(bounds *proto.BrowserBounds) error
- func (p *Page) WindowFullscreen() *Page
- func (p *Page) WindowMaximize() *Page
- func (p *Page) WindowMinimize() *Page
- func (p *Page) WindowNormal() *Page
- type Pages
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Event ¶ added in v0.31.0
Event helps to convert a cdp.Event to proto.Payload. Returns false if the conversion fails
func SprintFnThis ¶ added in v0.5.0
SprintFnThis wrap js with this
Types ¶
type Box ¶ added in v0.22.0
type Box struct { Top float64 `json:"top"` Left float64 `json:"left"` Width float64 `json:"width"` Height float64 `json:"height"` }
Box represents the element bounding rect
type Browser ¶
type Browser struct { // BrowserContextID is the id for incognito window BrowserContextID proto.BrowserBrowserContextID // contains filtered or unexported fields }
Browser represents the browser It doesn't depends on file system, it should work with remote browser seamlessly. To check the env var you can use to quickly enable options from CLI, check here: https://pkg.go.dev/github.com/ysmood/rod/lib/defaults
func (*Browser) Call ¶
func (b *Browser) Call(ctx context.Context, sessionID, methodName string, params json.RawMessage) (res []byte, err error)
Call raw cdp interface directly
func (*Browser) CallContext ¶ added in v0.29.0
CallContext parameters for proto
func (*Browser) CancelTimeout ¶ added in v0.18.0
CancelTimeout context
func (*Browser) Connect ¶ added in v0.13.0
Connect to the browser and start to control it. If fails to connect, try to run a local browser, if local browser not found try to download one.
func (*Browser) Context ¶ added in v0.12.0
Context creates a clone with a context that inherits the previous one
func (*Browser) ControlURL ¶
ControlURL set the url to remote control browser.
func (*Browser) DisableDomain ¶ added in v0.39.1
func (b *Browser) DisableDomain(ctx context.Context, sessionID proto.TargetSessionID, method proto.Payload) (recover func())
DisableDomain and returns a recover function to restore previous state
func (*Browser) EachEvent ¶ added in v0.31.1
func (b *Browser) EachEvent(fn interface{}) (wait func())
EachEvent of the specified event type, if the fn returns true the event loop will stop. The fn can accpet multiple events, such as EachEvent(func(e1 *proto.PageLoadEventFired, e2 *proto.PageLifecycleEvent) {}), only one argument will be non-null, others will null.
func (*Browser) EnableDomain ¶ added in v0.38.0
func (b *Browser) EnableDomain(ctx context.Context, sessionID proto.TargetSessionID, method proto.Payload) (recover func())
EnableDomain and returns a recover function to restore previous state
func (*Browser) Event ¶
func (b *Browser) Event() *goob.Observable
Event returns the observable for browser events
func (*Browser) GetContext ¶ added in v0.23.1
GetContext returns the current context
func (*Browser) HandleAuth ¶ added in v0.30.1
HandleAuth for the next basic HTTP authentication. It will prevent the popup that requires user to input user name and password. Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
func (*Browser) HandleAuthE ¶ added in v0.30.1
HandleAuthE for the next basic HTTP authentication. It will prevent the popup that requires user to input user name and password. Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
func (*Browser) HijackRequests ¶ added in v0.39.0
func (b *Browser) HijackRequests() *HijackRouter
HijackRequests creates a new router instance for requests hijacking. When use Fetch domain outside the router should be stopped. Enabling hijacking disables page caching, but such as 304 Not Modified will still work as expected.
func (*Browser) IncognitoE ¶ added in v0.23.1
IncognitoE creates a new incognito browser
func (*Browser) PageFromTargetID ¶ added in v0.31.0
func (b *Browser) PageFromTargetID(targetID proto.TargetTargetID) *Page
PageFromTargetID creates a Page instance from a targetID
func (*Browser) PageFromTargetIDE ¶ added in v0.31.0
func (b *Browser) PageFromTargetIDE(targetID proto.TargetTargetID) (*Page, error)
PageFromTargetIDE creates a Page instance from a targetID
func (*Browser) ServeMonitor ¶ added in v0.27.0
func (b *Browser) ServeMonitor(host string) *kit.ServerContext
ServeMonitor starts the monitor server The reason why not to use "chrome://inspect/#devices" is one target cannot be driven by multiple controllers.
func (*Browser) Slowmotion ¶
Slowmotion set the delay for each control action, such as the simulation of the human inputs
type Element ¶
type Element struct { ObjectID proto.RuntimeRemoteObjectID // contains filtered or unexported fields }
Element represents the DOM element
func (*Element) Box ¶
Box returns the size of an element and its position relative to the main frame. It will recursively calculate the box with all ancestors. The spec is here: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect
func (*Element) CallContext ¶ added in v0.29.0
CallContext parameters for proto
func (*Element) ClickE ¶
func (el *Element) ClickE(button proto.InputMouseButton) error
ClickE doc is similar to the method Click
func (*Element) Context ¶ added in v0.12.0
Context creates a clone with a context that inherits the previous one
func (*Element) Describe ¶ added in v0.7.0
Describe returns the element info Returned json: https://chromedevtools.github.io/devtools-protocol/tot/DOM#type-Node
func (*Element) Element ¶ added in v0.5.0
Element returns the first child that matches the css selector
func (*Element) ElementByJS ¶ added in v0.5.0
ElementByJS returns the element from the return value of the js
func (*Element) ElementByJSE ¶ added in v0.5.0
ElementByJSE doc is similar to the method ElementByJS
func (*Element) ElementMatches ¶ added in v0.9.0
ElementMatches returns the first element in the page that matches the CSS selector and its text matches the regex. The regex is the js regex, not golang's.
func (*Element) ElementMatchesE ¶ added in v0.9.3
ElementMatchesE doc is similar to the method ElementMatches
func (*Element) ElementX ¶ added in v0.9.0
ElementX returns the first child that matches the XPath selector
func (*Element) Elements ¶ added in v0.5.0
Elements returns all elements that match the css selector
func (*Element) ElementsByJS ¶ added in v0.5.0
ElementsByJS returns the elements from the return value of the js
func (*Element) ElementsByJSE ¶ added in v0.5.0
ElementsByJSE doc is similar to the method ElementsByJS
func (*Element) ElementsX ¶ added in v0.9.0
ElementsX returns all elements that match the XPath selector
func (*Element) ElementsXE ¶ added in v0.9.0
ElementsXE doc is similar to the method ElementsX
func (*Element) Eval ¶
Eval evaluates js function on the element, the first param must be a js function definition For example: el.Eval(`name => this.getAttribute(name)`, "value")
func (*Element) GetContext ¶ added in v0.23.1
GetContext returns the current context
func (*Element) HasMatches ¶ added in v0.24.3
HasMatches an element that matches the css selector and its text matches the regex.
func (*Element) HasMatchesE ¶ added in v0.24.3
HasMatchesE doc is similar to the method HasMatches
func (*Element) Input ¶
Input wll click the element and input the text. To empty the input you can use something like el.SelectAllText().Input("")
func (*Element) Release ¶ added in v0.12.0
func (el *Element) Release()
Release remote object on browser
func (*Element) Resource ¶ added in v0.10.0
Resource returns the binary of the "src" properly, such as the image or audio file.
func (*Element) Screenshot ¶ added in v0.22.0
Screenshot of the area of the element
func (*Element) ScreenshotE ¶ added in v0.22.0
func (el *Element) ScreenshotE(format proto.PageCaptureScreenshotFormat, quality int) ([]byte, error)
ScreenshotE of the area of the element
func (*Element) ScrollIntoView ¶ added in v0.27.3
ScrollIntoView scrolls the current element into the visible area of the browser window if it's not already within the visible area.
func (*Element) ScrollIntoViewE ¶ added in v0.27.3
ScrollIntoViewE doc is similar to the method ScrollIntoViewIfNeeded
func (*Element) Select ¶
Select the option elements that match the selectors, the selector can be text content or css selector
func (*Element) SelectAllText ¶ added in v0.16.4
SelectAllText selects all text
func (*Element) SelectAllTextE ¶ added in v0.16.8
SelectAllTextE doc is similar to the method SelectAllText
func (*Element) SelectText ¶ added in v0.16.4
SelectText selects the text that matches the regular expression
func (*Element) SelectTextE ¶ added in v0.16.4
SelectTextE doc is similar to the method SelectText
func (*Element) ShadowRoot ¶ added in v0.25.8
ShadowRoot returns the shadow root of this element
func (*Element) ShadowRootE ¶ added in v0.25.8
ShadowRootE returns the shadow root of this element
func (*Element) Visible ¶ added in v0.16.3
Visible returns true if the element is visible on the page
func (*Element) WaitInvisible ¶
WaitInvisible until the element is not visible or removed
func (*Element) WaitInvisibleE ¶
WaitInvisibleE doc is similar to the method WaitInvisible
func (*Element) WaitStable ¶ added in v0.10.0
WaitStable waits until the size and position are stable. Useful when waiting for the animation of modal or button to complete so that we can simulate the mouse to move to it and click on it.
func (*Element) WaitStableE ¶ added in v0.10.0
WaitStableE not using requestAnimation here because it can trigger to many checks, or miss checks for jQuery css animation.
func (*Element) WaitVisible ¶
WaitVisible until the element is visible
func (*Element) WaitVisibleE ¶
WaitVisibleE doc is similar to the method WaitVisible
type Elements ¶ added in v0.9.0
type Elements []*Element
Elements provides some helpers to deal with element list
type ErrCode ¶ added in v0.30.0
type ErrCode string
ErrCode for errors
const ( // ErrExpectElement error code ErrExpectElement ErrCode = "expect js to return an element" // ErrExpectElements error code ErrExpectElements ErrCode = "expect js to return an array of elements" // ErrElementNotFound error code ErrElementNotFound ErrCode = "cannot find element" // ErrWaitJSTimeout error code ErrWaitJSTimeout ErrCode = "wait js timeout" // ErrSrcNotFound error code ErrSrcNotFound ErrCode = "element doesn't have src attribute" // ErrEval error code ErrEval ErrCode = "eval error" ErrNavigation ErrCode = "navigation failed" )
type Hijack ¶ added in v0.39.0
type Hijack struct { Request *HijackRequest Response *HijackResponse OnError func(error) // Skip to next handler Skip bool }
Hijack context
func (*Hijack) LoadResponse ¶ added in v0.39.0
func (h *Hijack) LoadResponse()
LoadResponse will send request to the real destination and load the response as default response to override.
func (*Hijack) LoadResponseE ¶ added in v0.39.0
LoadResponseE will send request to the real destination and load the response as default response to override.
type HijackRequest ¶ added in v0.39.0
type HijackRequest struct {
// contains filtered or unexported fields
}
HijackRequest context
func (*HijackRequest) Body ¶ added in v0.39.0
func (ctx *HijackRequest) Body() string
Body of the request, devtools API doesn't support binary data yet, only string can be captured.
func (*HijackRequest) Header ¶ added in v0.39.0
func (ctx *HijackRequest) Header(key string) string
Header via a key
func (*HijackRequest) Headers ¶ added in v0.39.0
func (ctx *HijackRequest) Headers() proto.NetworkHeaders
Headers of request
func (*HijackRequest) JSONBody ¶ added in v0.39.0
func (ctx *HijackRequest) JSONBody() gjson.Result
JSONBody of the request
func (*HijackRequest) Method ¶ added in v0.39.0
func (ctx *HijackRequest) Method() string
Method of the request
func (*HijackRequest) SetBody ¶ added in v0.39.0
func (ctx *HijackRequest) SetBody(obj interface{})
SetBody of the request, if obj is []byte or string, raw body will be used, else it will be encoded as json.
func (*HijackRequest) SetHeader ¶ added in v0.39.0
func (ctx *HijackRequest) SetHeader(pairs ...string)
SetHeader via key-value pairs
func (*HijackRequest) SetMethod ¶ added in v0.39.0
func (ctx *HijackRequest) SetMethod(name string)
SetMethod of request
func (*HijackRequest) SetQuery ¶ added in v0.39.0
func (ctx *HijackRequest) SetQuery(pairs ...interface{})
SetQuery of the request, example Query(k, v, k, v ...)
func (*HijackRequest) SetURL ¶ added in v0.39.0
func (ctx *HijackRequest) SetURL(url string)
SetURL of the request
func (*HijackRequest) URL ¶ added in v0.39.0
func (ctx *HijackRequest) URL() *url.URL
URL of the request
type HijackResponse ¶ added in v0.39.0
type HijackResponse struct {
// contains filtered or unexported fields
}
HijackResponse context
func (*HijackResponse) Body ¶ added in v0.39.0
func (ctx *HijackResponse) Body() []byte
Body of response
func (*HijackResponse) BodyE ¶ added in v0.39.0
func (ctx *HijackResponse) BodyE() ([]byte, error)
BodyE of response
func (*HijackResponse) Header ¶ added in v0.39.0
func (ctx *HijackResponse) Header(key string) string
Header via key
func (*HijackResponse) HeaderE ¶ added in v0.39.0
func (ctx *HijackResponse) HeaderE(key string) (string, error)
HeaderE via key
func (*HijackResponse) Headers ¶ added in v0.39.0
func (ctx *HijackResponse) Headers() http.Header
Headers of request
func (*HijackResponse) HeadersE ¶ added in v0.39.0
func (ctx *HijackResponse) HeadersE() (http.Header, error)
HeadersE of request
func (*HijackResponse) JSONBody ¶ added in v0.39.0
func (ctx *HijackResponse) JSONBody() gjson.Result
JSONBody of response
func (*HijackResponse) SetBody ¶ added in v0.39.0
func (ctx *HijackResponse) SetBody(obj interface{})
SetBody of response, if obj is []byte, raw body will be used, else it will be encoded as json
func (*HijackResponse) SetHeader ¶ added in v0.39.0
func (ctx *HijackResponse) SetHeader(pairs ...string)
SetHeader via key-value pairs
func (*HijackResponse) SetStatusCode ¶ added in v0.39.0
func (ctx *HijackResponse) SetStatusCode(code int)
SetStatusCode of response
func (*HijackResponse) StatusCode ¶ added in v0.39.0
func (ctx *HijackResponse) StatusCode() int
StatusCode of response
func (*HijackResponse) StatusCodeE ¶ added in v0.39.0
func (ctx *HijackResponse) StatusCodeE() (int, error)
StatusCodeE of response
func (*HijackResponse) StringBody ¶ added in v0.39.0
func (ctx *HijackResponse) StringBody() string
StringBody of response
type HijackRouter ¶ added in v0.39.0
type HijackRouter struct {
// contains filtered or unexported fields
}
HijackRouter context
func (*HijackRouter) Add ¶ added in v0.39.0
func (r *HijackRouter) Add(pattern string, handler func(*Hijack))
Add a hijack handler to router, the doc of the pattern is the same as "proto.FetchRequestPattern.URLPattern". You can add new handler even after the "Run" is called.
func (*HijackRouter) AddE ¶ added in v0.39.0
func (r *HijackRouter) AddE(pattern string, handler func(*Hijack)) error
AddE a hijack handler to router, the doc of the pattern is the same as "proto.FetchRequestPattern.URLPattern". You can add new handler even after the "Run" is called.
func (*HijackRouter) Remove ¶ added in v0.39.0
func (r *HijackRouter) Remove(pattern string)
Remove handler via the pattern
func (*HijackRouter) RemoveE ¶ added in v0.39.0
func (r *HijackRouter) RemoveE(pattern string) error
RemoveE handler via the pattern
func (*HijackRouter) Run ¶ added in v0.39.0
func (r *HijackRouter) Run()
Run the router, after you call it, you shouldn't add new handler to it.
type Keyboard ¶
type Keyboard struct {
// contains filtered or unexported fields
}
Keyboard represents the keyboard on a page, it's always related the main frame
func (*Keyboard) InsertText ¶ added in v0.5.0
InsertText like paste text into the page
func (*Keyboard) InsertTextE ¶ added in v0.5.0
InsertTextE doc is similar to the method InsertText
type Mouse ¶
type Mouse struct {
// contains filtered or unexported fields
}
Mouse represents the mouse on a page, it's always related the main frame
func (*Mouse) Click ¶
func (m *Mouse) Click(button proto.InputMouseButton)
Click will press then release the button
func (*Mouse) ClickE ¶
func (m *Mouse) ClickE(button proto.InputMouseButton) error
ClickE doc is similar to the method Click
func (*Mouse) DownE ¶
func (m *Mouse) DownE(button proto.InputMouseButton, clicks int64) error
DownE doc is similar to the method Down
type Page ¶
type Page struct { TargetID proto.TargetTargetID SessionID proto.TargetSessionID FrameID proto.PageFrameID // devices Mouse *Mouse Keyboard *Keyboard // contains filtered or unexported fields }
Page represents the webpage
func (*Page) AddScriptTag ¶ added in v0.24.0
AddScriptTag to page. If url is empty, content will be used.
func (*Page) AddScriptTagE ¶ added in v0.24.0
AddScriptTagE to page. If url is empty, content will be used.
func (*Page) AddStyleTag ¶ added in v0.24.0
AddStyleTag to page. If url is empty, content will be used.
func (*Page) AddStyleTagE ¶ added in v0.24.0
AddStyleTagE to page. If url is empty, content will be used.
func (*Page) CallContext ¶ added in v0.29.0
CallContext parameters for proto
func (*Page) Context ¶ added in v0.12.0
Context creates a clone with a context that inherits the previous one
func (*Page) Cookies ¶ added in v0.27.3
func (p *Page) Cookies(urls ...string) []*proto.NetworkCookie
Cookies returns the page cookies. By default it will return the cookies for current page. The urls is the list of URLs for which applicable cookies will be fetched.
func (*Page) CookiesE ¶ added in v0.27.3
func (p *Page) CookiesE(urls []string) ([]*proto.NetworkCookie, error)
CookiesE returns the page cookies. By default it will return the cookies for current page. The urls is the list of URLs for which applicable cookies will be fetched.
func (*Page) DisableDomain ¶ added in v0.39.1
DisableDomain and returns a recover function to restore previous state
func (*Page) EachEvent ¶ added in v0.31.1
func (p *Page) EachEvent(fn interface{}) (wait func())
EachEvent of the specified event type, if the fn returns true the event loop will stop. The fn can accpet multiple events, such as EachEventE(func(e1 *proto.PageLoadEventFired, e2 *proto.PageLifecycleEvent) {}), only one argument will be non-null, others will null.
func (*Page) Element ¶
Element retries until returns the first element in the page that matches the CSS selector
func (*Page) ElementByJS ¶ added in v0.4.4
ElementByJS retries until returns the element from the return value of the js function
func (*Page) ElementByJSE ¶ added in v0.4.4
func (p *Page) ElementByJSE(sleeper kit.Sleeper, thisID proto.RuntimeRemoteObjectID, js string, params Array) (*Element, error)
ElementByJSE returns the element from the return value of the js function. sleeper is used to sleep before retry the operation. If sleeper is nil, no retry will be performed. thisID is the this value of the js function, when thisID is "", the this context will be the "window". If the js function returns "null", ElementByJSE will retry, you can use custom sleeper to make it only retry once.
func (*Page) ElementE ¶
func (p *Page) ElementE(sleeper kit.Sleeper, objectID proto.RuntimeRemoteObjectID, selector string) (*Element, error)
ElementE finds element by css selector
func (*Page) ElementFromObjectID ¶ added in v0.34.0
func (p *Page) ElementFromObjectID(id proto.RuntimeRemoteObjectID) *Element
ElementFromObjectID creates an Element from the remote object id.
func (*Page) ElementMatches ¶ added in v0.9.0
ElementMatches retries until returns the first element in the page that matches the CSS selector and its text matches the regex. The regex is the js regex, not golang's.
func (*Page) ElementMatchesE ¶ added in v0.9.3
func (p *Page) ElementMatchesE(sleeper kit.Sleeper, objectID proto.RuntimeRemoteObjectID, selector, regex string) (*Element, error)
ElementMatchesE doc is similar to the method ElementMatches
func (*Page) ElementX ¶ added in v0.9.0
ElementX retries until returns the first element in the page that matches the XPath selector
func (*Page) ElementXE ¶ added in v0.9.0
func (p *Page) ElementXE(sleeper kit.Sleeper, objectID proto.RuntimeRemoteObjectID, xpath string) (*Element, error)
ElementXE finds elements by XPath
func (*Page) ElementsByJS ¶ added in v0.4.4
ElementsByJS returns the elements from the return value of the js
func (*Page) ElementsByJSE ¶ added in v0.4.4
func (p *Page) ElementsByJSE(thisID proto.RuntimeRemoteObjectID, js string, params Array) (Elements, error)
ElementsByJSE is different from ElementByJSE, it doesn't do retry
func (*Page) ElementsX ¶ added in v0.9.0
ElementsX returns all elements that match the XPath selector
func (*Page) ElementsXE ¶ added in v0.9.0
ElementsXE doc is similar to the method ElementsX
func (*Page) EnableDomain ¶ added in v0.38.0
EnableDomain and returns a recover function to restore previous state
func (*Page) Eval ¶
Eval js on the page. The first param must be a js function definition. For example page.Eval(`n => n + 1`, 1) will return 2
func (*Page) EvalE ¶
func (p *Page) EvalE(byValue bool, thisID proto.RuntimeRemoteObjectID, js string, jsArgs Array) (*proto.RuntimeRemoteObject, error)
EvalE thisID is the remote objectID that will be the this of the js function, if it's empty "window" will be used. Set the byValue to true to reduce memory occupation.
func (*Page) GetContext ¶ added in v0.23.1
GetContext returns the current context
func (*Page) GetDownloadFile ¶ added in v0.6.0
GetDownloadFile of the next download url that matches the pattern, returns the file content.
func (*Page) GetDownloadFileE ¶ added in v0.6.0
GetDownloadFileE of the next download url that matches the pattern, returns the file content. The handler will be used once and removed.
func (*Page) GetWindow ¶ added in v0.13.5
func (p *Page) GetWindow() *proto.BrowserBounds
GetWindow get window bounds
func (*Page) GetWindowE ¶ added in v0.13.5
func (p *Page) GetWindowE() (*proto.BrowserBounds, error)
GetWindowE doc is similar to the method GetWindow
func (*Page) HandleDialog ¶ added in v0.4.5
HandleDialog accepts or dismisses next JavaScript initiated dialog (alert, confirm, prompt, or onbeforeunload)
func (*Page) HandleDialogE ¶ added in v0.4.5
HandleDialogE doc is similar to the method HandleDialog
func (*Page) HasMatches ¶ added in v0.9.3
HasMatches an element that matches the css selector and its text matches the regex.
func (*Page) HasMatchesE ¶ added in v0.9.3
HasMatchesE doc is similar to the method HasMatches
func (*Page) HijackRequests ¶ added in v0.39.0
func (p *Page) HijackRequests() *HijackRouter
HijackRequests same as Browser.HijackRequests, but scoped with the page
func (*Page) ObjectToJSON ¶ added in v0.39.0
func (p *Page) ObjectToJSON(obj *proto.RuntimeRemoteObject) proto.JSON
ObjectToJSON by remote object
func (*Page) ObjectToJSONE ¶ added in v0.39.0
ObjectToJSONE by object id
func (*Page) ObjectsToJSON ¶ added in v0.39.0
func (p *Page) ObjectsToJSON(list []*proto.RuntimeRemoteObject) proto.JSON
ObjectsToJSON by remote objects
func (*Page) PDFE ¶ added in v0.25.2
func (p *Page) PDFE(req *proto.PagePrintToPDF) ([]byte, error)
PDFE prints page as PDF
func (*Page) Release ¶ added in v0.12.0
func (p *Page) Release(objectID proto.RuntimeRemoteObjectID) *Page
Release remote object
func (*Page) ReleaseE ¶ added in v0.12.0
func (p *Page) ReleaseE(objectID proto.RuntimeRemoteObjectID) error
ReleaseE doc is similar to the method Release
func (*Page) Screenshot ¶ added in v0.10.0
Screenshot the page and returns the binary of the image If the toFile is "", it will save output to "tmp/screenshots" folder, time as the file name.
func (*Page) ScreenshotE ¶ added in v0.10.0
ScreenshotE options: https://chromedevtools.github.io/devtools-protocol/tot/Page#method-captureScreenshot
func (*Page) ScreenshotFullPage ¶ added in v0.34.2
ScreenshotFullPage including all scrollable content and returns the binary of the image.
func (*Page) SetCookies ¶ added in v0.26.1
func (p *Page) SetCookies(cookies ...*proto.NetworkCookieParam) *Page
SetCookies of the page. Cookie format: https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setCookie
func (*Page) SetCookiesE ¶ added in v0.26.1
func (p *Page) SetCookiesE(cookies []*proto.NetworkCookieParam) error
SetCookiesE of the page. Cookie format: https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setCookie
func (*Page) SetExtraHeaders ¶ added in v0.29.1
SetExtraHeaders whether to always send extra HTTP headers with the requests from this page. The arguments are key-value pairs, you can set multiple key-value pairs at the same time.
func (*Page) SetExtraHeadersE ¶ added in v0.29.1
SetExtraHeadersE whether to always send extra HTTP headers with the requests from this page.
func (*Page) SetUserAgent ¶ added in v0.29.2
func (p *Page) SetUserAgent(req *proto.NetworkSetUserAgentOverride) *Page
SetUserAgent Allows overriding user agent with the given string.
func (*Page) SetUserAgentE ¶ added in v0.29.2
func (p *Page) SetUserAgentE(req *proto.NetworkSetUserAgentOverride) error
SetUserAgentE Allows overriding user agent with the given string.
func (*Page) Sleeper ¶ added in v0.8.0
Sleeper returns the default sleeper for retry, it uses backoff and requestIdleCallback to wait
func (*Page) StopLoading ¶ added in v0.29.4
StopLoading forces the page stop all navigations and pending resource fetches.
func (*Page) StopLoadingE ¶ added in v0.29.4
StopLoadingE forces the page stop navigation and pending resource fetches.
func (*Page) ViewportE ¶ added in v0.13.5
func (p *Page) ViewportE(params *proto.EmulationSetDeviceMetricsOverride) error
ViewportE doc is similar to the method Viewport
func (*Page) WaitE ¶ added in v0.39.0
func (p *Page) WaitE(sleeper kit.Sleeper, thisID proto.RuntimeRemoteObjectID, js string, params Array) error
WaitE js function until it returns true
func (*Page) WaitEvent ¶ added in v0.5.0
WaitEvent waits for the next event for one time. It will also load the data into the event object.
func (*Page) WaitIdle ¶ added in v0.16.1
WaitIdle wait until the next window.requestIdleCallback is called.
func (*Page) WaitLoad ¶ added in v0.13.2
WaitLoad wait until the `window.onload` is complete, resolve immediately if already fired.
func (*Page) WaitRequestIdle ¶ added in v0.16.3
WaitRequestIdle returns a wait function that waits until the page doesn't send request for 300ms. You can pass regular expressions to exclude the requests by their url.
func (*Page) WaitRequestIdleE ¶ added in v0.16.3
WaitRequestIdleE returns a wait function that waits until no request for d duration. Use the includes and excludes regexp list to filter the requests by their url. Such as set n to 1 if there's a polling request.
func (*Page) WindowE ¶ added in v0.13.5
func (p *Page) WindowE(bounds *proto.BrowserBounds) error
WindowE https://chromedevtools.github.io/devtools-protocol/tot/Browser#type-Bounds
func (*Page) WindowFullscreen ¶ added in v0.19.0
WindowFullscreen the window
func (*Page) WindowMaximize ¶ added in v0.19.0
WindowMaximize the window
func (*Page) WindowMinimize ¶ added in v0.19.0
WindowMinimize the window
func (*Page) WindowNormal ¶ added in v0.19.0
WindowNormal the window size
type Pages ¶ added in v0.22.2
type Pages []*Page
Pages provides some helpers to deal with page list
func (Pages) Find ¶ added in v0.22.2
Find the page that has the specified element with the css selector