브라우저 연결
각 세션에는 전용 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 조작이 없으면 자동으로 회수됩니다. 장시간 작업은 페이지를 정기적으로 조작하거나 다시 전원을 켜는 점에 유의하세요.