📖 BrowserIP 文档
🌐 中文

浏览器接入

每个会话都有一个专属 CDP 地址(控制台点"复制 CDP 地址"),会话 id 是 UUID 格式:

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 操作会自动回收;长时间任务注意定期操作页面或重新开机。