Claude 跑 MCP 增强 Selenium 这套流程,原文写得并不复杂:打开 Claude Desktop,在 Settings→Developer→Edit Config 里贴一段 JSON,添加 selenium MCP 服务器,重启后 Claude 就能自己驱动浏览器、生成 Selenium 测试脚本。真正让人卡住的从来不是这段配置,而是 Claude 背后的模型通道。很多人手里有 MCP 工具,却拿不出一把能用的 Anthropic 官方 Key,于是对话框里的 Claude 一直在转圈。解决思路是用 TaoToken 补齐模型这一层:先到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 注册并创建 API Key,再把 Claude 访问模型用的 Base URL 从官方地址改成 https://taotoken.net/api,MCP 配置保持原文不动。工具链还是原文那套,但模型推理不再依赖官方 Key。
1. 卡在模型通道:MCP 装好了,Claude 却转圈
1.1 原文默认的「可用的 Claude」其实卡住了一大批人
原文《使用Claude和MCP增强Selenium》的目录节奏很清晰:配置 MCP 服务器 → 验证安装 → 测试交互 → 生成 Selenium 脚本 → 在 IDE 里面运行。每一步都建立在一个前提上:你的 Claude 是能正常回答问题的。可实际动手时,很多人连「添加完 MCP 之后让 Claude 干活」这一步都走不下去。不是不会贴 JSON,而是贴完之后 Claude 直接提示没有可用的模型访问凭证。
MCP 服务器在本地由 npx 拉起,它负责把 Selenium 的工具暴露给 Claude;但 Claude 理解「帮我把 SauceDemo 登录流程写成测试」这句话,需要模型 API 完成推理。原文没有花篇幅讲这个前提,因为它假设你已经有一个登录了官方账号的 Claude Desktop,或者手里有 Anthropic 官方 API Key。真正上手时你会发现,没有可用的官方通道,MCP 工具列表再完整也只是摆在那里,Claude 根本无从回应。
1.2 模型通道和 MCP 是两条独立的链路
可以把 MCP 理解成「给 Claude 接了一只手」,把模型 API 理解成「驱动 Claude 大脑运转的能源」。原文后半段让 Claude 生成 SauceDemoLoginTest 时,它先要看清页面结构,再写出 WebDriver 代码。看清页面结构靠 MCP 调用浏览器工具,写出代码靠模型推理。如果你把模型通道换成 TaoToken,相当于给大脑换了一种供能方式,手还是原来那只手,MCP 配置完全不用动。
这也是为什么 TaoToken 在这里的定位是「统一 API / 兼容通道」:它提供 Anthropic 兼容的模型访问地址,让 Claude 系工具不需要依赖官方订阅也能完成推理。接入时只需要关注两个地址——一个专门去注册、创建 Key、看模型广场,另一个专门填进工具的 Base URL。这两个地址不能混用,后面会详细拆开。
2. 先到官网拿 Key,再决定在哪填 Base URL
2.1 注册、创建 API Key、看模型广场
打开 TaoToken 落地页后要做的事按顺序来:先注册账号,邮箱验证后进入控制台;接着创建 API Key,创建时按页面提示选择模型分组或可用模型,系统会生成一串密钥;最后看一眼模型广场,上面列出的是当前实际可用的模型 ID,后面配置 ANTHROPIC_MODEL 字段时要用到,不要凭记忆编一个模型名。
创建完 API Key 后,第一时间复制到本地临时文件里。很多服务只在创建那一刻完整展示密钥,刷新页面后就只能看到脱敏后的名称。后面配置~/.claude/settings.json时真正填进ANTHROPIC_AUTH_TOKEN的就是这串 Key,而不是你登录官网用的账号密码。
2.2 落地页 URL 与接口 Base URL 分工
这里有一个最容易踩乱的细节:落地页地址和接口地址是两回事,用途完全不同。
| 用途 | 地址 |
|---|---|
| 注册、创建 Key、看模型广场、看用量 | https://taotoken.net/?utm_source=taotoken_aicg_blog_end |
| 填进 Claude 工具里的 Base URL | https://taotoken.net/api |
Base URL 一定保持https://taotoken.net/api,末尾不要加/v1,也不要追加任何 UTM 参数。如果把落地页整串地址填进工具,模型服务请求就会打到网页服务上,连接必然失败。反之,如果你把接口地址当成官网去浏览器里打开,会看到一个不太友好的接口提示页,那也不是注册入口。记住:注册去官网落地页,配置填 Base URL。
3. 按原文配置 selenium MCP,一行不用改
3.1 Settings→Developer→Edit Config 里的 JSON
原文的配置入口是 Claude Desktop 的 Settings → Developer → Edit Config。点开后编辑的是claude_desktop_config.json,把 selenium MCP 服务器加进去:
{ "mcpServers": { "selenium": { "command": "npx", "args": ["-y", "@angiejones/mcp-selenium"] } } }我这里故意没有改动原文的结构。MCP server 是本地子进程,它负责启动 Selenium 工具,不持有你的模型 Key,也不需要知道 TaoToken 的存在。所以这个 JSON 里不应该出现任何 API Key 或 Base URL 字段,加了反而容易让 npx 启动时读到多余的环境变量。
3.2 重启之后确认 MCP 已经挂上
保存配置文件后,彻底退出 Claude Desktop,再重新打开。首次启动时 Claude Desktop 会调用 npx 拉取@angiejones/mcp-selenium,这个过程取决于 npm 网络状况,快则几十秒,慢则两三分钟。如果之前从没跑过这个包,你甚至能看到终端窗口一闪而过的下载日志。
打开一个新会话后,在输入框附加的工具列表里应该能看到 selenium 相关的工具项。如果工具列表是空的,先检查本机 Node.js 是否装到了 18 或更高版本,再在终端手动执行一次npx -y @angiejones/mcp-selenium,看进程能不能常驻跑起来。这一步能帮你把「MCP 没装好」和「模型通道没通」两个问题区分开:MCP 装不好的表现是工具列表为空,模型通道没通的表现是工具列表正常但 Claude 不回话。
4. Claude Code 通过 TaoToken 使用同一个 Selenium MCP
4.1 为什么把模型通道这件事放到 Claude Code 上做
Claude Desktop 本身没有提供「自定义模型 API Base URL」的开放配置入口,官方客户端更多面向直接登录官方账号的使用方式。要让 TaoToken 真正接管模型推理,又不破坏原文那套 MCP 配置,最干净的办法是用 Claude Code——这是 Anthropic 官方命令行工具,支持通过环境变量覆盖ANTHROPIC_BASE_URL,也支持加载 MCP 服务器。
于是整条链路变成:Claude Code 读取~/.claude/settings.json里的 env,把模型请求发到https://taotoken.net/api;同时它又通过 MCP 协议调用本地 selenium 工具。原文里「让 Claude 生成 Selenium 脚本」的自然语言交互,在 Claude Code 里照常进行,区别只是模型通道换成了 TaoToken。
4.2 配置 ~/.claude/settings.json
编辑~/.claude/settings.json,写入以下内容:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "你的模型ID" } }三个环境变量的作用要分清:
ANTHROPIC_BASE_URL统一指向https://taotoken.net/api,末尾没有/v1;ANTHROPIC_AUTH_TOKEN填你从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建的那串 API Key,也就是占位符YOUR_API_KEY替换后的值;ANTHROPIC_MODEL填模型广场上实际列出的模型 ID,打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场复制,不要照抄别处文章里见过的旧模型名,也不要自己拼带日期后缀的 ID。
4.3 用 claude mcp add 加载 selenium
在项目目录下执行:
claude mcp add selenium -- npx -y @angiejones/mcp-selenium执行完成后重启 Claude Code,输入claude mcp list,确认 selenium 的状态是 connected。这一步等于把原文写在 Claude Desktop 里的同一个 MCP 服务器重新加载到 CLI 环境里,工具还是那个工具,只是宿主从桌面客户端换成了命令行。
如果你在 macOS 或 Linux 上运行,建议先把 npx 的绝对路径查出来写进命令,例如/usr/local/bin/npx,避免某些 shell 环境找不到 npx 导致 MCP 启动失败。用which npx就能看到路径,替换掉命令里的npx即可。
5. 测试交互后生成 SauceDemoLoginTest
5.1 先让 Claude 用 selenium 工具看一眼页面
进入 Claude Code 后,不要急着甩一句「生成脚本」。原文的顺序是先验证安装、再测试交互、最后生成脚本,这个顺序很值得保留。测试交互这一步,本质是让 Claude 通过 MCP 里的 selenium 工具实际打开目标网站,亲自看一眼登录框长什么样。
你可以这样对 Claude 说:调用 selenium MCP 工具打开 https://www.saucedemo.com,告诉我登录区域的输入框用了什么 id 和 class。Claude 会驱动浏览器访问 SauceDemo,然后回传 DOM 信息,比如用户名输入框是user-name,密码输入框是password,登录按钮是login-button。这个「现场勘查」正是 MCP 增强 Selenium 的核心价值——模型不再凭训练数据猜页面元素,而是实时看到页面结构再写代码。
5.2 给出生成脚本的测试目标和断言
交互验证通过后,把测试目标一次说清楚:使用standard_user/secret_sauce登录,等待类名title出现并断言文本等于Products,再断言当前 URL 包含inventory,最终输出一个可直接运行的 TestNG 类。
Claude 结合刚看到的页面结构,会生成类似下面的核心逻辑:
WebDriver driver = new ChromeDriver(); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.get("https://www.saucedemo.com"); wait.until(ExpectedConditions.presenceOfElementLocated(By.id("user-name"))) .sendKeys("standard_user"); driver.findElement(By.id("password")).sendKeys("secret_sauce"); driver.findElement(By.id("login-button")).click(); String title = wait.until(ExpectedConditions.presenceOfElementLocated(By.className("title"))) .getText(); Assert.assertEquals(title, "Products"); Assert.assertTrue(driver.getCurrentUrl().contains("inventory"));Claude 还会补全setUp和tearDown、TestNG 注解、ChromeDriver 初始化,并把WebDriverWait设置成 10 秒超时。生成完代码后,先别急着关终端,下一步进 Aqua 跑一遍,大概率会撞上原文提到的那条报错。
6. 在 Aqua 中运行,处理 TestNG 与 Java 8 的不兼容
6.1 新建 Selenium 项目并粘贴脚本
打开 Aqua,File → New → Project,选择 Selenium 项目模板。模板会自带 Selenium Java 依赖和一个基本的测试框架配置,但依赖版本往往偏新。新建一个名为SauceDemoLoginTest的类,把上一节生成的核心逻辑连同setUp、tearDown一起粘贴进去,然后把类补全成标准 TestNG 结构:@BeforeMethod初始化驱动、@Test写登录断言、@AfterMethod关闭浏览器。
确认项目里的构建文件已经包含selenium-java、webdriver-manager、testng三个依赖。Aqua 的 Selenium 模板一般会帮你引入,但版本可能不是你预期的,IDE 会自动解析。如果之前手动建过 Maven 项目,注意检查pom.xml里 TestNG 是不是 7.x,这直接关系到下一个报错。
6.2 报错「TestNG 版本和 Java 8 不兼容」的处理
Aqua 新建项目时默认 SDK 可能是 Java 8,而新版 TestNG 7.x 的 class 文件版本需要 Java 9 以上,运行测试时就会抛出原文提到的那句错误:TestNG 版本和 Java 8 不兼容。这不是代码逻辑的问题,是编译和运行环境不匹配。
原文给的解决路径是 File → Project Structure → Project 修改 SDK 版本。实际操作时把 Project SDK 切到本机已安装的 JDK 11 或 17,同时把 Settings → Build Tools 里的 Gradle JVM 或 Maven JVM 同步成同一个版本,再重新加载项目。再次运行testLoginWithValidCredentials,浏览器会打开 SauceDemo,填入凭据,点击登录,然后断言通过。Claude 生成的代码一次就跑通,这一点和原文末尾的描述一致。
6.3 回 TaoToken 控制台确认这次调用
测试跑通后,打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 进入用量页面。按时间倒序查找刚才那次 Claude Code 会话产生的请求记录,你能看到使用的模型 ID、token 消耗和响应状态。记录正常,说明模型通道和 MCP 工具链整条链路都处于可用状态;如果这里看不到任何请求,优先回~/.claude/settings.json检查ANTHROPIC_BASE_URL是否真的生效。以后在这个项目上继续加测试用例,不需要再动任何配置。
7. 排障:按「模型通道 → MCP → 脚本运行」顺序查
7.1 Base URL 末尾加了 /v1 导致请求失败
Anthropic 官方接口路径习惯带/v1/messages,但 TaoToken 的 Base URL 是https://taotoken.net/api,不要把/v1拼上去。一旦拼上,Claude Code 会请求https://taotoken.net/api/v1/...,拿不到预期响应。检查settings.json里有没有多余的斜杠、路径段或 UTM 参数,ANTHROPIC_BASE_URL必须就是一个干净的根地址。
7.2 claude mcp list 里 selenium 状态异常
如果添加 MCP 后状态不是 connected,先在终端手动执行npx -y @angiejones/mcp-selenium,看是否能常驻运行。常见原因无非三种:npm 源太慢导致拉包超时、内网环境拦了 npm 请求、Node 版本低于 18。手动跑通了,再回 Claude Code 里执行claude mcp reset selenium重新加载。MCP 跟模型通道无关,所以别在这种报错时去改 TaoToken 配置,方向不对浪费时间。
7.3 模型 ID 填错导致调用被拒
即使 Key 和 Base URL 都对,模型 ID 填一个模型广场上不存在的名字,照样拿不到结果。打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场,复制当前可用的模型 ID 填进ANTHROPIC_MODEL。不要照抄别人文章里的模型名,也不要自己拼带日期后缀的 ID,广场上写什么就填什么。如果这是一台新机器,连 Key 都还没创建,直接去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 注册并把新 Key 填回settings.json,然后从第 3 章配置 MCP 那一步重走一遍,Selenium 测试生成流程就能完整跑通。