返回市场
无头浏览器-MCP

无头浏览器-MCP

作者:Lizzard-Solutions8 星标更新:2025-08-07

项目介绍

无浏览器MCP服务器

这是一个用于Browserless.io浏览器自动化的Model Context Protocol (MCP)服务器。该服务器通过MCP工具提供了一个全面的接口,以访问Browserless的强大浏览器自动化功能。

特性

  • PDF生成:将网页或HTML内容转换为PDF,并可自定义样式
  • 截图:捕获全页或特定元素的截图
  • 内容提取:获取JavaScript执行后渲染的HTML内容
  • 自定义函数:在浏览器上下文中执行JavaScript代码
  • 文件下载:处理文件下载及程序化文件创建
  • 页面导出:导出包含所有资源的网页
  • 性能审计:运行Lighthouse性能审计
  • 反检测:绕过机器人检测和反爬虫措施
  • BrowserQL:执行GraphQL查询以实现高级自动化
  • WebSocket连接:为Puppeteer/Playwright创建连接
  • 健康监控:检查实例健康状况并获取指标
  • 会话管理:监控活动的浏览器会话

安装

  1. 克隆仓库:
git clone https://github.com/Lizzard-Solutions/browserless-mcp.git
cd browserless-mcp
  1. 安装依赖:
npm install
  1. 构建项目:
npm run build
  1. 复制示例环境文件:
cp env.example .env
  1. 编辑.env文件以配置Browserless:
BROWSERLESS_HOST=localhost
BROWSERLESS_PORT=3000
BROWSERLESS_TOKEN=your-secure-token-here
BROWSERLESS_PROTOCOL=http
BROWSERLESS_TIMEOUT=30000
BROWSERLESS_CONCURRENT=5

使用方法

启动MCP服务器

npm start

或者在开发模式下启动:

npm run dev

使用MCP客户端

服务器提供了以下工具:

1. 初始化Browserless连接

{
  "name": "initialize_browserless",
  "arguments": {
    "host": "localhost",
    "port": 3000,
    "token": "your-token",
    "protocol": "http",
    "timeout": 30000,
    "concurrent": 5
  }
}

2. 生成PDF

{
  "name": "generate_pdf",
  "arguments": {
    "url": "https://example.com",
    "options": {
      "format": "A4",
      "printBackground": true,
      "displayHeaderFooter": true,
      "margin": {
        "top": "20mm",
        "bottom": "10mm",
        "left": "10mm",
        "right": "10mm"
      }
    }
  }
}

3. 捕获截图

{
  "name": "take_screenshot",
  "arguments": {
    "url": "https://example.com",
    "options": {
      "type": "png",
      "fullPage": true,
      "quality": 90
    }
  }
}

4. 提取内容

{
  "name": "get_content",
  "arguments": {
    "url": "https://example.com",
    "waitForSelector": {
      "selector": "#content-loaded",
      "timeout": 5000
    }
  }
}

5. 执行自定义函数

{
  "name": "execute_function",
  "arguments": {
    "code": "export default async function ({ page }) { await page.goto('https://example.com'); const title = await page.title(); return { data: { title }, type: 'application/json' }; }",
    "context": {
      "customData": "value"
    }
  }
}

6. 运行性能审计

{
  "name": "run_performance_audit",
  "arguments": {
    "url": "https://example.com",
    "config": {
      "extends": "lighthouse:default",
      "settings": {
        "onlyCategories": ["performance", "accessibility"]
      }
    }
  }
}

7. 绕过机器人检测

{
  "name": "unblock",
  "arguments": {
    "url": "https://protected-site.com",
    "content": true,
    "screenshot": true,
    "stealth": true,
    "blockAds": true
  }
}

8. 执行BrowserQL查询

{
  "name": "execute_browserql",
  "arguments": {
    "query": "mutation { goto(url: \"https://example.com\") { status } click(selector: \"#button\") { success } screenshot { base64 } }",
    "variables": {}
  }
}

9. 创建WebSocket连接

{
  "name": "create_websocket_connection",
  "arguments": {
    "browser": "chromium",
    "library": "puppeteer",
    "stealth": true,
    "viewport": {
      "width": 1920,
      "height": 1080
    }
  }
}

10. 健康和监控

{
  "name": "get_health",
  "arguments": {}
}
{
  "name": "get_sessions",
  "arguments": {}
}
{
  "name": "get_metrics",
  "arguments": {}
}

Browserless设置

Docker设置

# 基本设置
docker run -p 3000:3000 ghcr.io/browserless/chromium

# 带有配置
docker run \
  --rm \
  -p 3000:3000 \
  -e "CONCURRENT=10" \
  -e "TOKEN=your-secure-token" \
  ghcr.io/browserless/chromium

Docker Compose

version: '3.8'

services:
  browserless:
    image: ghcr.io/browserless/chromium:latest
    container_name: browserless
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - TOKEN=your-secure-token-here
      - CONCURRENT=10
      - TIMEOUT=120000
      - HEALTH=true
      - CORS=true
    volumes:
      - ./data:/app/data
      - ./downloads:/app/downloads

高级示例

复杂的网络抓取

{
  "name": "execute_function",
  "arguments": {
    "code": "export default async function ({ page }) { await page.goto('https://example.com'); await page.waitForSelector('.item'); const items = await page.evaluate(() => Array.from(document.querySelectorAll('.item')).map(el => ({ text: el.textContent, href: el.href }))); return { data: { items }, type: 'application/json' }; }"
  }
}

多步骤表单自动化

{
  "name": "execute_function",
  "arguments": {
    "code": "export default async function ({ page }) { await page.goto('https://example.com/form'); await page.type('#username', 'user@example.com'); await page.type('#password', 'password123'); await page.click('#submit'); await page.waitForNavigation(); const result = await page.evaluate(() => document.querySelector('.success-message').textContent); return { data: { result }, type: 'application/json' }; }"
  }
}

PDF报告生成

{
  "name": "generate_pdf",
  "arguments": {
    "html": "<!DOCTYPE html><html><head><style>body{font-family:Arial;margin:20px;} .header{background:#333;color:white;padding:20px;} .content{margin:20px 0;}</style></head><body><div class='header'><h1>月度报告</h1></div><div class='content'><h2>概要</h2><p>这是使用自定义样式的生成报告。</p></div></body></html>",
    "options": {
      "format": "A4",
      "printBackground": true,
      "displayHeaderFooter": true,
      "headerTemplate": "<div style='font-size:12px;'>机密报告</div>",
      "footerTemplate": "<div style='font-size:10px;'>第<span class='pageNumber'></span>页</div>"
    }
  }
}

配置选项

环境变量

变量默认值描述
BROWSERLESS_HOSTlocalhostBrowserless主机
BROWSERLESS_PORT3000Browserless端口
BROWSERLESS_TOKEN必填认证令牌
BROWSERLESS_PROTOCOLhttp协议(http/https/ws/wss)
BROWSERLESS_TIMEOUT30000请求超时时间(毫秒)
BROWSERLESS_CONCURRENT5最大并发会话数

Browserless配置

完整的Browserless配置选项,请参阅Browserless API参考

错误处理

MCP服务器为常见问题提供了详细的错误消息:

  • 连接错误:检查主机、端口和令牌配置
  • 超时错误:增加慢加载页面的超时值
  • 认证错误:验证令牌是否正确且具有适当的权限
  • 资源错误:检查并发会话限制和内存使用情况

开发

构建

npm run build

测试

npm test

代码检查

npm run lint

格式化

npm run format

故障排除

常见问题

  1. 连接被拒绝

    • 确保Browserless正在运行
    • 检查主机和端口配置
    • 查看防火墙设置
  2. 认证失败

    • 验证令牌是否正确
    • 检查令牌权限
    • 确保令牌未过期
  3. 超时错误

    • 增加超时值
    • 检查网络连接
    • 监控Browserless资源使用情况
  4. 内存问题

    • 减少并发会话限制
    • 监控系统内存使用情况
    • 重启Browserless实例

调试模式

启用调试日志记录:

DEBUG=browserless:* npm start

贡献

  1. 分叉仓库
  2. 创建一个特性分支
  3. 进行更改
  4. 添加测试
  5. 提交拉取请求

许可证

MIT许可证 - 详情请参阅LICENSE文件。

支持

对于问题和疑问:

  1. 查看Browserless API参考
  2. 查看Browserless文档
  3. 在GitHub上打开一个问题

相关项目

仓库