Selenium浏览器自动化服务器

一个基于Selenium的模型上下文协议服务器,使LLM能够通过Chrome浏览器与任何URL进行交互,模拟用户操作。

  • by decordoba
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 decordoba/Selenium-MCP-server

使用说明

Selenium MCP服务器

提供selenium功能的模型上下文协议服务器。此服务器使LLM能够通过selenium访问Chrome浏览器,并像用户一样通过点击与任何URL进行交互。我还提供了一些代码将其与Chat GPT集成。

试试看!

# step 1: create the .env file (model .env.example) and enter your OpenAI credentials

# step 2: install required python libraries
uv sync

# step 3: make sure the MCP server works
# from MCP inspector -> Connect / Go to 'Tools' / Click 'List Tools' / Try them (e.g. go_to, url=google.com)
uv run mcp dev server.py

# step 4: start interacting with Chat GPT with access to selenium
uv run python openai_client.py

# step 5: interact with Chat GPT, but hiding that you are a bot to websites
uv run python openai_client.py --undetected-bot

可用文件

  • server.py:MCP服务器,带有打开Selenium浏览器并与之交互的工具。请参阅下面提供的工具。

  • openai_client.py:使用Chat GPT聊天。Chat GPT可以访问基本的Selenium MCP工具。任务完成后,您可以请求采取行动,查看其作用,提供反馈并要求跟进。

  • tool_client.py:直接调用MCP服务器中的Selenium工具。对测试有用。

tool = {"name": "go_to", "arguments": {"url": "google.com"}}
response = await client.run_tool(**tool)
print(f"Tool: {tool}")
print(f"\nResponse: {response}")
  • simple_openai_client.py:向Chat GPT请求任务(在此文件中由指定)。Chat GPT可以访问基本的Selenium MCP工具。一旦Chat GPT停止进行函数调用,执行就会结束。

工具

默认工具

  • go_to -将浏览器导航到特定的URL。

    • 必需参数:
      • url (string):要导航到的URL。
  • back -返回浏览器历史记录。

    • 返回:带有新URL的消息。
  • get_current_url -从浏览器获取当前URL。

    • 返回:当前URL字符串。
  • click -按定位器单击图元。

    • 必需参数:
      • locator (string):CSS/XPath/等选择器。
    • 可选参数:
      • by (string):如何定位元素。违约: 'css selector'.
  • type_text -在输入框中键入文本。

    • 必需参数:
      • locator (string):输入字段的选择器。
      • text (string):要键入的文本。
    • 可选参数:
      • clear (bool):是否在键入前清除现有文本。违约: True.
      • press_enter (bool):键入后是否按Enter键。违约: False.
      • is_password (bool):如果为True,写入的文本将不会记录到日志文件中。违约: False.
      • by (string):如何定位元素。违约: 'css selector'.
  • get_page_summary -获取当前页面的摘要,包括表单、按钮、链接和文本元素。

    • 可选参数:
      • skip_elements (int):从开始跳过的元素数。违约: 0.
      • max_elements (int):返回的最大元素数。违约: 20.
      • filter_type (string):如果不是 "",仅包含此类型的元素("form", "button", "link",或 "text").违约: "".
      • only_visible_elements (bool):是否只包含可见元素。违约: True.
      • detailed (bool):是显示所有元素的详细信息(xpath、深度、可见等),还是只显示最重要的元素。违约: False.
    • 返回:包含每个元素元数据的字典列表,包括标记类型、文本、属性、xpath、可见性和层次结构。
  • take_screenshot_as_base64 -截取当前页面的屏幕截图,并将其作为base64编码字符串返回。

    • 可选参数:
      • compress (bool):返回前是否压缩图像。违约: True.
    • 返回:一个base64字符串(前缀为 base64,)代表屏幕截图。也将图像保存到文件。如果发生错误,将返回错误消息。
  • enable_advanced_tools -启用对高级工具的访问。

    • 返回:一条消息,确认高级工具现已启用。如果已启用,则返回通知。

高级工具(默认禁用)

  • forward -在浏览器历史记录中前进。

    • 返回:带有新URL的消息。
  • clear_text -清除输入元素中的文本。

    • 必需参数:
      • locator (string):元素的选择器。
    • 可选参数:
      • by (string):选择器策略。违约: 'css selector'.
  • get_element_text -获取元素内的可见文本。

    • 必需参数:
      • locator (string):目标元素。
    • 可选参数:
      • by (string):选择器策略。违约: 'css selector'.
  • get_element_attribute -从元素中获取特定属性。

    • 必需参数:
      • locator (string):目标元素。
      • attribute (string):要检索的属性的名称。
    • 可选参数:
      • by (string):选择器策略。违约: 'css selector'.
  • get_visible_text -从元素中提取可读文本。

    • 可选参数:
      • locator (string):元素选择器。违约: 'html'.
      • by (string):选择器策略。违约: 'css selector'.
  • get_visible_text_xpath -获取包含给定可见文本的元素的HTML树。

    • 必需参数:
      • visible_text (string):要查找的文本。
    • 可选参数:
      • partial (bool):是否允许部分匹配。违约: False.
      • prettify (bool):使用缩进设置输出格式。
  • get_html -获取元素的HTML,可以选择限制深度。

    • 可选参数:
      • locator (string):元素选择器。违约: 'html'.
      • depth (int):深入HTML树的深度。使用 -1 无限制。违约: 1.
      • by (string):选择器策略。违约: 'css selector'.
      • outer (bool):是否包含标签本身。违约: True.
      • prettify (bool):使用缩进设置输出格式。
  • get_html_xpath -遍历并返回给定元素的父HTML树。

    • 必需参数:
      • locator (string):目标元素。
    • 可选参数:
      • by (string):选择器策略。违约: 'css selector'.
      • prettify (bool):使用缩进设置输出格式。
  • find_elements -返回包含基本信息的匹配元素列表。

    • 必需参数:
      • locator (string):元素选择器。
    • 可选参数:
      • by (string):选择器策略。违约: 'css selector'.
      • max_elements (int):限制返回元素的数量。违约: 10.
  • count_elements -统计与定位器匹配的元素数量。

    • 必需参数:
      • locator (string):选择器。
    • 可选参数:
      • by (string):选择器策略。违约: 'css selector'.
  • element_exists -检查页面上是否存在元素。

    • 必需参数:
      • locator (string):选择器。
    • 可选参数:
      • by (string):选择器策略。违约: 'css selector'.
  • start_browser -如果浏览器尚未运行,请启动它。

    • 返回:一条消息,指示浏览器是否已启动或已在运行。
  • quit_browser -如果浏览器正在运行,请退出。

    • 返回:一条消息,指示浏览器是否已关闭或没有运行。
  • set_timeout -设置用于等待元素的默认超时时间。

    • 必需参数:
      • seconds (int):超时秒数。
  • change_browser -切换到其他浏览器(可以选择退出当前浏览器)。

    • 可选参数:
      • browser (string):其中之一 'chrome', 'firefox', 'safari', 'edge', 'ie'.
  • get_title -获取当前页面标题。

    • 返回:标题为字符串。
  • refresh -刷新当前页面。

    • 返回:带有刷新URL的消息。
  • execute_script -在浏览器中运行原始JavaScript。

    • 必需参数:
      • script (string):要执行的JavaScript代码。
    • 可选参数:
      • *args:传递给脚本的可选参数。
  • take_screenshot -保存当前页面的屏幕截图。

    • 可选参数:
      • filename (string):截图文件的名称。如果没有提供,则使用带时间戳的文件名。
  • get_cookies -从当前浏览器会话中获取所有Cookie。

  • set_cookie -向当前会话添加cookie。

    • 必需参数:
      • name (string):Cookie名称。
      • value (string):Cookie值。
    • 可选关键字参数:
      • 其他cookie参数(例如。, domain, path, secure等等)。
  • delete_cookies -从会话中删除所有Cookie。

  • submit_form -提交表单元素。

    • 必需参数:
      • form_locator (string):表单元素的选择器。
    • 可选参数:
      • by (string):选择器策略。违约: 'css selector'.
  • wait_for_element -等待元素出现。

    • 必需参数:
      • locator (string):元素的选择器。
    • 可选参数:
      • by (string):选择器策略。违约: 'css selector'.
      • timeout (int):覆盖默认超时。
  • wait_for_text -等待页面中出现特定文本。

    • 必需参数:
      • text (string):等待的文本。
    • 可选参数:
      • timeout (int):覆盖默认超时。
  • record_last_action -将最后执行的操作添加到录制列表中。

    • 返回:一条确认消息。如果未执行任何操作,则返回错误消息。
  • save_recording -将记录的操作列表保存到JSON文件中。

    • 可选参数:
      • reset_recording (bool):保存后是否重置记录的序列。违约: True.
    • 返回:确认文件保存的消息,如果保存失败,则返回错误消息。
  • load_recording -从JSON文件加载以前保存的记录。

    • 必需参数:
      • filename (string):要从中加载的文件的名称(在records文件夹中)。
    • 返回:一条确认已加载操作数量的消息,或者在加载失败时显示错误消息。
  • play_recording -重播当前录制中的所有操作。

    • 可选参数:
      • delay (float):每个操作之间等待的秒数。违约: 0.0.
    • 返回:确认播放成功的消息或错误消息。
  • reset_recording -清除当前录制和上次操作。

    • 返回:一条消息,确认录制已重置。
  • get_last_action -获取最后执行的操作。

    • 返回:一条包含上次操作的名称和参数的消息。
  • get_recording -获取当前记录的动作序列。

    • 返回:一条包含完整记录步骤列表的消息。

安装

使用紫外线(推荐)

使用时 uv 不需要特定的安装。我们将 使用 uvx 直接运行 mcp服务器selenium.

以下是主要命令:

# create environment
uv venv

# activate environment (Windows)
.venv\Scripts\activate.bat

# activate environment (Linux/Mac)
source .venv\Scripts\activate

# test the server from the browser with MCP Inspector
mcp dev server.py

# install the server to use with Claude (requires Claude Desktop)
mcp install server.py

使用PIP

或者,您可以安装 mcp-server-selenium 通过pip:

# call from level of pyproject.toml
pip install .

安装后,您可以使用以下命令将其作为脚本运行:

python -m mcp_server_selenium

配置

为Claude.app进行配置

添加到您的Claude设置中:

Using uvx
{
  "mcpServers": {
    "time": {
      "command": "uvx",
      "args": ["mcp-server-selenium"]
    }
  }
}
Using docker
{
  "mcpServers": {
    "time": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "mcp/selenium"]
    }
  }
}
Using pip installation
{
  "mcpServers": {
    "time": {
      "command": "python",
      "args": ["-m", "mcp_server_selenium"]
    }
  }
}

为Zed配置

添加到您的Zed settings.json:

Using uvx
"context_servers": [
  "mcp-server-selenium": {
    "command": "uvx",
    "args": ["mcp-server-selenium"]
  }
],
Using pip installation
"context_servers": {
  "mcp-server-selenium": {
    "command": "python",
    "args": ["-m", "mcp_server_selenium"]
  }
},

配置VS代码

为了快速安装,请使用下面的一键安装按钮之一。..

对于手动安装,请将以下JSON块添加到VS Code中的用户设置(JSON)文件中。您可以按 Ctrl + Shift + P 和打字 Preferences: Open User Settings (JSON).

您可以选择将其添加到名为的文件中 .vscode/mcp.json 在您的工作空间中。这将允许您与他人共享配置。

请注意 mcp 使用时需要密钥 mcp.json 文件。

Using uvx
{
  "mcp": {
    "servers": {
      "selenium": {
        "command": "uvx",
        "args": ["mcp-server-selenium"]
      }
    }
  }
}
Using Docker
{
  "mcp": {
    "servers": {
      "selenium": {
        "command": "docker",
        "args": ["run", "-i", "--rm", "mcp/selenium"]
      }
    }
  }
}

自定义-浏览器

默认情况下,服务器不会添加一些高级工具。您可以通过传递参数来添加它们 --advanced-tools 到 args 配置中的列表。

例子:

{
  "command": "python",
  "args": ["-m", "server.py", "--advanced-tools"]
}

默认情况下,服务器使用常规selenium。要使其使用“隐形”模式并试图避免机器人检测,请使用 --undetected-bot 作为一个论点。

例子:

{
  "command": "python",
  "args": ["-m", "server.py", "--undetected-bot"]
}

交互示例

  1. 获取当前时间:
{
  "name": "go_to",
  "arguments": {
    "url": "wikipedia.org"
  }
}

答复:

"Navigated to https://www.wikipedia.org/"

调试

您可以使用MCP检查器调试服务器。

简单的方法:

uv run mcp dev server.py

Claude命令示例

  1. “打开Google.com”
  2. “在谷歌上搜索大象”
  3. “阅读谷歌上关于大象的前5篇文章并对其进行总结”
  4. “填写表格https://my_form.com随机响应”