Free tools Windows power users keep installed
One-click scans. No signup required.
Use await browser.pages() to get a Page[] for open pages across a Puppeteer browser’s contexts. To list pages in only one context, use await context.pages(). Both calls are asynchronous; await them before iterating over the result.
List pages across the browser
Call pages() on the Browser instance. Puppeteer documents this as returning open pages from all browser contexts. The result is a promise that resolves to an array of Page objects.
const pages = await browser.pages();
for (const page of pages) {
console.log(await page.title(), page.url());
}
This example assumes you already have a connected or launched Puppeteer browser stored in browser. The title and URL calls are asynchronous page methods, so await the title; url() returns the current URL. See the Browser.pages() API reference.
Limit the list to one browser context
Use pages() on the relevant BrowserContext when you do not want pages from other contexts included.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →#1 Best Overall
const contextPages = await context.pages();
for (const page of contextPages) {
console.log(page.url());
}
A browser context is an individual user context. A newly launched browser has at least one default context, and additional contexts may exist. A popup opened by a page belongs to that page’s context. Choose the browser-level method for browser-wide discovery and the context-level method when your work is scoped to one context. See the BrowserContext.pages() API reference and BrowserContext reference.
| Call | Scope | Return type |
|---|---|---|
await browser.pages() |
Pages across all browser contexts | Promise<Page[]> |
await context.pages() |
Pages in that browser context | Promise<Page[]> |
Understand what the result includes
A Puppeteer Page represents a single tab or extension background page, and one browser can have multiple Page instances. The ordinary browser.pages() and context.pages() listings omit non-visible pages; the API references give background_page as an example. The references point to Target.page() for finding such pages.
Rank #2
- HTML CSS Design and Build Web Sites
- Comes with secure packaging
- It can be a gift option
Both methods document an optional includeAll?: boolean argument and mark it experimental. Passing true includes all kinds of pages according to the API references. Because this option is experimental, check the API reference and the Puppeteer version installed in your project before relying on it.
const pagesIncludingAllKinds = await browser.pages(true);
See Target.page() and the Page API reference. The references do not establish a stable ordering contract for the returned pages, so do not use array position as a documented way to identify a particular visible tab.
Rank #3
Common issues and fixes
- The result is treated like an array but iteration fails:
pages()returns a promise. Writeconst pages = await browser.pages()inside an async function (or use top-level await where supported) before iterating. - A background page is missing: the ordinary listing omits non-visible pages such as
background_page. ConsultTarget.page()or check the experimentalincludeAlloption in the documentation for your installed version. - Pages from another context appear: that is expected from
browser.pages(), which spans all contexts. Callcontext.pages()on the context you need. - The method or option does not match your installed package: Puppeteer’s online API pages can show different version labels. Check the API docs corresponding to your installed package rather than assuming every version has identical behavior; the reviewed Browser API reference displayed 25.9.0, while the BrowserContext reference displayed 25.12.0.
Or skip the browser setup
If the task is to capture a website rather than inspect Puppeteer’s open tabs, ScreenshotNeo can return a screenshot or PDF with one GET request. Its API accepts and removes cookie/consent banners, newsletter popups and chat widgets before capture; bot checks, blank pages and failed loads are not billed. It also provides an MCP server so AI agents can take screenshots.
For example, save a screenshot of Stripe as WebP:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for parameters and response details. Its Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month, with no card required.
Quick Recap
Best Value
Rank #4
- Brand: Wiley
- Set of 2 Volumes
- A handy two-book set that uniquely combines related technologies Highly visual format and accessible language makes these books highly effective learning tools Perfect for beginning web designers and front-end developers
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

