[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-7471c447-7a75-48d2-a5d4-d9f4c5e45fbc":3,"$fzVhExzRtQCco_0ny_6gzEhuenh0J9MKP9lMDihbKsCo":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"7471c447-7a75-48d2-a5d4-d9f4c5e45fbc","go-rod-master","Go-rod（Chrome DevTools Protocol）浏览器自动化和网页抓取全面指南，包括隐形反机器人检测模式。","cat_life_career","mod_other","sickn33,other","---\nname: go-rod-master\ndescription: \"Comprehensive guide for browser automation and web scraping with go-rod (Chrome DevTools Protocol) including stealth anti-bot-detection patterns.\"\nrisk: safe\nsource: \"https:\u002F\u002Fgithub.com\u002Fgo-rod\u002Frod\"\ndate_added: \"2026-02-27\"\n---\n\n# Go-Rod Browser Automation Master\n\n## Overview\n\n[Rod](https:\u002F\u002Fgithub.com\u002Fgo-rod\u002Frod) is a high-level Go driver built directly on the [Chrome DevTools Protocol](https:\u002F\u002Fchromedevtools.github.io\u002Fdevtools-protocol\u002F) for browser automation and web scraping. Unlike wrappers around other tools, Rod communicates with the browser natively via CDP, providing thread-safe operations, chained context design for timeouts\u002Fcancellation, auto-wait for elements, correct iframe\u002Fshadow DOM handling, and zero zombie browser processes.\n\nThe companion library [go-rod\u002Fstealth](https:\u002F\u002Fgithub.com\u002Fgo-rod\u002Fstealth) injects anti-bot-detection evasions based on [puppeteer-extra stealth](https:\u002F\u002Fgithub.com\u002Fnichochar\u002Fpuppeteer-extra\u002Ftree\u002Fmaster\u002Fpackages\u002Fextract-stealth-evasions), hiding headless browser fingerprints from detection systems.\n\n## When to Use This Skill\n\n- Use when the user asks to **scrape**, **automate**, or **test** a website using Go.\n- Use when the user needs a **headless browser** for dynamic\u002FSPA content (React, Vue, Angular).\n- Use when the user mentions **stealth**, **anti-bot**, **avoiding detection**, **Cloudflare**, or **bot detection bypass**.\n- Use when the user wants to work with the **Chrome DevTools Protocol (CDP)** directly from Go.\n- Use when the user needs to **intercept** or **hijack** network requests in a browser context.\n- Use when the user asks about **concurrent browser scraping** or **page pooling** in Go.\n- Use when the user is migrating from **chromedp** or **Playwright Go** and wants a simpler API.\n\n## Safety & Risk\n\n**Risk Level: 🔵 Safe**\n\n- **Read-Only by Default:** Default behavior is navigating and reading page content (scraping\u002Ftesting).\n- **Isolated Contexts:** Browser contexts are sandboxed; cookies and storage do not persist unless explicitly saved.\n- **Resource Cleanup:** Designed around Go's `defer` pattern — browsers and pages close automatically.\n- **No External Mutations:** Does not modify external state unless the script explicitly submits forms or POSTs data.\n\n## Installation\n\n```bash\n# Core rod library\ngo get github.com\u002Fgo-rod\u002Frod@latest\n\n# Stealth anti-detection plugin (ALWAYS include for production scraping)\ngo get github.com\u002Fgo-rod\u002Fstealth@latest\n```\n\nRod auto-downloads a compatible Chromium binary on first run. To pre-download:\n\n```bash\ngo run github.com\u002Fnichochar\u002Fgo-rod.github.io\u002Fcmd\u002Flauncher@latest\n```\n\n## Core Concepts\n\n### Browser Lifecycle\n\nRod manages three layers: **Browser → Page → Element**.\n\n```go\n\u002F\u002F Launch and connect to a browser\nbrowser := rod.New().MustConnect()\ndefer browser.MustClose()\n\n\u002F\u002F Create a page (tab)\npage := browser.MustPage(\"https:\u002F\u002Fexample.com\")\n\n\u002F\u002F Find an element\nel := page.MustElement(\"h1\")\nfmt.Println(el.MustText())\n```\n\n### Must vs Error Patterns\n\nRod provides two API styles for every operation:\n\n| Style | Method | Use Case |\n|:------|:-------|:---------|\n| **Must** | `MustElement()`, `MustClick()`, `MustText()` | Scripting, debugging, prototyping. Panics on error. |\n| **Error** | `Element()`, `Click()`, `Text()` | Production code. Returns `error` for explicit handling. |\n\n**Production pattern:**\n\n```go\nel, err := page.Element(\"#login-btn\")\nif err != nil {\n    return fmt.Errorf(\"login button not found: %w\", err)\n}\nif err := el.Click(proto.InputMouseButtonLeft, 1); err != nil {\n    return fmt.Errorf(\"click failed: %w\", err)\n}\n```\n\n**Scripting pattern with Try:**\n\n```go\nerr := rod.Try(func() {\n    page.MustElement(\"#login-btn\").MustClick()\n})\nif errors.Is(err, context.DeadlineExceeded) {\n    log.Println(\"timeout finding login button\")\n}\n```\n\n### Context & Timeout\n\nRod uses Go's `context.Context` for cancellation and timeouts. Context propagates recursively to all child operations.\n\n```go\n\u002F\u002F Set a 5-second timeout for the entire operation chain\npage.Timeout(5 * time.Second).\n    MustWaitLoad().\n    MustElement(\"title\").\n    CancelTimeout(). \u002F\u002F subsequent calls are not bound by the 5s timeout\n    Timeout(30 * time.Second).\n    MustText()\n```\n\n### Element Selectors\n\nRod supports multiple selector strategies:\n\n```go\n\u002F\u002F CSS selector (most common)\npage.MustElement(\"div.content > p.intro\")\n\n\u002F\u002F CSS selector with text regex matching\npage.MustElementR(\"button\", \"Submit|Send\")\n\n\u002F\u002F XPath\npage.MustElementX(\"\u002F\u002Fdiv[@class='content']\u002F\u002Fp\")\n\n\u002F\u002F Search across iframes and shadow DOM (like DevTools Ctrl+F)\npage.MustSearch(\".deeply-nested-element\")\n```\n\n### Auto-Wait\n\nRod automatically retries element queries until the element appears or the context times out. You do not need manual sleeps:\n\n```go\n\u002F\u002F This will automatically wait until the element exists\nel := page.MustElement(\"#dynamic-content\")\n\n\u002F\u002F Wait until the element is stable (position\u002Fsize not changing)\nel.MustWaitStable().MustClick()\n\n\u002F\u002F Wait until page has no pending network requests\nwait := page.MustWaitRequestIdle()\npage.MustElement(\"#search\").MustInput(\"query\")\nwait()\n```\n\n---\n\n## Stealth & Anti-Bot Detection (go-rod\u002Fstealth)\n\n> **IMPORTANT:** For any production scraping or automation against real websites, ALWAYS use `stealth.MustPage()` instead of `browser.MustPage()`. This is the single most important step for avoiding bot detection.\n\n### How Stealth Works\n\nThe `go-rod\u002Fstealth` package injects JavaScript evasions into every new page that:\n\n- **Remove `navigator.webdriver`** — the primary headless detection signal.\n- **Spoof WebGL vendor\u002Frenderer** — presents real GPU info (e.g., \"Intel Inc.\" \u002F \"Intel Iris OpenGL Engine\") instead of headless markers like \"Google SwiftShader\".\n- **Fix Chrome plugin array** — reports proper `PluginArray` type with realistic plugin count.\n- **Patch permissions API** — returns `\"prompt\"` instead of bot-revealing values.\n- **Set realistic languages** — reports `en-US,en` instead of empty arrays.\n- **Fix broken image dimensions** — headless browsers report 0x0; stealth fixes this to 16x16.\n\n### Usage\n\n**Creating a stealth page (recommended for all production use):**\n\n```go\nimport (\n    \"github.com\u002Fgo-rod\u002Frod\"\n    \"github.com\u002Fgo-rod\u002Fstealth\"\n)\n\nbrowser := rod.New().MustConnect()\ndefer browser.MustClose()\n\n\u002F\u002F Use stealth.MustPage instead of browser.MustPage\npage := stealth.MustPage(browser)\npage.MustNavigate(\"https:\u002F\u002Fbot.sannysoft.com\")\n```\n\n**With error handling:**\n\n```go\npage, err := stealth.Page(browser)\nif err != nil {\n    return fmt.Errorf(\"failed to create stealth page: %w\", err)\n}\npage.MustNavigate(\"https:\u002F\u002Fexample.com\")\n```\n\n**Using stealth.JS directly (advanced — for custom page creation):**\n\n```go\n\u002F\u002F If you need to create the page yourself (e.g., with specific options),\n\u002F\u002F inject stealth.JS manually via EvalOnNewDocument\npage := browser.MustPage()\npage.MustEvalOnNewDocument(stealth.JS)\npage.MustNavigate(\"https:\u002F\u002Fexample.com\")\n```\n\n### Verifying Stealth\n\nNavigate to a bot detection test page to verify evasions:\n\n```go\npage := stealth.MustPage(browser)\npage.MustNavigate(\"https:\u002F\u002Fbot.sannysoft.com\")\npage.MustScreenshot(\"stealth_test.png\")\n```\n\nExpected results for a properly stealth-configured browser:\n- **WebDriver**: `missing (passed)`\n- **Chrome**: `present (passed)`\n- **Plugins Length**: `3` (not `0`)\n- **Languages**: `en-US,en`\n\n---\n\n## Implementation Guidelines\n\n### 1. Launcher Configuration\n\nUse the `launcher` package to customize browser launch flags:\n\n```go\nimport \"github.com\u002Fgo-rod\u002Frod\u002Flib\u002Flauncher\"\n\nurl := launcher.New().\n    Headless(true).             \u002F\u002F false for debugging\n    Proxy(\"127.0.0.1:8080\").    \u002F\u002F upstream proxy\n    Set(\"disable-gpu\", \"\").     \u002F\u002F custom Chrome flag\n    Delete(\"use-mock-keychain\"). \u002F\u002F remove a default flag\n    MustLaunch()\n\nbrowser := rod.New().ControlURL(url).MustConnect()\ndefer browser.MustClose()\n```\n\n**Debugging mode (visible browser + slow motion):**\n\n```go\nl := launcher.New().\n    Headless(false).\n    Devtools(true)\ndefer l.Cleanup()\n\nbrowser := rod.New().\n    ControlURL(l.MustLaunch()).\n    Trace(true).\n    SlowMotion(2 * time.Second).\n    MustConnect()\n```\n\n### 2. Proxy Support\n\n```go\n\u002F\u002F Set proxy at launch\nurl := launcher.New().\n    Proxy(\"socks5:\u002F\u002F127.0.0.1:1080\").\n    MustLaunch()\n\nbrowser := rod.New().ControlURL(url).MustConnect()\n\n\u002F\u002F Handle proxy authentication\ngo browser.MustHandleAuth(\"username\", \"password\")()\n\n\u002F\u002F Ignore SSL certificate errors (for MITM proxies)\nbrowser.MustIgnoreCertErrors(true)\n```\n\n### 3. Input Simulation\n\n```go\nimport \"github.com\u002Fgo-rod\u002Frod\u002Flib\u002Finput\"\n\n\u002F\u002F Type into an input field (replaces existing value)\npage.MustElement(\"#email\").MustInput(\"user@example.com\")\n\n\u002F\u002F Simulate keyboard keys\npage.Keyboard.MustType(input.Enter)\n\n\u002F\u002F Press key combinations\npage.Keyboard.MustPress(input.ControlLeft)\npage.Keyboard.MustType(input.KeyA)\npage.Keyboard.MustRelease(input.ControlLeft)\n\n\u002F\u002F Mouse click at coordinates\npage.Mouse.MustClick(input.MouseLeft)\npage.Mouse.MustMoveTo(100, 200)\n```\n\n### 4. Network Request Interception (Hijacking)\n\n```go\nrouter := browser.HijackRequests()\ndefer router.MustStop()\n\n\u002F\u002F Block all image requests\nrouter.MustAdd(\"*.png\", func(ctx *rod.Hijack) {\n    ctx.Response.Fail(proto.NetworkErrorReasonBlockedByClient)\n})\n\n\u002F\u002F Modify request headers\nrouter.MustAdd(\"*api.example.com*\", func(ctx *rod.Hijack) {\n    ctx.Request.Req().Header.Set(\"Authorization\", \"Bearer token123\")\n    ctx.MustLoadResponse()\n})\n\n\u002F\u002F Modify response body\nrouter.MustAdd(\"*.js\", func(ctx *rod.Hijack) {\n    ctx.MustLoadResponse()\n    ctx.Response.SetBody(ctx.Response.Body() + \"\\n\u002F\u002F injected\")\n})\n\ngo router.Run()\n```\n\n### 5. Waiting Strategies\n\n```go\n\u002F\u002F Wait for page load event\npage.MustWaitLoad()\n\n\u002F\u002F Wait for no pending network requests (AJAX idle)\nwait := page.MustWaitRequestIdle()\npage.MustElement(\"#search\").MustInput(\"query\")\nwait()\n\n\u002F\u002F Wait for element to be stable (not animating)\npage.MustElement(\".modal\").MustWaitStable().MustClick()\n\n\u002F\u002F Wait for element to become invisible\npage.MustElement(\".loading\").MustWaitInvisible()\n\n\u002F\u002F Wait for JavaScript condition\npage.MustWait(`() => document.title === 'Ready'`)\n\n\u002F\u002F Wait for specific navigation\u002Fevent\nwait := page.WaitEvent(&proto.PageLoadEventFired{})\npage.MustNavigate(\"https:\u002F\u002Fexample.com\")\nwait()\n```\n\n### 6. Race Selectors (Multiple Outcomes)\n\nHandle pages where the result can be one of several outcomes (e.g., login success vs error):\n\n```go\npage.MustElement(\"#username\").MustInput(\"user\")\npage.MustElement(\"#password\").MustInput(\"pass\").MustType(input.Enter)\n\n\u002F\u002F Race between success and error selectors\nelm := page.Race().\n    Element(\".dashboard\").MustHandle(func(e *rod.Element) {\n        fmt.Println(\"Login successful:\", e.MustText())\n    }).\n    Element(\".error-message\").MustDo()\n\nif elm.MustMatches(\".error-message\") {\n    log.Fatal(\"Login failed:\", elm.MustText())\n}\n```\n\n### 7. Screenshots & PDF\n\n```go\n\u002F\u002F Full-page screenshot\npage.MustScreenshot(\"page.png\")\n\n\u002F\u002F Custom screenshot (JPEG, specific region)\nimg, _ := page.Screenshot(true, &proto.PageCaptureScreenshot{\n    Format:  proto.PageCaptureScreenshotFormatJpeg,\n    Quality: gson.Int(90),\n    Clip: &proto.PageViewport{\n        X: 0, Y: 0, Width: 1280, Height: 800, Scale: 1,\n    },\n})\nutils.OutputFile(\"screenshot.jpg\", img)\n\n\u002F\u002F Scroll screenshot (captures full scrollable page)\nimg, _ := page.MustWaitStable().ScrollScreenshot(nil)\nutils.OutputFile(\"full_page.jpg\", img)\n\n\u002F\u002F PDF export\npage.MustPDF(\"output.pdf\")\n```\n\n### 8. Concurrent Page Pool\n\n```go\npool := rod.NewPagePool(5) \u002F\u002F max 5 concurrent pages\n\ncreate := func() *rod.Page {\n    return browser.MustIncognito().MustPage()\n}\n\nvar wg sync.WaitGroup\nfor _, url := range urls {\n    wg.Add(1)\n    go func(u string) {\n        defer wg.Done()\n\n        page := pool.MustGet(create)\n        defer pool.Put(page)\n\n        page.MustNavigate(u).MustWaitLoad()\n        fmt.Println(page.MustInfo().Title)\n    }(url)\n}\nwg.Wait()\n\npool.Cleanup(func(p *rod.Page) { p.MustClose() })\n```\n\n### 9. Event Handling\n\n```go\n\u002F\u002F Listen for console.log output\ngo page.EachEvent(func(e *proto.RuntimeConsoleAPICalled) {\n    if e.Type == proto.RuntimeConsoleAPICalledTypeLog {\n        fmt.Println(page.MustObjectsToJSON(e.Args))\n    }\n})()\n\n\u002F\u002F Wait for a specific event before proceeding\nwait := page.WaitEvent(&proto.PageLoadEventFired{})\npage.MustNavigate(\"https:\u002F\u002Fexample.com\")\nwait()\n```\n\n### 10. File Download\n\n```go\nwait := browser.MustWaitDownload()\n\npage.MustElementR(\"a\", \"Download PDF\").MustClick()\n\ndata := wait()\nutils.OutputFile(\"downloaded.pdf\", data)\n```\n\n### 11. JavaScript Evaluation\n\n```go\n\u002F\u002F Execute JS on the page\npage.MustEval(`() => console.log(\"hello\")`)\n\n\u002F\u002F Pass parameters and get return value\nresult := page.MustEval(`(a, b) => a + b`, 1, 2)\nfmt.Println(result.Int()) \u002F\u002F 3\n\n\u002F\u002F Eval on a specific element (\"this\" = the DOM element)\ntitle := page.MustElement(\"title\").MustEval(`() => this.innerText`).String()\n\n\u002F\u002F Direct CDP calls for features Rod doesn't wrap\nproto.PageSetAdBlockingEnabled{Enabled: true}.Call(page)\n```\n\n### 12. Loading Chrome Extensions\n\n```go\nextPath, _ := filepath.Abs(\".\u002Fmy-extension\")\n\nu := launcher.New().\n    Set(\"load-extension\", extPath).\n    Headless(false). \u002F\u002F extensions require headed mode\n    MustLaunch()\n\nbrowser := rod.New().ControlURL(u).MustConnect()\n```\n\n---\n\n## Examples\n\nSee the `examples\u002F` directory for complete, runnable Go files:\n- `examples\u002Fbasic_scrape.go` — Minimal scraping example\n- `examples\u002Fstealth_page.go` — Anti-detection with go-rod\u002Fstealth\n- `examples\u002Frequest_hijacking.go` — Intercepting and modifying network requests\n- `examples\u002Fconcurrent_pages.go` — Page pool for concurrent scraping\n\n---\n\n## Best Practices\n\n- ✅ **ALWAYS use `stealth.MustPage(browser)`** instead of `browser.MustPage()` for real-world sites.\n- ✅ **ALWAYS `defer browser.MustClose()`** immediately after connecting.\n- ✅ Use the error-returning API (not `Must*`) in production code.\n- ✅ Set explicit timeouts with `.Timeout()` — never rely on defaults for production.\n- ✅ Use `browser.MustIncognito().MustPage()` for isolated sessions.\n- ✅ Use `PagePool` for concurrent scraping instead of spawning unlimited pages.\n- ✅ Use `MustWaitStable()` before clicking elements that might be animating.\n- ✅ Use `MustWaitRequestIdle()` after actions that trigger AJAX calls.\n- ✅ Use `launcher.New().Headless(false).Devtools(true)` for debugging.\n- ❌ **NEVER** use `time.Sleep()` for waiting — use Rod's built-in wait methods.\n- ❌ **NEVER** create a new `Browser` per task — create one Browser, use multiple `Page` instances.\n- ❌ **NEVER** use `browser.MustPage()` for production scraping — use `stealth.MustPage()`.\n- ❌ **NEVER** ignore errors in production — always handle them explicitly.\n- ❌ **NEVER** forget to defer-close browsers, pages, and hijack routers.\n\n## Common Pitfalls\n\n- **Problem:** Element not found even though it exists on the page.\n  **Solution:** The element may be inside an iframe or shadow DOM. Use `page.MustSearch()` instead of `page.MustElement()` — it searches across all iframes and shadow DOMs.\n\n- **Problem:** Click doesn't work because the element is animating.\n  **Solution:** Call `el.MustWaitStable()` before `el.MustClick()`.\n\n- **Problem:** Bot detection despite using stealth.\n  **Solution:** Combine `stealth.MustPage()` with: randomized viewport sizes, realistic User-Agent strings, human-like input delays between keystrokes, and random idle behaviors (scroll, hover).\n\n- **Problem:** Browser process leaks (zombie processes).\n  **Solution:** Always `defer browser.MustClose()`. Rod uses [leakless](https:\u002F\u002Fgithub.com\u002Fysmood\u002Fleakless) to kill zombies after main process crash, but explicit cleanup is preferred.\n\n- **Problem:** Timeout errors on slow pages.\n  **Solution:** Use chained context: `page.Timeout(30 * time.Second).MustWaitLoad()`. For AJAX-heavy pages, use `MustWaitRequestIdle()` instead of `MustWaitLoad()`.\n\n- **Problem:** HijackRequests router not intercepting requests.\n  **Solution:** You must call `go router.Run()` after setting up routes, and `defer router.MustStop()` for cleanup.\n\n## Limitations\n\n- **CAPTCHAs:** Rod does not include CAPTCHA solving. External services (2captcha, etc.) must be integrated separately.\n- **Extreme Anti-Bot:** While `go-rod\u002Fstealth` handles common detection (WebDriver, plugin fingerprints, WebGL), extremely strict systems (some Cloudflare configurations, Akamai Bot Manager) may still detect automation. Additional measures (residential proxies, human-like behavioral patterns) may be needed.\n- **DRM Content:** Cannot interact with DRM-protected media (e.g., Widevine).\n- **Resource Usage:** Each browser instance consumes significant RAM (~100-300MB+). Use `PagePool` and limit concurrency on memory-constrained systems.\n- **Extensions in Headless:** Chrome extensions do not work in headless mode. Use `Headless(false)` with XVFB for server environments.\n- **Platform:** Requires a Chromium-compatible browser. Does not support Firefox or Safari.\n\n## Documentation References\n\n- [Official Documentation](https:\u002F\u002Fgo-rod.github.io\u002F) — Guides, tutorials, FAQ\n- [Go API Reference](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fgo-rod\u002Frod) — Complete type and method documentation\n- [go-rod\u002Fstealth](https:\u002F\u002Fgithub.com\u002Fgo-rod\u002Fstealth) — Anti-bot detection plugin\n- [Examples (source)](https:\u002F\u002Fgithub.com\u002Fgo-rod\u002Frod\u002Fblob\u002Fmain\u002Fexamples_test.go) — Official example tests\n- [Rod vs Chromedp Comparison](https:\u002F\u002Fgithub.com\u002Fnichochar\u002Fgo-rod.github.io\u002Fblob\u002Fmain\u002Flib\u002Fexamples\u002Fcompare-chromedp) — Migration reference\n- [Chrome DevTools Protocol Docs](https:\u002F\u002Fchromedevtools.github.io\u002Fdevtools-protocol\u002F) — Underlying protocol reference\n- [Chrome CLI Flags Reference](https:\u002F\u002Fpeter.sh\u002Fexperiments\u002Fchromium-command-line-switches) — Launcher flag documentation\n- `references\u002Fapi-reference.md` — Quick-reference cheat sheet\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,183,299,"2026-05-16 13:20:51",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"其他","other","mdi-page-next-outline","其他类型Skill",5,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"职场发展","career","mdi-briefcase-outline","面试准备、简历优化、职业规划",4,575,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"44b9e0c4-a431-4ccc-9aef-49d844039ddc","1.0.0","go-rod-master.zip",13836,"uploads\u002Fskills\u002F7471c447-7a75-48d2-a5d4-d9f4c5e45fbc\u002Fgo-rod-master.zip","e339a9ba6111a81ba5b79661678bb01cda4203c204c17a8c3d4524a0c26ebf5f","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":17915},{\"path\":\"examples\u002Fbasic_scrape.go\",\"isDirectory\":false,\"size\":1288},{\"path\":\"examples\u002Fconcurrent_pages.go\",\"isDirectory\":false,\"size\":1806},{\"path\":\"examples\u002Frequest_hijacking.go\",\"isDirectory\":false,\"size\":2436},{\"path\":\"examples\u002Fstealth_page.go\",\"isDirectory\":false,\"size\":2861},{\"path\":\"references\u002Fapi-reference.md\",\"isDirectory\":false,\"size\":6279}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]