使用说明
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等等)。
- 其他cookie参数(例如。,
- 必需参数:
-
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"]
}
交互示例
- 获取当前时间:
{
"name": "go_to",
"arguments": {
"url": "wikipedia.org"
}
}
答复:
"Navigated to https://www.wikipedia.org/"
调试
您可以使用MCP检查器调试服务器。
简单的方法:
uv run mcp dev server.py
Claude命令示例
- “打开Google.com”
- “在谷歌上搜索大象”
- “阅读谷歌上关于大象的前5篇文章并对其进行总结”
- “填写表格https://my_form.com随机响应”