# Handle Infinite Scroll

> Scrolls a page to load additional content via infinite-scroll, with stop conditions (no-more-content, max iterations, or target selector visible). Used for feeds, lists, and search results that lazy-load.

- **Type:** Skill
- **Install:** `agentstack add skill-bettyguo-browser-skills-handle-infinite-scroll`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [bettyguo](https://agentstack.voostack.com/s/bettyguo)
- **Installs:** 0
- **Category:** [Search](https://agentstack.voostack.com/c/search)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [bettyguo](https://github.com/bettyguo)
- **Source:** https://github.com/bettyguo/browser-skills/tree/main/skills/handle-infinite-scroll

## Install

```sh
agentstack add skill-bettyguo-browser-skills-handle-infinite-scroll
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Handle Infinite Scroll

## When to invoke

When the page extends its content as the user scrolls down (Twitter/X feeds, Reddit posts, Instagram search, news homepages, search-result feeds). The matcher cannot easily detect infinite-scroll *a priori* — it's a runtime behavior, not a DOM marker. So this skill is typically invoked when:

- The user task explicitly mentions "scroll to load more" / "all posts" / "everything available"
- A previous `extract_*` skill returned fewer rows than the user expected
- The page has `Load more` (visual cue) — though "load more" buttons are a different skill, `pagination-next-page`

## Recipe

1. wait_for_dom_ready timeout=3s
2. scroll_until condition="no_more_content" max_iters=20 delay=400ms
3. wait extra=500ms

## Success criteria

- assert scrolled_at_least_once

There's no strict "succeeded" semantic here — if `max_iters` was hit, the skill returns `success` and the caller decides if it has enough rows. The trace records the actual iteration count and final page height.

## Configurable knobs

The recipe above is the default. Authors can override via the agent invoking with `vars`:

- `vars.max_scroll_iters` → overrides `max_iters` (cap: 100)
- `vars.target_selector` → switches condition to `selector_present:` (stops when the named selector becomes visible)

## When NOT to use

- The page paginates instead of scrolling — use `pagination-next-page`.
- The "infinite" scroll is actually a "load more" button — use `pagination-next-page` (the button-click variant).
- Virtualized lists where scrolling DESTROYS earlier rows from the DOM (some React virtualization). The extractor must be invoked *during* the scroll loop, not after — a future composite skill `infinite-scroll-and-extract` will handle this.

## Known failures

- **Virtualized lists (~15% of modern feeds):** offscreen rows are unmounted; by the time `scroll_until` stops, only the last viewport's rows are in the DOM. Workaround: invoke `extract_*` skill at each iteration (manual composition).
- **JS-heavy sites that pause loading on tab-blur:** if the test runs in a headless context that the site sniffs as "not visible," loading never triggers. Use `--headed` mode for these.
- **Sites with anti-scroll-bot detection:** some sites detect "too fast" scrolling and stop serving content. `delay=400ms` is calibrated for "human-like"; lower values trigger blocks.
- **Sites that load content based on screen size:** running with a tiny viewport produces fewer rows per scroll. Default viewport in `start_browser` is 1280×800 — keep that for benchmark consistency.

## Example usage

```
Agent task: "Show me all posts on this Reddit page."
→ invoke_skill("verify-page-loaded") → success
→ invoke_skill("handle-infinite-scroll") → success, scrolled 12 times
→ invoke_skill("extract-list-pagination") → all rows captured
```

## Related skills

- `pagination-next-page` — for paginated alternatives to infinite scroll
- `verify-page-loaded` — run first; need a stable initial state
- `extract-table-pagination` / `extract-list-pagination` — typically chained after scrolling

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [bettyguo](https://github.com/bettyguo)
- **Source:** [bettyguo/browser-skills](https://github.com/bettyguo/browser-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-bettyguo-browser-skills-handle-infinite-scroll
- Seller: https://agentstack.voostack.com/s/bettyguo
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
