📖 BrowserIP 문서
🌐 한국어

브라우저 연결

각 세션에는 전용 CDP 주소가 있습니다(콘솔에서 "CDP 주소 복사"):

https://browserip.com/s/<id>/<token>

하위 WebSocket은 wss://browserip.com/s/<id>/<token> 아래 devtools 경로를 사용합니다. 클라이언트가 /json 인터페이스에서 받는 webSocketDebuggerUrl은 이미 자동으로 다시 쓰여 있으므로, CDP 주소로 바로 연결하면 되며 WebSocket 주소를 직접 조합할 필요가 없습니다. 각 세션은 독립된 브라우저 인스턴스(독립 프로세스/컨텍스트)를 독점하므로 서로 간섭하지 않습니다.

주의: 이 CDP 주소와 브라우저에서 여는 시각적 페이지 주소는 다릅니다. 시각적 페이지 주소는 https://browserip.com/view/<id>/<token>이며(콘솔에서 "열기"), 사람이 웹에서 직접 조작할 때 사용합니다. /s/ 주소는 프로그램(browser-use / Playwright / Puppeteer)이 CDP에 연결할 때 사용합니다.

browser-use(Python)

from browser_use.browser import BrowserSession
from browser_use.agent.service import Agent

# cdp_url은 콘솔 "CDP 주소 복사"에서 가져옵니다
browser_session = BrowserSession(cdp_url="https://browserip.com/s/<id>/<token>")
agent = Agent(task="...", llm=..., browser_session=browser_session)
await agent.run()

Playwright

Python:

from playwright.async_api import async_playwright

async with async_playwright() as p:
    browser = await p.chromium.connect_over_cdp(
        "https://browserip.com/s/<id>/<token>")
    page = browser.contexts[0].pages[0]
    await page.goto("https://example.com")

JavaScript:

const { chromium } = require('playwright');

const browser = await chromium.connectOverCDP(
  'https://browserip.com/s/<id>/<token>');
const page = browser.contexts()[0].pages()[0];
await page.goto('https://example.com');

Puppeteer(JavaScript)

const puppeteer = require('puppeteer');

const browser = await puppeteer.connect({
  browserURL: 'https://browserip.com/s/<id>/<token>',
});
const page = (await browser.pages())[0];
await page.goto('https://example.com');
⏱️ 연결 중에는 세션을 활성 상태로 유지하세요. 20분 동안 CDP 조작이 없으면 자동으로 회수됩니다. 장시간 작업은 페이지를 정기적으로 조작하거나 다시 전원을 켜는 점에 유의하세요.