ブラウザ接続
各セッションには専用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>(コンソールで「開く」)で、人がWebページ内で直接操作するためのものです。/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操作がないと自動的に回収されます。長時間のタスクでは、定期的にページを操作するか、改めて起動してください。