# Scraping Browser Usage Examples

Source: https://docs.evomi.com/scraping-products-instructions/scraping-browser/usage-examples/

Connect to Evomi Scraping Browser using the Chrome DevTools Protocol (CDP) WebSocket. Use your preferred framework and language; examples below show idiomatic setups.

CDP URL format:
```text
wss://browser.evomi.com?key=YOUR_API_KEY&os=windows&proxy_country=US&adblock=true
```
Optional: `os`, `proxy_country`, `adblock=true`. Disable Turnstile solving with `solve_cloudflare=false`.

#### Puppeteer (Node.js)

  ```javascript
  const puppeteer = require('puppeteer');

  (async () => {
    const cdpUrl = 'wss://browser.evomi.com?key=YOUR_API_KEY&os=windows&proxy_country=US&adblock=true';
    const browser = await puppeteer.connect({ browserWSEndpoint: cdpUrl, defaultViewport: null });
    const page = await browser.newPage();
    await page.goto('https://check.evomi.com', { waitUntil: 'networkidle2' });
    console.log(await page.title());
    await browser.close();
  })();
  ```

#### Playwright (Node.js)

    Playwright JavaScript/TypeScript is NOT compatible with the Bun runtime. Use Node.js
  (`node`, `npm`, or `npx`) instead. This incompatibility with the CDP WS protocol is on the Bun side.

  ```javascript
  // WARNING: Do not run under Bun. Playwright JS/TS requires the Node.js runtime.
  const { chromium } = require('playwright');

  (async () => {
    const ws = 'wss://browser.evomi.com?key=YOUR_API_KEY&proxy_country=US';
    const browser = await chromium.connectOverCDP(ws);
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto('https://check.evomi.com');
    console.log(await page.textContent('body'));
    await browser.close();
  })();
  ```

#### Patchright (Python)

  ```python
  from patchright.sync_api import sync_playwright

  cdp = 'wss://browser.evomi.com?key=YOUR_API_KEY&proxy_country=US&adblock=true'

  with sync_playwright() as p:
      browser = p.chromium.connect_over_cdp(cdp)
      context = browser.contexts[0] if browser.contexts else browser.new_context()
      page = context.new_page()
      page.goto('https://check.evomi.com')
      print(page.title())
      browser.close()
  ```

#### Rod (Go)

  ```go
  package main

  import (
      "fmt"
      "github.com/go-rod/rod"
  )

  func main() {
      cdp := "wss://browser.evomi.com?key=YOUR_API_KEY&proxy_country=US&solve_cloudflare=false"
      browser := rod.New().ControlURL(cdp).MustConnect()
      page := browser.MustPage("https://check.evomi.com")
      fmt.Println(page.MustEval("() => document.title"))
      browser.MustClose()
  }
  ```

## Tips for scale
- Reuse a single session to perform multiple tasks sequentially when possible.
- Use `proxy_country` to route traffic geographically without code changes.
