with one click
xrk-crawl
当你需要开发/排查 HTTP 抓取、SSRF、Playwright 受控浏览器、本地字体增强截图,或判断 web_fetch 与 browser 工作流如何选型时使用。
Menu
当你需要开发/排查 HTTP 抓取、SSRF、Playwright 受控浏览器、本地字体增强截图,或判断 web_fetch 与 browser 工作流如何选型时使用。
当需要从整体理解 XRK-AGT 的架构、目录、运行流程和技术栈时使用。
当你需要使用/扩展渲染器(HTML 模板渲染、截图输出)或让 AI 生成图片报表/可视化时使用。
当你需要理解 XRK-AGT 的运行时核心(Bot 主类)、事件总线、HTTP/WS 启动流程与全局对象时使用。
编写或审查 core/src 代码时的写法与性能规范(全局裸名、状态、I/O、异步、HTTP)。改 Core 前必读。
需要快速定位「该看哪份文档/哪段代码/哪份配置」时使用;提供文档导航与权威路径。
当你需要开发或排查 HTTP API(core/*/http/*.js)、理解 HttpApi 基类、ApiLoader、业务层约定时使用。
| name | xrk-crawl |
| description | 当你需要开发/排查 HTTP 抓取、SSRF、Playwright 受控浏览器、本地字体增强截图,或判断 web_fetch 与 browser 工作流如何选型时使用。 |
core/system-Core/lib/crawl/index.js — 插件、stream、HTTP 业务只从这里 import。
import {
fetchWithPolicy,
runWebFetch,
buildWebFetchRuntime,
assertUrlSafeForFetch,
PlaywrightAgentSession,
createLocalFontScreenshotHelper,
DEFAULT_DEVICE_SCALE_FACTOR,
DOM_TWEAK_LABEL_COLON_HALF,
} from '../lib/crawl/index.js'
| 场景 | 能力 | 实现文件(均在 lib/crawl/) |
|---|---|---|
| 简单 API / 无需 JS 渲染 | fetchWithPolicy | 经 ../net/fetcher.js 导出 |
| 正文提取、Readability、Firecrawl | runWebFetch | web-fetch-executor.js |
| 开放域检索 | runWebSearch | web-search-executor.js + web-search-registry.js(13 提供商) |
| 零配置免费检索 | runParallelFreeSearch | web-search-parallel-free.js + web-search-mcp-client.js |
| 浏览器运行时 | buildBrowserRuntime | crawl-config.js(aistream.crawl + renderer.playwright) |
MCP web_fetch / web_search | stream/web.js | 内部用 crawl |
| JS 渲染、交互、截图 | PlaywrightAgentSession | playwright-session.js |
| MCP 受控浏览器 | stream/browser.js | browser_* 工具 |
| 截图字体/样式与线上一致 | createLocalFontScreenshotHelper | page-screenshot-enhance.js |
选型:HTTP 能拿正文 → runWebFetch;要渲染或 PNG → Playwright。
ssrf-policy.js:allowlist、legacy IP、DNS pinning、createPinnedDispatcherssrf-guard.js:对外 re-export assertUrlSafeForFetchfetch-guard.js:fetchWithSsrFGuard(每跳 pin DNS + 重定向环)browser-navigation-guard.js:gotoWithNavigationGuard(page.route 拦截)| 方法 | 说明 |
|---|---|
roleSnapshot() | ARIA ref 树 + storeRoleRefsOnPage |
runAct({ kind, ref, ... }) | 含 batch、scrollIntoView、fill fields |
listTabs / newTab / closeTab / focusTab | 多标签 |
getConsoleMessages / getNetworkRequests | 页面观测 |
armDialog / respondDialog | 弹窗 |
goto(url) | gotoWithNavigationGuard + 交互后 SSRF 复检 |
lib/crawl/
index.js
ssrf-ip-policy.js
ssrf-policy.js
ssrf-guard.js
fetch-guard.js
redirect-headers.js
browser-navigation-guard.js
pw-page-state.js
pw-role-snapshot.js
pw-ref-locator.js
act-policy.js
playwright-session.js
web-fetch-executor.js
web-fetch-utils.js
web-search-endpoint.js
web-search-shared.js
web-search-registry.js
web-search-executor.js
crawl-config.js
web-search-mcp-client.js
web-search-parallel-shared.js
web-search-{duckduckgo,brave,perplexity,exa,tavily,parallel,parallel-free,gemini,kimi,minimax,firecrawl,searxng,ollama}.js
page-screenshot-enhance.js
Schema:core/system-Core/commonconfig/system.js → aistream.fields.crawl
默认模板:config/default_config/aistream.yaml → crawl:
运行时数据:data/server_bots/{port}/aistream.yaml → crawl.webFetch / crawl.webSearch / crawl.browser
优先级:调用方 overrides > aistream.crawl > renderer.playwright(browser 启动)> 默认
单一实现:crawl-config.js — resolveWebFetchRuntime / resolveWebSearchConfig / buildBrowserRuntime
禁止在 crawl 模块内读取 process.env 做业务配置;凭据与参数一律写 data/server_bots/{port}/aistream.yaml → crawl.*(控制台 commonconfig 编辑)。
web-search-registry.js(WEB_SEARCH_PROVIDERS、resolveAutoDetectProviderId)crawl-config.js → aistream.crawl;getWebSearchProviderScope 对齐 parallelFree ↔ parallel-free;browser 另合并 renderer.playwrightweb-search-executor.js → buildWebSearchRuntime / runWebSearchweb-search-endpoint.js(withTrustedWebSearchEndpoint / 自托管 SearXNG·Firecrawl)runWebSearch 默认 parallel-free,回退链 parallel-free → duckduckgostream/web.js → web_fetch(默认 pinDns: true)stream/browser.js → 全量 browser_*(见 docs/system-core.md §7)lib/crawl/ 内并在 index.js 导出,不要新建仅 re-export 的包装文件。using + gotoAndCapture,勿手写四段截图流程。lib/net/fetcher.js、web-fetch-executor.js 已用全局 fetch + AbortSignal.timeout;扩展时沿用,禁止 node-fetch。toBase64() / Uint8Array.fromBase64(),勿 toString('base64')。Error.isError / normalizeError(skill xrk-node-runtime)。docs/system-core.md(web / browser 章节)core/system-Core/plugin/ 下未写入 .gitignore 白名单的 .js 仍会加载,但不计入框架 baseline