browser_extract_list
Read the rows of a long or virtualised list by scrolling its container until no new rows appear. Use this instead of browser_get_page_content whenever a page shows a repeating list longer than the viewport - mail lists (Outlook, Gmail)…
Instructions
Read the rows of a long or virtualised list by scrolling its container until no new rows appear. Use this instead of browser_get_page_content whenever a page shows a repeating list longer than the viewport - mail lists (Outlook, Gmail), invoice/billing tables, search results, transaction histories. Those UIs keep only ~7 rows in the DOM at a time, so a single page read returns a sliver and looks complete. Pass the CSS selector of one repeating row (e.g. '[role="option"]', 'tr', '[role="listitem"]'); the scrollable ancestor is found automatically. When the tab is the active one in its window, it scrolls with real wheel events, also at the bottom, so a feed that loads more rows on wheel (Threads, X) loads them. A hidden page (a background tab) gets no wheel or scroll events, IntersectionObserver callbacks or animation frames, so a list that loads or renders rows while you scroll stops at what is already there; then reached_end is false and note says why. Returns deduplicated row text, scroll_method (wheel or script) and reached_end, which is true only when the list stood at its bottom in a visible page with no new rows, growth or movement for stable_rounds rounds in a row. If the selector matches no rows with text, the answer is error "no-rows".
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| wait_ms | No | Wait after each scroll so new rows can render (default 350) | |
| max_rows | No | Stop after this many unique rows (default 500, max 5000) | |
| selector | Yes | CSS selector matching ONE repeating row (e.g. '[role="option"]' in Outlook, 'tr' in a table) | |
| container | No | Optional CSS selector for the scrollable container. Omit to auto-detect the row's nearest scrollable ancestor. | |
| scroll_step | No | Pixels per scroll. Omit for 85% of the container height. | |
| stable_rounds | No | Rounds in a row with no new rows, growth or movement before stopping, and at the bottom before reached_end (default 3) |