fast-browser-use
About This Skill
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) Use Cases
Documentation (Original)
Source: README.mdAny 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
Security Audit
Summary
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 Analysis
Toxic Flags
No Toxic signals detected by current static checks.
Key Risks 0 items
Deterministic Findings (Evidence)
| Rule | Severity | File | Snippet |
|---|---|---|---|
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/dom/extract_dom.js Line 4 | (function () { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/convert_to_markdown.js Line 5 | (function () { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/convert_to_markdown.js Line 22 | var loadReadability = new Function( |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/convert_to_markdown.js Line 58 | .forEach(function (el) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/hover.js Line 2 | (function () { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 29 | function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 41 | let t = function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 44 | var t = Array.from(e.attributes || [], function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 49 | this.log = function () { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 59 | .call(arguments, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 66 | } else this.log = function () {}; |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 227 | e.map(function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 266 | (this._forEachNode(a, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 291 | this._forEachNode(a, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 298 | ((t = a.replace(this.REGEXPS.srcsetUrl, function (e, t, i, a) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 351 | this._someNode(r, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 381 | this._forEachNode(this._getAllNodesWithTag(e, ["br"]), function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 434 | (this._forEachNode(e.children, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 435 | this._cleanMatchedNodes(e, function (e, t) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 449 | this._removeNodes(this._getAllNodesWithTag(e, ["p"]), function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 456 | this._forEachNode(this._getAllNodesWithTag(e, ["br"]), function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 460 | this._forEachNode(this._getAllNodesWithTag(e, ["table"]), function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 673 | (this._forEachNode(a, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 684 | this._forEachNode(e, function (e, t) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 833 | (this._attempts.sort(function (e, t) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 844 | this._someNode(G, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 857 | .replace(/&(quot|amp|apos|lt|gt);/g, function (e, t) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 860 | .replace(/&#(?:x([0-9a-f]+)|([0-9]+));/gi, function (e, t, i) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 872 | this._forEachNode(e, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 929 | .filter(function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 932 | .map(function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 959 | (this._forEachNode(i, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1035 | (this._forEachNode(e, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1050 | this._forEachNode(e, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1087 | !this._someNode(e.childNodes, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1106 | return this._someNode(e.childNodes, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1149 | this._forEachNode(e.getElementsByTagName("a"), function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1174 | this._removeNodes(this._getAllNodesWithTag(e, [t]), function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1225 | : ["col", "colgroup", "tfoot", "thead", "th"].some(function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1242 | function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1244 | var t = this.REGEXPS.b64DataUrl.exec(e.src); |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1295 | this._removeNodes(this._getAllNodesWithTag(e, [T]), function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/Readability.min.js Line 1412 | this._removeNodes(e, function (e) { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/scroll.js Line 1 | (async function () { |
| DYNAMIC_EVAL | high | skills/rknoche6/fast-browser-use/src/tools/select.js Line 2 | (function () { |
| QUALITY_README_PRESENT | low | README Line n/a | README detected |
| QUALITY_LOCKFILE_PRESENT | low | lockfile Line n/a | Lockfile detected |
| QUALITY_TESTS_PRESENT | low | tests Line n/a | Tests directory detected |
Scoring Criteria
Each skill is scored across 5 dimensions. The weighted total determines the star rating.
Star Rating Scale
Why This Score?
The following dimensions scored below 60, dragging the overall rating down:
- Code Toxicity: 0/100