瀏覽器接入
每個工作階段都有一個專屬 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 操作會自動回收;長時間任務注意定期操作頁面或重新啟動。