---
title: "Playwright Page Capture"
canonical: https://trickest.com/library/playwright-page-capture
description: "Open one URL in Chromium, Firefox, or WebKit with playwright and keep a screenshot, rendered HTML, and meta.json, or a HAR and Playwright trace."
---

# Playwright Page Capture

## Overview

A status code and a title do not tell you what a single page painted.
JavaScript login walls, consent banners, and client-only routes look healthy in
a probe and empty in an HTTP fetch, so you walk into the next step without a
picture of the page.

This workflow opens one URL in a real browser and keeps the screenshot, the HTML
the engine rendered, and a `meta.json` with the final URL, status, and title.
Switch the mode to trace when you need a HAR and a Playwright trace, or to
script when you have a function to run on the page. Schedule it when that one
page is the thing that changes. Those files are the evidence an
[offensive security](/use-cases/offensive-security) pass attaches to a host
before you pick the next workflow.

The [playwright](/tools/playwright) node does the navigation. A small script
copies the files into `report.md` and `report.json` so you can read the capture
without opening the folder.

## Pipeline

1. Open the URL. [playwright](/tools/playwright) (`capture`) launches Chromium
   by default, with mode set to screenshot. It writes `screenshot.png`,
   `page.html`, and `meta.json`. Trace mode also writes `network.har`,
   `console.log`, and `trace.zip`. Script mode runs your JS and still writes
   `meta.json`.
2. Pack the capture. `report` copies those files and writes `report.md` plus
   `report.json` so the run is one readable packet.

## Inputs

- **URL.** The single page to open. Seeded as `https://example.com`.
- **Mode.** `screenshot`, `trace`, or `script`. Seeded as `screenshot`.

## Outputs

- **Screenshot.** `screenshot.png` of the rendered viewport in screenshot and
  trace modes.
- **Rendered HTML.** `page.html` as the browser painted it.
- **Capture meta.** `meta.json` with url, final_url, status, title, mode,
  browser, and elapsed_ms.
- **Report packet.** `report.md` and `report.json` listing those files. Trace
  mode also keeps `network.har`, `console.log`, and `trace.zip`.

## Integrations

- [playwright](/tools/playwright) opens the URL and writes the capture folder.

## Sample output

From a completed run against `example.com` in screenshot mode. The same graph
was also run with mode set to trace; that run added `network.har`,
`console.log`, and `trace.zip`.

`meta.json` from the screenshot run:

```json
{
  "mode": "screenshot",
  "url": "https://example.com",
  "final_url": "https://example.com/",
  "status": 200,
  "title": "Example Domain",
  "elapsed_ms": 163,
  "browser": "chromium",
  "viewport": { "width": 1280, "height": 720 },
  "headed": false,
  "error": null
}
```

`report.json` from the screenshot run:

```json
{
  "files": ["meta.json", "page.html", "screenshot.png"],
  "meta": {
    "mode": "screenshot",
    "url": "https://example.com",
    "final_url": "https://example.com/",
    "status": 200,
    "title": "Example Domain"
  }
}
```

`report.md` from the later trace run listed `console.log`, `meta.json`,
`network.har`, `page.html`, `screenshot.png`, and `trace.zip`.

## FAQ

### How is this different from Website Screenshot and Visual Recon?

That workflow enumerates a domain, probes live hosts, and screenshots a host
file with gowitness. This one opens a single URL in [playwright](/tools/playwright)
and can keep a HAR and a Playwright trace, or run a user script.

### What do screenshot, trace, and script keep?

Screenshot writes `screenshot.png`, `page.html`, and `meta.json`. Trace keeps
those plus `network.har`, `console.log`, and `trace.zip`. Script runs your JS
and still writes `meta.json`. The report node copies whatever landed and lists
the files.

### Does stealth get you past a bot wall?

No. Stealth patches `navigator.webdriver` and sets a common user agent. A real
challenge page, login wall, or block still wins, and the capture records that
page instead of inventing a bypass.

### Do you need an API key?

No. The run opens the URL you set. There is no third-party key on the graph.

### Will this fan out across a host list?

No. The seeded graph opens one URL. For a gallery across many hosts, use
[Website Screenshot and Visual Recon](/library/website-screenshot-and-visual-recon)
instead.

## Related workflows

- [Website Screenshot and Visual Recon](/library/website-screenshot-and-visual-recon).
  Reach for this instead when you have a domain and need a screenshot gallery
  across live hosts, not one URL with a HAR or a script.
- [Webpage Reading Queue Digest](/library/scrape-and-summarize-webpages).
  Reach for this instead when an HTTP fetch of the page text is enough and you
  do not need a browser render.
- [SPA Endpoint and Parameter Map](/library/spa-endpoint-and-parameter-map).
  Reach for this instead when you need routes and parameters from JavaScript
  bundles, with no browser and no auth.

---
_Markdown source of https://trickest.com/library/playwright-page-capture._
