📖 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 操作會自動回收;長時間任務注意定期操作頁面或重新啟動。