Skip to content
This repository was archived by the owner on Apr 25, 2026. It is now read-only.
This repository was archived by the owner on Apr 25, 2026. It is now read-only.

feat: page --all 一次性抓取完整页面内容 #11

@4fuu

Description

@4fuu

动机

当前 page 命令按视口高度分页,每次只返回一页内容。对于使用了懒加载(loading="lazy"、Intersection Observer、content-visibility: auto、虚拟滚动等)的现代网页,视口外的内容可能尚未渲染,导致快照中缺失这些节点。

AI agent 在需要全量理解页面内容时,只能手动循环 page --next 逐页翻取,缺少一步到位的方式。

方案

page 命令新增 --all flag:

browser-cli page <session-id> --all [--fresh] [--json] [--verbose]

CLI 侧编排(不新增 extension action)

复用已有的 SCROLL + GET_PAGE_FRESH,由 CLI 驱动循环:

  1. 取初始快照,根据 scroll_height / viewport_height 算出总页数
  2. 逐页循环:
    • SCROLL 到对应偏移量
    • 等待页面稳定(触发懒加载内容渲染)
    • GET_PAGE_FRESH 取新快照,收集节点
  3. 按绝对坐标去重合并所有快照的节点
  4. 跳过 ViewFilter,直接输出全部内容

这符合项目「浏览器薄、CLI 厚」的架构原则——extension 侧无需改动。

约束与细节

项目 说明
互斥 --all--next/--prev/-p 互斥,同时传入应报错
节点去重 相邻页快照中同一元素会重复出现,需按绝对坐标 + tag + 内容去重
进度提示 长页面需多次滚动,可在 stderr 输出进度(如 Scrolling 3/12...),不影响 stdout 结构化输出
输出体积 长页面节点量大,--all 配合 --json 时可考虑默认 compact 模式
分页元数据 合并后视为单页输出,total_pages: 1, current_page: 1,保持与普通 page 输出结构一致,下游无需额外适配
滚动恢复 完成后将视口滚回原始位置,避免副作用

不采用的替代方案

  • 新增独立命令(fullpage / capture— 与 page 功能高度重叠,增加概念负担
  • extension 侧实现自动滚动 — 违反「浏览器薄」原则,节奏难以控制
  • 一次性 scrollTo(bottom) 后单次抓取 — 中间未经过视口的懒加载内容仍会缺失

依赖

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions