remote-browser 是做什么的?
在沙盒远程机器上控制本地浏览器。当代理在沙盒(无图形界面)中运行时,用于导航网站、与网页交互、填写表单、截图或通过隧道暴露本地开发服务器。
工作原理
- 您在客户端机器上运行一个轻量级脚本(
remote-browser.js)。 - 该脚本暴露一个WebSocket端点,AI代理的Playwright自动化可以通过该端点连接到您的本地Chrome实例。
- 同时,它通过SSH隧道在沙盒机器上暴露一个随机端口,从而将客户端连接路由到AI代理的运行环境。
- AI代理的Playwright引擎连接到该隧道,并能无缝控制您的本地浏览器。
设置
前提条件
- 客户端机器上已安装Node.js(v16+)。
- 已通过SSH密钥配置对沙盒机器的SSH访问。
- 沙盒机器上已安装Playwright(在AI代理环境中,无需GUI)。
步骤1:获取脚本
将 remote-browser.js 下载到您的本地机器。
步骤2:运行客户端
node remote-browser.js
脚本将自动:
- 检测已安装的Chrome/Chromium。
- 以调试模式启动Chrome。
- 建立SSH隧道回到沙盒机器。
- 打印连接详情。
步骤3:在代理中使用
AI代理将自动从环境变量(REMOTE_BROWSER_WS_URL)或通过搜索常见位置(如 ~/.remote-browser/ws-url.txt 和 ~/.remote-browser/pid)来检测连接字符串。
环境变量
| 变量名 | 描述 |
|---|---|
REMOTE_BROWSER_WS_URL | 客户端脚本打印的完整WebSocket URL(通常格式为 ws://localhost:PORT)。 |
REMOTE_BROWSER_PID | (可选)用于清理的远程浏览器进程PID。 |
SSH_TUNNEL_PORT | (可选)覆盖自动选择的SSH隧道端口。 |
示例用法(Playwright)
const { chromium } = require('playwright');
const wsEndpoint = process.env.REMOTE_BROWSER_WS_URL;
async function main() {
const browser = await chromium.connectOverCDP(wsEndpoint);
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();
}
main();
故障排除
- 连接被拒绝:确保Chrome已启动且未被防火墙阻止。客户端脚本运行时会在终端打印状态信息。
- 隧道失败:验证SSH配置。运行
ssh -v your-sandbox-host以检查连接。 - 端口冲突:如果自动选择的端口被占用,脚本会重试不同的端口。您也可以设置
SSH_TUNNEL_PORT环境变量。 - 浏览器未找到:脚本会尝试查找标准位置的Chrome。如果未找到,请确保已安装Chrome/Chromium,或通过
--chrome-path参数提供路径。
清理
使用完毕后,按 Ctrl+C 停止客户端脚本。这将终止Chrome及SSH隧道。如果进程未正确终止,您可能需要手动运行:
kill $(cat ~/.remote-browser/pid) 2>/dev/null; rm -f ~/.remote-browser/pid ~/.remote-browser/ws-url.txt