Install
openclaw skills install @andeymei/deepseek-web-query使用 DeepSeek 网页版进行互联网查询,分担大模型请求和搜索负担。当用户需要查询最新信息、一般性知识、代码问题、文本分析等,或明确说"用 DeepSeek 查一下"、"联网搜索"、"查下最新"等时触发此技能。特别地,如果提问以"ds:"或"ds:"开头,优先使用此技能。通过 Chrome DevTools MCP 控制浏览器与 DeepSeek 交互,自动检测登录状态并提示用户,保持浏览器会话复用,使用 evaluate_script 提取 Markdown 内容直接返回。
openclaw skills install @andeymei/deepseek-web-query本技能用于将用户的查询请求转发到 DeepSeek 网页版,利用 DeepSeek 的联网搜索能力获取最新信息,同时减轻主模型的负担。
技术栈: 使用 Chrome DevTools MCP (通过 mcporter) 控制浏览器,替代原有的 Playwright 方案。
故障恢复: 如果 Chrome DevTools MCP 服务不可用,会自动尝试使用 chrome-devtools-mcp-manager 技能启动浏览器和 MCP 服务。
当用户有以下需求时触发此技能:
如果用户查询以 "ds:" 或 "ds:" 开头:
例如:
在执行 MCP 操作前,先检查服务状态:
# 检查 MCP 服务状态
mcporter list
如果服务不可用(连接错误或权限错误),执行自动恢复流程:
检查内置 Chrome 浏览器状态
browser({
action: "status",
profile: "openclaw"
})
如果浏览器未运行,启动它
browser({
action: "open",
profile: "openclaw",
url: "about:blank"
})
等待 2-3 秒让浏览器完全启动。
验证 CDP 端点可用
Invoke-WebRequest -Uri "http://localhost:18800/json/version" -Method GET
重新配置 mcporter 的 MCP 服务器
# 移除旧的配置(如果存在)
mcporter server remove chrome-devtools
# 添加新的 MCP 服务器配置
mcporter server add chrome-devtools \
--command "npx" \
--args "chrome-devtools-mcp@latest,--browserUrl,http://127.0.0.1:18800,--no-usage-statistics"
验证 MCP 服务已恢复
mcporter list
mcporter call chrome-devtools.list_pages
// 步骤 1: 检查浏览器状态
const status = await browser({ action: "status", profile: "openclaw" });
// 步骤 2: 如果未运行,启动浏览器
if (!status.cdpReady) {
await browser({ action: "open", profile: "openclaw", url: "about:blank" });
await new Promise(r => setTimeout(r, 3000)); // 等待启动
}
// 步骤 3: 验证 CDP 端点
// (使用 exec 执行 PowerShell 命令)
// 步骤 4: 重新配置 mcporter
// (使用 exec 执行 mcporter 命令)
// 步骤 5: 验证 MCP 服务
// (使用 exec 执行 mcporter list)
# 创建新页面并导航到 DeepSeek
mcporter call chrome-devtools.new_page url: "https://chat.deepseek.com/"
# 或者导航到现有页面
mcporter call chrome-devtools.navigate_page type: "url" url: "https://chat.deepseek.com/"
mcporter call chrome-devtools.take_snapshot
如果 MCP 调用失败,再次执行自动恢复流程,然后重试。
如果检测到未登录:
mcporter call chrome-devtools.take_screenshot
mcporter call chrome-devtools.take_snapshot
mcporter call chrome-devtools.click uid: "<深度思考按钮的uid>"
mcporter call chrome-devtools.click uid: "<输入框的uid>"
mcporter call chrome-devtools.type_text text: "用户查询问题"
mcporter call chrome-devtools.press_key key: "Enter"
mcporter call chrome-devtools.wait_for text: ["已思考", "已深度思考"] timeout: 60000
使用 evaluate_script 提取 Markdown 内容:
mcporter call chrome-devtools.evaluate_script function: '
() => {
// 方法1: 尝试点击 copy 按钮后从页面提取
const copyButtons = document.querySelectorAll("button[title*=\"复制\"], button[class*=\"copy\"], [class*=\"copy-button\"]");
if (copyButtons.length > 0) {
copyButtons[copyButtons.length - 1].click();
}
// 等待一下复制完成
return new Promise(resolve => {
setTimeout(() => {
// 提取 Markdown 内容
const markdownElements = document.querySelectorAll(".ds-markdown, [class*=\"markdown\"], [class*=\"message-content\"]");
let result = "";
markdownElements.forEach(el => {
if (el.innerText && el.innerText.trim().length > 0) {
result += el.innerText + "\n\n";
}
});
resolve(result.trim());
}, 500);
});
}
'
备选方案:如果上述方法失败,直接提取页面文本:
mcporter call chrome-devtools.evaluate_script function: '
() => {
const messages = document.querySelectorAll(".ds-markdown, [class*=\"message-content\"], [class*=\"chat-message\"]");
const lastMessage = messages[messages.length - 1];
return lastMessage ? lastMessage.innerText : document.body.innerText;
}
'
重要:直接返回提取的原始内容,不要进行 LLM 二次总结或加工。
重要: 不要关闭浏览器页面!保持浏览器会话供后续查询复用。
如需关闭,使用:
mcporter call chrome-devtools.close_page pageId: <page_id>
症状:
connect EPERM \\.\pipe\mcporter-daemon-xxx
处理: 执行完整自动恢复流程(步骤 1)。
症状: 浏览器状态显示 cdpReady: false
处理:
browser({ action: "stop", profile: "openclaw" })browser({ action: "open", profile: "openclaw", url: "about:blank" })症状: mcporter call 返回错误但连接正常
处理:
mcporter call chrome-devtools.list_pages| 工具 | 用途 |
|---|---|
new_page | 创建新标签页并加载 URL |
navigate_page | 导航到 URL 或前进/后退/刷新 |
take_snapshot | 获取页面 a11y 树快照(用于查找元素 uid) |
take_screenshot | 截图 |
click | 点击元素 |
fill | 填写输入框 |
type_text | 输入文本 |
press_key | 按键 |
evaluate_script | 执行 JavaScript 并返回结果 |
wait_for | 等待特定文本出现 |
list_pages | 列出所有打开的页面 |
select_page | 选择特定页面作为上下文 |
输入框:
深度思考按钮:
Copy 按钮:
消息内容:
通过页面快照检测登录状态:
登录页面特征:
已登录页面特征:
优点:
实现:
evaluate_script 执行 JavaScript.ds-markdown 或 [class*="message-content"] 元素innerText 返回优点:
缺点:
优点:
缺点:
用户: "ds:什么是量子计算?"
用户: "ds:再详细说一下 asyncio 的事件循环"
list_pages 和 select_page)# 检查 MCP 服务状态
mcporter list
# 添加 MCP 服务器配置
mcporter server add chrome-devtools \
--command "npx" \
--args "chrome-devtools-mcp@latest,--browserUrl,http://127.0.0.1:18800,--no-usage-statistics"
# 移除 MCP 服务器配置
mcporter server remove chrome-devtools
// 检查浏览器状态
browser({ action: "status", profile: "openclaw" })
// 启动浏览器
browser({ action: "open", profile: "openclaw", url: "about:blank" })
// 停止浏览器
browser({ action: "stop", profile: "openclaw" })
# 测试 CDP 端点
Invoke-WebRequest -Uri "http://localhost:18800/json/version" -Method GET
# 导航到 DeepSeek
mcporter call chrome-devtools.navigate_page type: "url" url: "https://chat.deepseek.com/"
# 获取页面快照
mcporter call chrome-devtools.take_snapshot
# 点击元素
mcporter call chrome-devtools.click uid: "<element_uid>"
# 输入文本
mcporter call chrome-devtools.type_text text: "查询内容"
# 按键
mcporter call chrome-devtools.press_key key: "Enter"
# 等待文本出现
mcporter call chrome-devtools.wait_for text: '["已思考", "已深度思考"]' timeout: 60000
# 执行 JavaScript 提取内容
mcporter call chrome-devtools.evaluate_script function: '
() => {
const elements = document.querySelectorAll(".ds-markdown");
let result = "";
elements.forEach(el => {
result += el.innerText + "\n\n";
});
return result.trim();
}
'
# 截图
mcporter call chrome-devtools.take_screenshot
# 列出所有页面
mcporter call chrome-devtools.list_pages
# 选择页面
mcporter call chrome-devtools.select_page pageId: 0
close_page 工具--remote-debugging-port 启动(内置 openclaw 配置文件已自动处理)本技能依赖于以下技能的正常工作:
如果自动恢复流程无法解决问题:
检查 Node.js 环境
node --version
npx --version
检查 chrome-devtools-mcp 包
npm list -g chrome-devtools-mcp
# 或
npx chrome-devtools-mcp@latest --help
检查端口占用
Get-NetTCPConnection -LocalPort 18800
手动重启
browser({ action: "stop", profile: "openclaw" })
// 等待 5 秒
browser({ action: "open", profile: "openclaw", url: "about:blank" })
联系用户 如果以上步骤都无法解决问题,向用户报告: