Skip to content
Back to skills

046 Api Reference Fd658f95

ASecurity

Cheat sheet for the most-used `go-rod/rod` and `go-rod/stealth` APIs. Every `Must*` method has a corresponding error-returning version (without the `Must` prefix). ---

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
devopsjavascriptgojavaexpressgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 046-api-reference_fd658f95 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 046 Api Reference Fd658f95?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 046 Api Reference Fd658f95
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-046-api-reference-fd658f95/badge)](https://www.skillsdirectory.com/skills/tools-only-046-api-reference-fd658f95)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# Go-Rod API Quick Reference

Cheat sheet for the most-used `go-rod/rod` and `go-rod/stealth` APIs.
Every `Must*` method has a corresponding error-returning version (without the `Must` prefix).

---

## Browser (`rod.Browser`)

| Method | Description |
|:-------|:------------|
| `rod.New().MustConnect()` | Launch new browser and connect |
| `rod.New().ControlURL(url).MustConnect()` | Connect to existing browser via WebSocket URL |
| `browser.MustClose()` | Close browser and all pages |
| `browser.MustPage(url)` | Create new page (tab) and navigate |
| `browser.MustPage()` | Create blank page |
| `browser.MustIncognito()` | Create isolated incognito context |
| `browser.MustIgnoreCertErrors(true)` | Ignore SSL certificate errors |
| `browser.MustHandleAuth(user, pass)` | Handle HTTP basic/proxy auth |
| `browser.HijackRequests()` | Create request interceptor router |
| `browser.MustWaitDownload()` | Wait for a file download to complete |
| `browser.ServeMonitor("")` | Start visual monitoring server |
| `browser.Trace(true)` | Enable verbose tracing |
| `browser.SlowMotion(duration)` | Add delay between actions |
| `rod.NewPagePool(n)` | Create pool of max `n` reusable pages |
| `rod.NewBrowserPool(n)` | Create pool of max `n` reusable browsers |

## Page (`rod.Page`)

| Method | Description |
|:-------|:------------|
| `page.MustNavigate(url)` | Navigate to URL |
| `page.MustWaitLoad()` | Wait for `load` event |
| `page.MustWaitStable()` | Wait until page DOM is stable |
| `page.MustWaitRequestIdle()` | Wait until no pending network requests |
| `page.MustWaitIdle()` | Wait for both load and request idle |
| `page.MustWait(js)` | Wait for JS expression to return truthy |
| `page.MustElement(selector)` | Find element by CSS selector (auto-wait) |
| `page.MustElementR(selector, regex)` | Find element by CSS + text regex |
| `page.MustElementX(xpath)` | Find element by XPath |
| `page.MustElements(selector)` | Find all matching elements |
| `page.MustSearch(query)` | Search across iframes + shadow DOM |
| `page.MustEval(js, args...)` | Execute JavaScript on page |
| `page.MustEvalOnNewDocument(js)` | Inject JS before any page script runs |
| `page.MustScreenshot(path)` | Take PNG screenshot |
| `page.MustPDF(path)` | Export page as PDF |
| `page.ScrollScreenshot(opts)` | Full-page scroll screenshot |
| `page.MustInfo()` | Get page info (title, URL) |
| `page.Timeout(duration)` | Set timeout for chained operations |
| `page.CancelTimeout()` | Remove timeout for subsequent operations |
| `page.Race()` | Start race selector (multiple outcomes) |
| `page.Keyboard` | Access keyboard controller |
| `page.Mouse` | Access mouse controller |
| `page.WaitEvent(proto)` | Wait for specific CDP event |
| `page.EachEvent(handler)` | Subscribe to events continuously |
| `page.Event()` | Channel-based event stream |

## Element (`rod.Element`)

| Method | Description |
|:-------|:------------|
| `el.MustClick()` | Click the element |
| `el.MustInput(text)` | Clear and type text into input |
| `el.MustType(keys...)` | Simulate key presses |
| `el.MustText()` | Get text content |
| `el.MustHTML()` | Get outer HTML |
| `el.MustProperty(name)` | Get JS property value |
| `el.MustAttribute(name)` | Get HTML attribute value |
| `el.MustWaitStable()` | Wait until position/size stable |
| `el.MustWaitVisible()` | Wait until element is visible |
| `el.MustWaitInvisible()` | Wait until element is hidden |
| `el.MustParents(selector)` | Find parent elements matching selector |
| `el.MustElements(selector)` | Find child elements |
| `el.MustMatches(selector)` | Check if element matches selector |
| `el.MustEval(js)` | Eval JS with `this` = element |
| `el.MustScreenshot(path)` | Screenshot just this element |

## Input (`rod/lib/input`)

| Constant | Description |
|:---------|:------------|
| `input.Enter` | Enter key |
| `input.Escape` | Escape key |
| `input.Tab` | Tab key |
| `input.Slash` | `/` key |
| `input.ControlLeft` | Left Ctrl |
| `input.ShiftLeft` | Left Shift |
| `input.KeyA` — `input.KeyZ` | Letter keys |
| `input.MouseLeft` | Left mouse button |

## Launcher (`rod/lib/launcher`)

| Method | Description |
|:-------|:------------|
| `launcher.New()` | Create new launcher |
| `l.Headless(bool)` | Enable/disable headless mode |
| `l.Devtools(bool)` | Auto-open DevTools |
| `l.Proxy(addr)` | Set proxy server |
| `l.Set(flag, value)` | Set Chrome CLI flag |
| `l.Delete(flag)` | Remove Chrome CLI flag |
| `l.MustLaunch()` | Launch browser, return control URL |
| `l.Cleanup()` | Kill browser process |
| `launcher.NewBrowser().MustGet()` | Download browser binary |
| `launcher.Open(url)` | Open URL in system browser |

## Stealth (`go-rod/stealth`)

| API | Description |
|:----|:------------|
| `stealth.MustPage(browser)` | Create stealth page (panics on error) |
| `stealth.Page(browser)` | Create stealth page (returns error) |
| `stealth.JS` | Raw JS string with all stealth evasions |

**What stealth.JS injects:**
- Removes `navigator.webdriver` detection
- Spoofs WebGL vendor/renderer to real GPU values
- Fixes Chrome plugin array (`PluginArray` type, count=3)
- Patches permissions API (returns `"prompt"`)
- Sets realistic languages (`en-US,en`)
- Fixes broken image dimensions (16x16 instead of 0x0)

## Network Hijacking (`rod.Hijack`)

| Method | Description |
|:-------|:------------|
| `router.MustAdd(pattern, handler)` | Add URL pattern handler |
| `router.Run()` | Start intercepting (call with `go`) |
| `router.MustStop()` | Stop intercepting |
| `ctx.Request.Req()` | Access `*http.Request` |
| `ctx.Request.URL()` | Get request URL |
| `ctx.LoadResponse(client, true)` | Load response from server |
| `ctx.MustLoadResponse()` | Load response (panics on error) |
| `ctx.Response.Body()` | Get response body |
| `ctx.Response.SetBody(s)` | Modify response body |
| `ctx.Response.Fail(reason)` | Block the request |
| `ctx.Response.Payload()` | Get response metadata |

## Direct CDP (`rod/lib/proto`)

```go
// Call any CDP method directly
proto.PageSetAdBlockingEnabled{Enabled: true}.Call(page)

// Or via generic JSON API
page.Call(ctx, "", "Page.setAdBlockingEnabled", map[string]bool{"enabled": true})
```

Full CDP protocol reference: https://chromedevtools.github.io/devtools-protocol/

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.