mosheng 发表于 2026-1-22 01:43:38

WebCef3Trigger浏览器和ws的结合,远程触发FBro CEF3 浏览器方案


# WebCef3Trigger

远程触发 CEF3 浏览器的完整方案,使用 FBroSharp 和 WebSocket 实现浏览器自动化。

## 系统架构

```
┌─────────────┐    WebSocket    ┌─────────────┐    Process.Start    ┌─────────────┐
│Node.js    │ ◄──────────────► │   C# 客户端│ ◄──────────────────► │CEF3 浏览器│
│服务端   │                  │(.NET 4.8) │                     │(FBro)      │
└─────────────┘                  └─────────────┘                     └─────────────┘
       │                                                                  │
       │                         fbro-mcp 工具集                            │
       └────────────────────────────────────────────────────────────────────┘
```

## 项目结构

```
WebCef3Trigger/
├── server/                      # Node.js WebSocket 服务端 + 网页端控制台
│   ├── package.json
│   ├── server.js               # WebSocket 服务器主入口
│   ├── browserManager.js       # 浏览器实例管理
│   └── commandHandler.js       # fbro-mcp 命令处理 (CDP)

├── CSharpClient/               # C# WebSocket 客户端
│   ├── CSharpClient.csproj
│   ├── Program.cs
│   ├── WebSocketClient.cs      # WebSocket 通信
│   ├── BrowserLauncher.cs      # 浏览器进程管理
│   ├── MainForm.cs             # 主窗体
│   └── MainForm.Designer.cs

├── FBroBrowser/                # FBro CEF3 浏览器
│   ├── FBroBrowser.csproj
│   ├── Program.cs            # 主入口,命令行解析
│   ├── BrowserConfig.cs      # 配置数据类
│   ├── FBroInitializer.cs      # FBroSharp 初始化
│   ├── FBroWebSocketClient.cs# WebSocket 通信
│   ├── MainForm.cs             # 浏览器窗体
│   └── MainForm.Designer.cs

├── WebCef3Trigger.sln          # Visual Studio 解决方案
├── CLAUDE.md                   # Claude Code 指南
└── README.md                   # 本文件
```

## 快速开始

### 1. 安装 Node.js 依赖

```bash
cd server
npm install
```

### 2. 启动 Node.js 服务端

```bash
cd server
npm start
# 或
node server.js
```

服务端将在端口 8080 启动。

### 2.1 server(网页端控制台)说明(重要)

`server` 不仅是 WebSocket 服务端,也提供一个**网页端控制台**,用于:

- 在浏览器里点击按钮发起 `launch_browser`(启动 FBroBrowser)
- 对已启动的浏览器发送自动化命令(导航/执行JS/截图等)

启动 `server` 后,在本机打开网页端页面:

- `http://localhost:8080/`

页面位于 `server/public/index.html`,按钮点击后会通过 WebSocket/HTTP(以当前实现为准)把“启动浏览器/执行命令”的请求发给后端。

!(https://img.msblog.cc/img/91fbd1d972ed610f6d4385d600e4b3e6.png)

### 3. 构建 C# 项目

使用 Visual Studio 打开 `WebCef3Trigger.sln`,或使用命令行:

```bash
# 还原 NuGet 包
nuget restore WebCef3Trigger.sln

# 构建解决方案
msbuild WebCef3Trigger.sln /p:Configuration=Debug
```

**注意**: FBroBrowser 项目需要安装 FBroSharp.Common NuGet 包(版本 4.21.42)。

### 4. 运行 C# 客户端

启动 `CSharpClient.exe`,点击 "Connect" 连接到服务端。

### 5. 启动浏览器

在 C# 客户端中:
1. 输入目标 URL
2. 设置窗口大小
3. 点击 "Launch" 启动浏览器

### 5.1 CSharpClient 里需要修改 FBroBrowser.exe 路径(重要)

编译 `FBroBrowser` 后,`CSharpClient` 通过 `Process.Start()` 启动 `FBroBrowser.exe`。
默认路径在 `CSharpClient/BrowserLauncher.cs` 构造函数里:

- 文件:`CSharpClient/BrowserLauncher.cs`
- 位置:`BrowserLauncher(string browserExePath = null)` 中的 `_browserExePath`
- 当前默认值(你需要按实际输出目录修改):

`T:\vue\WebCef3Trigger\FBroBrowser\bin\Debug\FBroBrowser.exe`

你可以用两种方式改:

1) 直接改默认路径(最简单)
2) 在创建 `BrowserLauncher` 时传入 `browserExePath`(更灵活,适合不同机器/不同配置)

## 消息协议

所有 WebSocket 通信使用 JSON 格式:

```json
{
"type": "message_type",
"data": { ... }
}
```

### 消息类型

| 类型 | 方向 | 说明 |
|------|------|------|
| `register_client` | C# → Server | 客户端注册 |
| `register_response` | Server → C# | 注册响应 |
| `launch_browser` | Server → C# | 启动浏览器请求 |
| `browser_ready` | FBro → Server | 浏览器就绪通知 |
| `fbro_command` | Server → FBro | 自动化命令 |
| `command_result` | FBro → Server | 命令执行结果 |
| `close_browser` | Server → C# | 关闭浏览器请求 |
| `error` | Any → Any | 错误通知 |

## 支持的自动化命令

通过 Chrome DevTools Protocol (CDP) 执行:

- **导航**: `navigate`, `go_back`, `go_forward`, `refresh`
- **交互**: `click`, `type`
- **获取**: `screenshot`, `get_text`, `get_html`, `evaluate`
- **等待**: `wait_for_element`

### 命令示例

```javascript
// 导航到 URL
{
"type": "fbro_command",
"data": {
    "browserId": 1,
    "command": "navigate",
    "params": { "url": "https://www.baidu.com" }
}
}

// 点击元素
{
"type": "fbro_command",
"data": {
    "browserId": 1,
    "command": "click",
    "params": { "selector": "#submit-btn" }
}
}

// 执行 JavaScript
{
"type": "fbro_command",
"data": {
    "browserId": 1,
    "command": "evaluate",
    "params": { "expression": "document.title" }
}
}
```

## FBroSharp 配置

FBroSharp 初始化使用以下配置:

```csharp
FBroSharpInitSet:
- no_sandbox = true                  // Windows 必需
- multi_threaded_message_loop = true   // 独立消息循环线程
- cache_path = %LocalAppData%\FBroCache
- user_data_path = %LocalAppData%\FBroUserData
- locale = "zh-CN"
- remote_debugging_port = [动态分配]    // 从 9222 开始
- persist_session_cookies = true
- persist_user_preferences = true
- enableprocessmessage = true
```

**重要提示**:
- 使用 `FBroSharp.FBroSharp.Initialize(initSet)` 初始化,**不是** `FBroSharpSetValue`
- 命令行处理必须使用 `IFBroSharpCommandLine`(带 `I` 前缀)
- `Shutdown` 需要 bool 参数

## 测试验证

### 测试 1:基础连接
1. 启动 Node.js 服务端
2. 启动 C# 客户端
3. 验证 WebSocket 连接成功

### 测试 2:浏览器启动
1. 通过 C# 客户端发送启动请求
2. 验证 FBro 浏览器窗口打开
3. 验证 `browser_ready` 消息返回

### 测试 3:自动化操作
1. 发送 `navigate` 命令导航到测试页面
2. 发送 `click` 命令点击元素
3. 发送 `screenshot` 命令截图验证

## 安全注意事项

1. **URL 验证**: C# 客户端包含 URL 清理,防止加载非 http(s) 协议
2. **进程隔离**: 每个浏览器作为独立进程运行,使用唯一调试端口
3. **沙箱配置**: 浏览器以 `no_sandbox=true` 运行以保证兼容性
4. **WebSocket 认证**: 生产环境建议实现基于令牌的认证

## 依赖项

### Node.js
- `ws` - WebSocket 服务器
- `chrome-remote-interface` - Chrome DevTools Protocol 客户端

### C# (.NET 4.8)
- `Newtonsoft.Json` - JSON 序列化
- `FBroSharp.Common` (4.21.42) - CEF3 浏览器框架

## 许可证

MIT License

### 请我喝一杯 ☕

<div style="display: flex; gap: 20px; justify-content: center; align-items: center;">
<div style="text-align: center;">
    <p><strong>支付宝</strong></p>
    <img src="https://img.msblog.cc/image-20250523012804344.png" alt="支付宝" width="200">
</div>
<div style="text-align: center;">
    <p><strong>微信</strong></p>
    <img src="https://img.msblog.cc/image-20250523012814243.png" alt="微信" width="200">
</div>
</div>

### 联系方式:

QQ:1098901025
微信:zhx_ms

> 添加请注明来意


下载地址
**** Hidden Message *****

m183187 发表于 2026-6-30 17:26:23

12312312312312311111111111

milk 发表于 2026-1-22 16:05:46

{:6_314:}{:6_314:}{:6_314:}
页: [1]
查看完整版本: WebCef3Trigger浏览器和ws的结合,远程触发FBro CEF3 浏览器方案