Page
A Page represents a single browser tab. It handles navigation, JavaScript evaluation, screenshots, and serves as the entry point for element interaction.
Create a Page
Navigation
err = page.Navigate("https://example.com")
err = page.Navigate("https://example.com",
bonk.WithTimeout(30*time.Second),
bonk.WithWaitUntil(bonk.WaitNetworkIdle),
)
err = page.Reload()
err = page.GoBack()
err = page.GoForward()
All navigation methods wait for page load by default. Configure with NavigateOption:
| Option | Default | Description |
|---|---|---|
WithTimeout(time.Duration) |
30s | Maximum wait time |
WithWaitUntil(NavigateWait) |
WaitLoad |
When navigation is considered complete |
NavigateWait values:
| Value | Description |
|---|---|
WaitLoad |
Wait for the load event |
WaitDOMContentLoaded |
Wait for DOMContentLoaded |
WaitNetworkIdle |
Wait until no network requests for 500ms |
Wait for Navigation
Wait for a navigation triggered by something else (e.g. a click):
Wait for URL
Wait until the page URL matches a glob pattern:
Page Info
JavaScript
result, err := page.Evaluate("document.title")
// wait for condition
err = page.WaitForFunction("document.readyState === 'complete'")
// get element handle from JS
el, err := page.EvaluateHandle("document.querySelector('#app')")
// call function on element
val, err := page.EvaluateOn(el, "function(){ return this.textContent }")
Content
Screenshots and PDF
err = page.Screenshot("page.png")
err = page.Screenshot("full.png", bonk.FullPage())
err = page.Screenshot("photo.jpg", bonk.ScreenshotQuality(80))
err = page.PDF("page.pdf")
| Option | Description |
|---|---|
FullPage() |
Capture the full scrollable page |
ScreenshotQuality(int) |
JPEG/WebP quality (0-100) |
Format is determined by file extension: .png, .jpg/.jpeg, .webp.
Viewport
Device Emulation
See Device Emulation for all presets.
Default Timeouts
Set page-level defaults that apply to all operations on this page:
page.SetDefaultTimeout(5 * time.Second) // wait/query operations
page.SetDefaultNavigationTimeout(15 * time.Second) // navigate, reload, etc.
Page-level timeouts override context-level timeouts. If neither is set, the default is 30s.
Context Control
// set deadline
p := page.Timeout(5 * time.Second)
p.Navigate("https://slow-site.com") // fails after 5s
// use custom context
p = page.WithContext(ctx)
See Context Control for details.
Init Scripts
Run JavaScript before any page scripts on every navigation:
Offline Mode
Tab Management
Expose Go Functions
Make a Go function callable from page JavaScript:
unsub, err := page.ExposeFunction("greet", func(args []json.RawMessage) (any, error) {
var name string
json.Unmarshal(args[0], &name)
return "Hello, " + name, nil
})
defer unsub()
result, _ := page.Evaluate(`window.greet("World")`)
fmt.Println(result) // "Hello, World"
Mouse & Keyboard
Low-level input controllers:
page.Mouse().Click(100, 200)
page.Mouse().DragTo(100, 100, 300, 300)
page.Keyboard().Press("Enter")
page.Keyboard().Type("text")
See Mouse & Keyboard for details.