在持久化浏览器里读取页面并执行点击输入
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add DmitPerson42/dsh-yandex-browser该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 31 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 16 处,展示前 16 条)
- 读取本地文件lib/index.js:137
if (existsSync(candidate)) return candidate - 读取本地文件lib/index.js:150
if (!existsSync(profileDir)) return state - 读取本地文件lib/index.js:152
state.hasCookies = existsSync(path.join(profileDir, 'Default', 'Cookies')) - 读取本地文件lib/index.js:153
|| existsSync(path.join(profileDir, 'Default', 'Network', 'Cookies')) - 读取本地文件lib/index.js:154
state.hasPreferences = existsSync(path.join(profileDir, 'Default', 'Preferences')) - 读取本地文件lib/index.js:156
state.sizeMb = Math.round(statSync(profileDir).size / 1e6 * 10) / 10 - 写入本地文件lib/index.js:378
mkdirSync(path.dirname(file), { recursive: true }) - 写入本地文件lib/index.js:379
writeFileSync(file, Buffer.from(data, 'base64')) - 写入本地文件lib/index.js:495
mkdirSync(directory, { recursive: true }) - 写入本地文件lib/index.js:781
mkdirSync(profileDir, { recursive: true }) - 执行外部命令来自配置/变量lib/index.js:783
const child = spawn( - 发起网络请求lib/cdp.js:41
const response = await fetch(`${endpoint}${pathname}`, { method, signal: controller.signal }) - 发起网络请求lib/cdp.js:173
const response = await fetch(`${endpoint}/json/${command}/${id}`, { method: 'PUT', signal: controller.signal }) - 读取本地文件lib/cdp.js:428
const parsed = JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件lib/cdp.js:443
mkdirSync(path.dirname(file), { recursive: true }) - 写入本地文件lib/cdp.js:444
writeFileSync(file, JSON.stringify({ updated: new Date().toISOString(), tabs: [...tabs] }, null, 2))
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 持久化浏览器配置档
- 读取页面内容
- 执行点击与输入
DSH 插件:给智能体一个持久化的 Yandex 浏览器配置档,外加通过 CDP 读取和操控页面的工具
README
由 DeepSeek 最新模型翻译生成dsh-yandex-browser
DeepSeek Harness 插件:拉起 Яндекс Браузер,带持久化配置档和调试端口,让智能体能在你真实的浏览器里干活——连同你登录过的那些授权——并给模型提供直接操作页面的工具。
为什么需要它
智能体在浏览器里通常用的是用完即弃的配置档:每次启动都是一个干净的浏览器,没有标签页、没有扩展、没有 cookies。麻烦就来了:打不开邮箱,进不了个人中心,用不了扩展。
这个插件解决的正是这件事:智能体的浏览器有一个持久化配置档(%USERPROFILE%\.dsh\browsers\yandex)。你手动登录一次账号,之后会话一直活着,智能体直接拿来用。
它是怎么工作的
Яндекс Браузер 就是 Chromium,所以它能开本地调试端口(Chrome DevTools Protocol)。外部程序通过这个端口看到标签页、打开新标签页、在页面里执行 JavaScript。
展开完整文档(README 剩余 1 节)
dsh-yandex-browser DeepSeek Harness 插件:拉起 Яндекс Браузер,带持久化配置档和调试端口,让智能体能在你真实的浏览器里干活——连同你登录过的那些授权——并给模型提供直接操作页面的工具。 为什么需要它 智能体在浏览器里通常用的是用完即弃的配置档:每次启动都是一个干净的浏览器,没有标签页、没有扩展、没有 cookies。麻烦就来了:打不开邮箱,进不了个人中心,用不了扩展。 这个插件解决的正是这件事:智能体的浏览器有一个持久化配置档(%USERPROFILE%\.dsh\browsers\yandex)。你手动登录一次账号,之后会话一直活着,智能体直接拿来用。 它是怎么工作的 Яндекс Браузер 就是 Chromium,所以它能开本地调试端口(Chrome DevTools Protocol)。外部程序通过这个端口看到标签页、打开新标签页、在页面里执行 JavaScript。插件做三件事: DSH GUI -> композиция |-- yandex_browser: поднимает браузер на порту 9222 и следит за ним |-- yandex_page: читает страницу (текст, элементы, eval, скриншот) |-- yandex_act: действует на странице (переход, клик, ввод, вкладки) -- MCP yandex (необязательно): Playwright с теми же 25 инструментами 插件不依赖 MCP:yandex_page 和 yandex_act 直接通过同一个端口跟浏览器对话。当 MCP 客户端连不上时,正需要这一层——它以前就是这么干的,然后超时挂掉。 工具 yandex_browser —— 生命周期 | 动作 | 做什么 | | status | 浏览器是否已启动、版本、端点地址、配置档路径、已打开的标签页 | | start | 用智能体的配置档和调试端口启动浏览器(如果已经启动,什么都不做) | | open | 在新标签页打开 URL;浏览器没启动就先启动 | | login | 打开登录页(默认是 Яндекс Паспорт),让你自己输密码 | | tabs | 已打开标签页的列表 | | close | 关闭浏览器;已保存的登录状态留在配置档里 | yandex_page —— 读取 | 动作 | 做什么 | | text | 页面文本,加上带标注的交互元素列表 | | eval | 执行任意 JavaScript 表达式并返回结果 | | screenshot | 保存 PNG(默认只截可见区域,参数 fullPage 截整页) | | tabs | 标签页及其 id;插件创建的标签页带标记 | text 不只返回 innerText,还返回来自 aria-label、title 和 placeholder 的元素标注。正是它让基于 Web Components 的界面变得可读:比如 Google 云端硬盘,文件行住在自定义元素里,普通页面文本里根本没有它们。 yandex_act —— 操作 | 动作 | 做什么 | | navigate | 在当前标签页或新标签页跳转到 URL | | click | 点击通过 CSS 选择器或可见文本找到的元素 | | type | 在输入框中输入文本(会清空输入框,兼容 React 表单),可选发送 Enter | | key | 按键(Enter、Tab、Escape、方向键、PageUp/PageDown) | | activate | 把标签页显示给用户 | | close | 关闭一个标签页 | | close_created | 关闭这个插件打开过的所有标签页 | | wait | 等待元素按选择器或文本出现 | 典型流程:status -> open -> text(看清页面上有什么)-> click / type -> close。 智能体绝不输入密码。要登录账号时,它调用 login,由你在可见的浏览器窗口里输入数据。 关于标签页的规则 智能体打开的标签页,放着不管就是垃圾。所以插件会记住自己打开过的所有标签页 id(存在配置档里的 agent-tabs.json,DSH 重启后依然保留),并能用一条命令关掉它们: yandex_act action: "close_created" # 关掉插件打开过的一切 你自己的标签页插件不会碰:只能按明确 id 关闭,id 由 yandex_page action: "tabs" 或 yandex_act 返回。 安装 dsh plugin --profile web add github:DmitPerson42/dsh-yandex-browser 插件按普通 bundle 安装:包声明 dsh.bundle.patch,旁边的 cordis.patch.yml 把它加进配置档。重启 DSH GUI 就行。 等插件进了目录,也能用插件市场里的按钮按同样方式安装(dsh plugin --profile web add dshmarket)。 手动安装,不用命令行 git clone https://github.com/DmitPerson42/dsh-yandex-browser pwsh -File .\dsh-yandex-browser\install.ps1 脚本把插件复制到 ~\.dsh\plugins\dsh-yandex-browser(不带依赖,只用 Node 内置模块),并打印出需要加到 ~\.dsh\profiles\web\cordis.patch.yml 的内容: - insert: - id: yandex-browser name: "file:///C:/Users/Druli/.dsh/plugins/dsh-yandex-browser/lib/index.js" config: autoStart: true 改完配置后重启 DSH GUI。 重要:修正 MCP 客户端 同一个 cordis.patch.yml 里有 MCP 服务器 yandex。原始配置把地址当位置参数传: args: ["-y", "@playwright/mcp@latest", "http://127.0.0.1:9222"] # 这样不行 当前版本的 Playwright MCP 不接受这个参数,会报 too many arguments. Expected 0 arguments but got 1,导致服务器一直卡在 disconnected 状态。需要显式加标志: args: - "-y" - "@playwright/mcp@latest" - "--cdp-endpoint" - "http://localhost:9222" 这里有两点,都经过实践验证。 地址要写成字面量。 patch 记录里的 !!js 语法不会被求值:MCP 服务器拿到的是字符串 process.env.YANDEX_CDP ?? 'http://localhost:9222',然后报 Invalid URL 挂掉。要改端口,就同时改这一行和插件的 port。 必须是 localhost,不是 127.0.0.1。 浏览器有时在 IPv4 上开调试套接字,有时只在 IPv6 上开——这台机器上它有一次只监听 [::1],请求 127.0.0.1 就看不到它。Node 里的 localhost 会同时遍历两个协议栈。插件也这么做:两个地址都试,响应里给出真正有回应的那个。 登录账号——只做一次 1. 带插件启动 DSH:浏览器会自己起来(autoStart: true)。 2. 让智能体去做:「打开 Yandex 登录页」——或者调用 yandex_browser,传 action: "login"。 3. 在浏览器窗口里手动登录账号。勾上「记住我」,如果它提议「在所有设备上退出登录」——不用勾,密码存在配置档里。 4. 完成。会话保存在智能体的配置档里,之后每次启动都能用。 顺便值得登一次你希望智能体浏览器里有的扩展:扩展装进配置档,重启后依然在。 配置 | 字段 | 默认值 | 含义 | | autoStart | true | 加载插件时启动浏览器,让 MCP 客户端立刻找到活着的端点 | | cdpEndpoint | YANDEX_CDP 或 http://localhost:9222 | DevTools 地址 | | profileDir | YANDEX_BROWSER_PROFILE 或 ~\.dsh\browsers\yandex | 持久配置档 | | executable | YANDEX_BROWSER_PATH 或自动查找 | browser.exe 路径 | | port | YANDEX_BROWSER_PORT 或端点里的端口 | 调试端口 | | screenshotDir | ~\.dsh\browser-shots | 没显式传 file 时截图存哪 | | tabStateFile | <profileDir>\agent-tabs.json | 插件创建的标签页记忆 | 端口和配置档跟 MCP 客户端绑定:改 YANDEX_CDP——两个都跟着变。 检查 node .\test\smoke.mjs # 只测 status,不启动浏览器 node .\test\smoke.mjs --launch # start + open + tabs node .\test\check-login.mjs # 用户是否已登录账号 node .\test\mcp-check.mjs # 在活着的浏览器上起 MCP,并打印工具 node .\test\page-tools.mjs # 底层 CDP 跑一遍:标签页、文本、eval、截图 node .\test\tools.mjs # 三个工具全跑,用本地测试页 node .\test\close-test-browsers.mjs # 关掉测试实例:端口写在参数里 tools.mjs 是主测试:它用假的工具注册表加载插件,在新标签页打开 test/fixtures/page.html,读页面、输入文本、按文字和 aria-label 点按钮、截图、关标签页。不需要 DSH 就能跑——有智能体浏览器开着就够。 check-login 不靠重定向:它从 yandex_login 这个 cookie 读账号名,看有没有 Session_id,再打开 passport.yandex.ru/profile——如果登录表单没出现,会话就是活的。其他 cookie 的值不读。 如果出了岔子 后台页面不响应。 Chromium 会冻结后台标签页,而冻结的标签页不响应任何 Runtime.evaluate —— 看起来就像死掉的页面。插件自己解决这个问题:每个会话开始时都会执行 Page.bringToFront。副作用是,智能体正在操作的标签页会弹到最前面。这很明显,但否则没法读取后台页面。 端口 9222 已被另一个浏览器占用 —— 插件会告诉你具体是哪个。关掉它,或者通过 YANDEX_CDP 换端口(别忘了 YANDEX_BROWSER_PORT,让插件和 MCP 指向同一个地址)。 首次启动超过一分钟 —— 冷配置档会一次性创建自己的组件(AsrSubtitles、component_crx_cache 等),并显示欢迎页面。插件最多等待 60 秒;之后的启动只需几秒。 MCP server is disconnected —— 客户端没等到浏览器,重连次数已耗尽。用 yandex_browser action: "start" 启动浏览器,然后重启 DSH 会话。这不影响 yandex_page 和 yandex_act —— 它们每次调用都会重新连接。 浏览器不启动,配置档为空 —— 从 Chromium 136 开始,--remote-debugging-port 对主配置档不再生效。插件始终用单独的 --user-data-dir 启动浏览器;这一点不能改,否则端口不会打开。 第二个实例起不来 —— 如果你已经用日常配置档打开了 Yandex Browser,智能体仍会启动一个带自己配置档的独立实例。两者可以同时运行;端口只被智能体的实例占用。 沙箱 —— 在 workspace-write 模式下,插件无法在工作目录之外创建配置档。在 DSH 中插件运行在宿主进程里,所以正常情况下没有这个问题;这个限制只影响从沙箱里跑测试(这种情况下 tools.mjs 会把截图写到临时目录,并警告标签页列表写入失败 —— 不影响测试结果)。 代码结构 | 文件 | 作用 | | lib/index.js | 三个工具、浏览器生命周期、标签页记账 | | lib/cdp.js | 底层 CDP 客户端:HTTP 端点、标签页 WebSocket 会话、页面读取脚本 | | test/*.mjs | 不依赖 DSH 的测试跑批:冒烟、登录、MCP、CDP、全部工具 | | install.ps1 | 把插件复制到配置档,并给出 cordis.patch.yml 的提示 | CDP 会话都是短命的:一次操作一个 WebSocket,用完立刻关闭。这样没有东西会泄漏,而且这种会话能扛住操作中途被关闭或重载的标签页。 许可证 MIT。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
DmitPerson42/dsh-yandex-browser
在持久化浏览器里读取页面并执行点击输入
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目