fast-browser-use
中风险
作者:rknoche6 | 审计时间:2026-02-26T09:59:20.936Z | 规则集:0.2.0
技能介绍
High-performance browser automation for heavy scraping, multi-tab management, and precise DOM extraction. Use this when you need speed, reliability, or advanced state management (cookies/local storag…
✨
--analyze-structure: Also extract page structure (headings, nav, sections, meta) ✨
--max-pages N: Limit structure analysis to N pages (default: 5) ✨
--max-sitemaps N: Limit sitemap parsing to N sitemaps (default: 10, useful for large sites) ✨ snapshot: Capture the raw HTML snapshot (YAML/Markdown optimized for AI).
✨ screenshot: Capture a visual image of the page.
✨ extract: Get structured data from the DOM.
✨ markdown: Convert the current page content to Markdown.
✨ sitemap: Analyze site structure via robots.txt, sitemaps, and page semantic analysis.
使用场景
1 navigate: Visit a specific URL.
2 wait: Pause execution or wait for specific conditions.
3 switch_tab: Switch focus to a specific tab.
4 close_tab: Close the current or specified tab.
5 press_key: Send specific keyboard events.
文档(原文)
来源:README.md 以下为作者原文(通常为英文)。安装请以页面顶部“快速安装”为准。
Any contribution is very much welcome!
Skill published in clawhub https://www.clawhub.ai/rknoche6/fast-browser-use
browser-use
A lightweight Rust library for browser automation via Chrome DevTools Protocol (CDP).
✨ Highlights
- Zero Node.js dependency - Pure Rust implementation directly controlling browsers via CDP
- Lightweight & Fast - No heavy runtime, minimal overhead
- MCP Integration - Built-in Model Context Protocol server for AI-driven automation
- Simple API - Easy-to-use tools for common browser operations
Installation
cargo add browser-use
Styling
cargo +nightly fmt
Quick Start
use browser_use::browser::BrowserSession;
// Launch browser and navigate
let session = BrowserSession::launch(Default::default())?;
session.navigate("https://example.com", None)?;
// Extract DOM with indexed interactive elements
let dom = session.extract_dom()?;
MCP Server
Run the built-in MCP server for AI-driven automation:
# Headless mode
cargo run --bin mcp-server
# Visible browser
cargo run --bin mcp-server -- --headed
Features
- Navigate, click, input, screenshot, extract content
- DOM extraction with indexed interactive elements
- CSS selector or numeric index-based element targeting
- Thread-safe browser session management
Requirements
- Rust 1.70+
- Chrome or Chromium installed
安全审计
中风险
摘要
High-performance browser automation for heavy scraping, multi-tab management, and precise DOM extraction. Use this when you need speed, reliability, or advanced state management (cookies/local storage) beyond standard web fetching.
风险画像
ToxicSkills 分析
黑名单
未命中
提示词注入
未检测到
Toxic 标签
obfuscation
当前静态检测未发现 Toxic 信号。
关键风险 0 项
暂无 LLM 风险要点(LLM 未启用或无缓存)。
确定性发现(证据)
| 规则 | 严重性 | 文件 | 片段 |
|---|---|---|---|
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/dom/extract_dom.js 行 4 | (function () { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/convert_to_markdown.js 行 5 | (function () { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/convert_to_markdown.js 行 22 | var loadReadability = new Function( |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/convert_to_markdown.js 行 58 | .forEach(function (el) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/hover.js 行 2 | (function () { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 29 | function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 41 | let t = function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 44 | var t = Array.from(e.attributes || [], function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 49 | this.log = function () { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 59 | .call(arguments, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 66 | } else this.log = function () {}; |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 227 | e.map(function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 266 | (this._forEachNode(a, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 291 | this._forEachNode(a, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 298 | ((t = a.replace(this.REGEXPS.srcsetUrl, function (e, t, i, a) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 351 | this._someNode(r, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 381 | this._forEachNode(this._getAllNodesWithTag(e, ["br"]), function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 434 | (this._forEachNode(e.children, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 435 | this._cleanMatchedNodes(e, function (e, t) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 449 | this._removeNodes(this._getAllNodesWithTag(e, ["p"]), function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 456 | this._forEachNode(this._getAllNodesWithTag(e, ["br"]), function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 460 | this._forEachNode(this._getAllNodesWithTag(e, ["table"]), function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 673 | (this._forEachNode(a, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 684 | this._forEachNode(e, function (e, t) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 833 | (this._attempts.sort(function (e, t) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 844 | this._someNode(G, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 857 | .replace(/&(quot|amp|apos|lt|gt);/g, function (e, t) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 860 | .replace(/&#(?:x([0-9a-f]+)|([0-9]+));/gi, function (e, t, i) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 872 | this._forEachNode(e, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 929 | .filter(function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 932 | .map(function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 959 | (this._forEachNode(i, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1035 | (this._forEachNode(e, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1050 | this._forEachNode(e, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1087 | !this._someNode(e.childNodes, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1106 | return this._someNode(e.childNodes, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1149 | this._forEachNode(e.getElementsByTagName("a"), function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1174 | this._removeNodes(this._getAllNodesWithTag(e, [t]), function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1225 | : ["col", "colgroup", "tfoot", "thead", "th"].some(function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1242 | function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1244 | var t = this.REGEXPS.b64DataUrl.exec(e.src); |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1295 | this._removeNodes(this._getAllNodesWithTag(e, [T]), function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js 行 1412 | this._removeNodes(e, function (e) { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/scroll.js 行 1 | (async function () { |
| DYNAMIC_EVAL | 高 | skills/rknoche6/fast-browser-use/src/tools/select.js 行 2 | (function () { |
| QUALITY_README_PRESENT | 低 | README 行 无 | README detected |
| QUALITY_LOCKFILE_PRESENT | 低 | lockfile 行 无 | Lockfile detected |
| QUALITY_TESTS_PRESENT | 低 | tests 行 无 | Tests directory detected |
评分标准
每个技能从 5 个维度评分,加权总分决定星级。
代码毒性 0/100 (权重 30%)
隐私风险 100/100 (权重 25%)
权限范围 90/100 (权重 20%)
作者声誉 75/100 (权重 15%)
代码质量 100/100 (权重 10%)
星级说明
5★ 安全 — 总分 ≥ 80
4★ 良好 — 总分 70–79
3★ 注意 — 总分 60–69
2★ 有风险 — 总分 40–59
1★ 危险 — 总分 < 40
为何是这个评分?
以下维度评分低于 60 分,拉低了整体评级:
- 代码毒性: 0/100