跳转至

捕获的网站脚本与静态 JavaScript 分析

export_web_scripts 将保留的浏览器资源桥接到现有的本地 JavaScript 分析器。CLI 和 MCP 均使用相同的工作流程。它读取已保存的 inspect_web_page 或 capture_browser_scenario 捕获结果,并将脚本及一份经校验的清单写入调用者选定的、尚不存在的目录中。

捕获与导出

对于被动检查,请选择 include_script_sources: true(CLI:--include-script-sources)。对于场景,请选择 capture.network.response_body: true。将完整的 Evidence 记录或其规范化结果保存为 UTF-8 JSON。MCP 的 structuredContent 包含完整的 Evidence 记录。

捕获结果必须是常规文件。指向常规文件的符号链接可被接受;在读取捕获字节或创建输出之前,会拒绝目录、命名管道和设备文件。

rea export-web-scripts /analysis/capture.json /analysis/exported-scripts --json
rea analyze-javascript-application /analysis/exported-scripts/files --json

MCP 使用 export_web_scripts,并传入 capture_path 与 output_directory 的绝对文件系统路径。其内联结果包含 analysis_input,可直接传递给 analyze_javascript_application。当没有可导出的脚本字节时,analysis_input 为 null,清单会保留不可用的来源及其原因。请使用相应的内容选项重新捕获。

目标目录不能已存在。每次捕获请使用新目录;现有目录或符号链接会被拒绝,且不会覆盖其中的内容。REA 会创建私有输出,通过摘要和持久化回读验证每个写入的文件,并在失败或取消时删除自身的部分输出。回滚失败时会报告残留路径。

来源与映射

每个来源都会内联返回,包含其 URL 及其脚本/框架标识,或请求事务与事件序列引用。结果还包含输入捕获结果的字节摘要、原始覆盖范围、提供的来源 Evidence 链接,以及持久化清单的摘要和字节数。已保存的 Evidence 信封必须具有有效的语义标识符和匹配的操作。

导出的 relative_path 值相对于 analysis_input.input_path。持久化的 manifest.json 包含相同的内联清单字段,但不包含其自身的描述符。它不会重复存储脚本字节。

  • 被动来源是 Debugger 暴露的文本,编码为 UTF-8,并保留经校验的来源摘要和 source-map 声明。不可用或明确非 JavaScript 的来源仍然保持不可用。
  • 场景来源使用被分类为 script 的已观察请求,这些请求与一个响应事件以及 Playwright 的 Response.body() API 为其响应对象返回的字节相关联。URL 永远不会用于选择响应。当 CDP 没有响应主体时,Playwright 可能会再次携带凭据加载请求 URL,因此事务和事件引用无法验证导出的字节来自原始网络事务。捕获结果和导出清单保留此限制。二进制和空的保留字节会被原样写入。
  • 普通的无查询参数 .js、.mjs 和 .cjs URL 路径按每个源(origin)归入目录,在无歧义的情况下保留其相对模块布局。
  • 竞争版本、查询/片段变体、文件/目录前缀冲突、内联来源以及无法表示的路径会使用带有说明原因的独立隔离名称。缺失的竞争来源也会阻止选择表面上规范的版本。
  • 当目标文件系统能够同时存储两种大小写不同的 URL 拼写时,它们会保留各自的相对路径。如果后出现的拼写在发布时发生冲突,该记录会被隔离,而较早出现的规范拼写可以保留。请阅读每条记录的 layout、relative_path 和 layout_reason;大小写隔离取决于目标文件系统,不同于预先规划的精确路径/版本隔离。

解读与限制

导出不会获取 URL 或执行 JavaScript。保留的 Debugger 来源和响应字节不能证明执行行为,也不能构成完整网站。场景响应字节保留的是 Playwright 的 body API 结果;请参阅上文关于来源-主体同一性的限制。已声明的脱敏会被保留,并可能改变 JavaScript 语法;被动捕获不会报告字节脱敏标志,因此该值保持未知。

现有分析器会盘点并解析实际导出的文件。它可以解析普通的已捕获相对模块,但不实现浏览器 import maps、根相对 URL 加载、远程导入或运行时行为。其本地解析器可能会去除导入查询参数/片段;隔离的变体会远离规范路径,以防止它们选择不同的已观察版本。缺失的依赖项仍然未知。导出过程中不会获取或重建 source maps。

导出 Evidence 描述的是对已保存捕获结果的派生。后续的应用分析 Evidence 描述的是本地导出产物。两者的身份与权威性保持分离。

验证

npm run verify:browser:scripts 通过真实浏览器、CLI 和 stdio MCP 演练主动捕获、精确来源导出、清单回读、查询变体以及相对模块分析。请将 REA_BROWSER_EXECUTABLE 设置为已安装的 Chrome 系列浏览器。验证器接受一个可选的已安装 REA 入口点参数,用于包验证。npm run verify:browser 还额外通过两种公共适配器覆盖了被动 inspect_web_page 导出。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea