无头浏览器服务

一个基于Playwright的高级无头浏览器服务,通过灵活的API实现网页导航、内容提取和交互操作,适用于自动化测试和网页数据抓取。

  • by random-robbie
  • Python
  • 本地部署
  • 27 星标
  • 更新于
在 GitHub 查看 random-robbie/mcp-web-browser

使用说明

MCP Web浏览器服务器

由Playwright提供支持的模型上下文协议(MCP)高级web浏览服务器,通过灵活、安全的API实现无头浏览器交互。

🌐 特性

  • 无头网页浏览:导航到任何绕过SSL证书验证的网站
  • 整页内容提取:检索完整的HTML内容,包括动态加载的JavaScript
  • 多标签支持:创建、管理和在多个浏览器选项卡之间切换
  • 高级Web交互工具:
    • 提取文本内容
    • 点击页面元素
    • 在表单字段中输入文本
    • 截图
    • 提取具有过滤功能的页面链接
    • 向任何方向滚动页面
    • 在页面上执行JavaScript
    • 刷新页面
    • 等待导航完成
  • 资源管理:不活动后自动清理未使用的资源
  • 增强的页面信息:获取当前页面的详细元数据

🚀 快速开始

先决条件

  • Python 3.10+
  • MCP-SDK
  • 剧作家

安装

# Install MCP and Playwright
pip install mcp playwright

# Install browser dependencies
playwright install

Claude桌面配置

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "web-browser": {
      "command": "python",
      "args": [
        "/path/to/your/server.py"
      ]
    }
  }
}

💡 使用示例

基本Web导航

# Browse to a website
page_content = browse_to("https://example.com")

# Extract page text
text_content = extract_text_content()

# Extract text from a specific element
title_text = extract_text_content("h1.title")

Web交互

# Navigate to a page
browse_to("https://example.com/login")

# Input text into a form
input_text("#username", "your_username")
input_text("#password", "your_password")

# Click a login button
click_element("#login-button")

电脑屏幕截图工具

# Capture full page screenshot
full_page_screenshot = get_page_screenshots(full_page=True)

# Capture specific element screenshot
element_screenshot = get_page_screenshots(selector="#main-content")

链接提取

# Get all links on the page
page_links = get_page_links()

# Get links matching a pattern
filtered_links = get_page_links(filter_pattern="contact")

多标签浏览

# Create a new tab
tab_id = create_new_tab("https://example.com")

# Create another tab
another_tab_id = create_new_tab("https://example.org")

# List all open tabs
tabs = list_tabs()

# Switch between tabs
switch_tab(tab_id)

# Close a tab
close_tab(another_tab_id)

高级交互

# Scroll the page
scroll_page(direction="down", amount="page")

# Execute JavaScript on the page
result = execute_javascript("return document.title")

# Get detailed page information
page_info = get_page_info()

# Refresh the current page
refresh_page()

# Wait for navigation to complete
wait_for_navigation(timeout_ms=5000)

🛡️ 安全功能

  • SSL证书验证旁路
  • 安全的浏览器上下文管理
  • 自定义用户代理配置
  • 错误处理和全面日志记录
  • 可配置的超时设置
  • CSP旁路控制
  • 防止cookie被盗

🔧 故障排除

常见问题

  • SSL证书错误:自动绕过
  • 页面加载缓慢:调整超时时间 browse_to() 方法
  • 未找到元素:仔细验证选择器
  • 浏览器资源使用情况:非活动期后自动清理

日志记录

所有重要事件都会记录详细信息,以便于调试。

📋 刀具参数

browse_to(url: str, context: Optional[Any] = None)

  • url:要导航到的网站
  • context:可选上下文对象(当前未使用)

extract_text_content(selector: Optional[str] = None, context: Optional[Any] = None)

  • selector:用于提取特定内容的可选CSS选择器
  • context:可选上下文对象(当前未使用)

click_element(selector: str, context: Optional[Any] = None)

  • selector:要单击的元素的CSS选择器
  • context:可选上下文对象(当前未使用)

get_page_screenshots(full_page: bool = False, selector: Optional[str] = None, context: Optional[Any] = None)

  • full_page:捕获整个页面的屏幕截图
  • selector:截图的可选元素
  • context:可选上下文对象(当前未使用)

get_page_links(filter_pattern: Optional[str] = None, context: Optional[Any] = None)

  • filter_pattern:筛选链接的可选文本模式
  • context:可选上下文对象(当前未使用)

input_text(selector: str, text: str, context: Optional[Any] = None)

  • selector:输入元素的CSS选择器
  • text:要输入的文本
  • context:可选上下文对象(当前未使用)

create_new_tab(url: Optional[str] = None, context: Optional[Any] = None)

  • url:在新选项卡中导航到的可选URL
  • context:可选上下文对象(当前未使用)

switch_tab(tab_id: str, context: Optional[Any] = None)

  • tab_id:要切换到的选项卡的ID
  • context:可选上下文对象(当前未使用)

list_tabs(context: Optional[Any] = None)

  • context:可选上下文对象(当前未使用)

close_tab(tab_id: Optional[str] = None, context: Optional[Any] = None)

  • tab_id:要关闭的选项卡的可选ID(默认为当前选项卡)
  • context:可选上下文对象(当前未使用)

refresh_page(context: Optional[Any] = None)

  • context:可选上下文对象(当前未使用)

get_page_info(context: Optional[Any] = None)

  • context:可选上下文对象(当前未使用)

scroll_page(direction: str = "down", amount: str = "page", context: Optional[Any] = None)

  • direction:滚动方向(“上”、“下”、“左”、“右”)
  • amount:可滚动的金额(“页面”、“一半”或数字)
  • context:可选上下文对象(当前未使用)

wait_for_navigation(timeout_ms: int = 10000, context: Optional[Any] = None)

  • timeout_ms:等待的最长时间(毫秒)
  • context:可选上下文对象(当前未使用)

execute_javascript(script: str, context: Optional[Any] = None)

  • script:要执行的JavaScript代码
  • context:可选上下文对象(当前未使用)

🤝 贡献

欢迎投稿!请随时提交拉取请求。

开发设置

# Clone the repository
git clone https://github.com/random-robbie/mcp-web-browser.git

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows use `venv\Scripts\activate`

# Install dependencies
pip install -e .[dev]

📄 许可证

MIT许可证

🔗 相关项目

💬 支持

如有疑问,请 打开一个问题 在GitHub上。