浏览器自动化服务

一个基于Browserless.io的Python服务器,提供多种浏览器自动化功能,如PDF生成、截图、内容提取等。

  • by imnotdev25
  • Python
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 imnotdev25/browserless-mcp

使用说明

无浏览器MCP服务器(Python)

A. FastMCP 暴露的服务器 无浏览器.io 作为MCP工具的浏览器自动化功能。内置Python uv, fastmcp,以及 httpx.


特性

工具 说明
browserless_generate_pdf 将URL或HTML转换为PDF
browserless_take_screenshot 捕获整页或剪切的屏幕截图
browserless_get_content JS执行后提取完全渲染的HTML
browserless_execute_function 在真实浏览器中运行任意JS
browserless_scrape 通过CSS选择器提取结构化数据
browserless_run_performance_audit 灯塔性能/可访问性审计
browserless_unblock 绕过机器人检测/防刮擦措施
browserless_execute_browserql 运行BrowserQL GraphQL自动化查询
browserless_get_websocket_url 为木偶师/剧作家构建WebSocket URL
browserless_get_health 检查无浏览器实例运行状况
browserless_get_sessions 列出活动浏览器会话
browserless_get_metrics 获取实例性能指标
browserless_configure_connection 在运行时更新连接设置

先决条件

启动无浏览器(Docker)

# Quick start (no auth)
docker run -p 3000:3000 ghcr.io/browserless/chromium

# With token
docker run -p 3000:3000 \
  -e TOKEN=my-secret-token \
  -e CONCURRENT=10 \
  ghcr.io/browserless/chromium

安装

# Clone
git clone https://github.com/your-org/browserless-mcp-python.git
cd browserless-mcp-python

# Install dependencies with uv
uv sync

# Copy and edit config
cp .env.example .env

编辑 .env:

BROWSERLESS_HOST=localhost
BROWSERLESS_PORT=3000
BROWSERLESS_TOKEN=my-secret-token
BROWSERLESS_PROTOCOL=http
BROWSERLESS_TIMEOUT=30000
BROWSERLESS_CONCURRENT=5

跑步

# Via uv
uv run browserless-mcp

# Or directly
uv run python src/browserless_mcp/server.py

# Or after installing
pip install -e .
browserless-mcp

Claude桌面配置

增添 ~/.config/claude/claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "browserless": {
      "command": "uvx",
      "args": ["browserless-mcp"],
      "env": {
        "BROWSERLESS_HOST": "localhost",
        "BROWSERLESS_PORT": "3000",
        "BROWSERLESS_TOKEN": "your-token"
      }
    }
  }
}

工具示例

生成PDF

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

屏幕截图

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

提取内容

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

报废结构化数据

{
  "name": "browserless_scrape",
  "arguments": {
    "url": "https://news.ycombinator.com",
    "elements": [
      { "selector": ".titleline > a" },
      { "selector": ".score" }
    ]
  }
}

执行自定义JS

{
  "name": "browserless_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' }; }"
  }
}

绩效审计

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

绕过机器人检测

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

Browserql查询

{
  "name": "browserless_execute_browserql",
  "arguments": {
    "query": "mutation { goto(url: \"https://example.com\") { status } screenshot { base64 } }"
  }
}

项目结构

browserless-mcp-python/
├── src/
│   └── browserless_mcp/
│       ├── __init__.py       # Package metadata
│       ├── config.py         # Env-based configuration
│       ├── client.py         # Shared httpx HTTP helpers
│       └── server.py         # FastMCP server + all tools
├── .env.example              # Example environment config
├── pyproject.toml            # uv/hatch build config
└── README.md

环境变量

变量 默认值 描述
BROWSERLESS_HOST localhost 无浏览器主机
BROWSERLESS_PORT 3000 无浏览器端口
BROWSERLESS_TOKEN (空) 身份验证令牌(安全实例所需)
BROWSERLESS_PROTOCOL http http, https, ws,或 wss
BROWSERLESS_TIMEOUT 30000 请求超时(毫秒)
BROWSERLESS_CONCURRENT 5 最大并发会话数(信息性)

许可证

麻省理工学院