ScreenshotNeo

BlogHow-to

How to Capture a Web Page Screenshot for a Client Proposal Without Logging In

Capture a public web page without signing in using Firefox or Playwright. Choose viewport or full-page output, inspect it, and share it with your proposal.

By the ScreenshotNeo team4 October 20267 min read

You can capture a public web page for a client proposal without signing in. For a one-off image, use Firefox’s screenshot control and choose a full-page capture if you need content below the fold. For repeatable captures, use Playwright in a fresh browser context and save the screenshot to a file. Before sharing, inspect the image and confirm that you have permission to reproduce the page in your proposal; being able to view a public page does not itself establish that permission.

1. Choose the capture that fits the proposal

Decide whether the client needs to see the page as it appears in a normal screen-sized browser window, or needs the whole scrollable page in one image.

Capture Use it when Trade-off
Viewport You want to show the first impression at a particular screen size. Content below the visible area is omitted.
Full page Below-the-fold sections are relevant to the proposal. The image can be very tall and small text may be difficult to read at presentation size.
Element or clip You need to focus on a specific component or region. Surrounding page context is omitted.

Playwright describes a full-page screenshot as capturing the full scrollable page as though it fit on a very tall screen. Its screenshot API also supports format, clip area, quality, and element capture. See the Playwright screenshots guide and Page API.

2. One-off capture in Firefox

  1. Open the public page in Firefox without entering account credentials.
  2. Open Firefox’s screenshot control and choose the full-page option, or capture the visible area if the proposal is about the initial screen.
  3. Save the screenshot. Mozilla documents that the captured image is saved to the browser’s Downloads directory.
  4. Open the saved image and review it before placing it in the proposal.

See Mozilla’s Firefox screenshot documentation for the browser workflow. If the page requires an account to view its content, do not try to bypass its access controls; this workflow is for pages available to a visitor without signing in.

3. Repeatable capture with Playwright

Playwright is useful when you need a consistent viewport, a chosen output path, or repeated captures. These examples use a new browser context without stored account state. Install Playwright and its browser binaries using the official installation guide, then run the example from a project where the package is installed.

JavaScript: save a full-page PNG

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  try {
    const context = await browser.newContext({
      viewport: { width: 1440, height: 1000 }
    });
    const page = await context.newPage();
    await page.goto('https://example.com', { waitUntil: 'networkidle', timeout: 60000 });
    await page.screenshot({ path: 'proposal-page.png', fullPage: true });
    await context.close();
  } finally {
    await browser.close();
  }
})();

Save this as capture.js and run node capture.js. The browser is closed even if navigation or capture fails. If a site continuously polls or otherwise never becomes network-idle, use waitUntil: 'load' or domcontentloaded, then wait for a page-specific selector before taking the screenshot.

Python: save a full-page PNG

import asyncio
from pathlib import Path
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        try:
            context = await browser.new_context(viewport={"width": 1440, "height": 1000})
            page = await context.new_page()
            await page.goto("https://example.com", wait_until="networkidle", timeout=60_000)
            await page.screenshot(path="proposal-page.png", full_page=True)
            await context.close()
        finally:
            await browser.close()

asyncio.run(main())

Install the Python package and browser binaries as described in the Playwright Python guide. The official API examples show browser launch, navigation, and writing a screenshot to a selected path; full_page=True includes the scrollable page.

4. Select format, viewport, or a specific region

PNG is a straightforward default for proposal screenshots. Playwright also supports JPEG and WebP; JPEG and WebP can use a quality setting where supported. Pick a format your proposal workflow accepts and inspect the result after export.

// Viewport screenshot (default scope)
await page.screenshot({ path: 'first-screen.png', type: 'png' });

// Full page as JPEG, with quality from 0 to 100
await page.screenshot({ path: 'whole-page.jpg', type: 'jpeg', quality: 85, fullPage: true });

// Clip a page region in CSS pixels
await page.screenshot({
  path: 'hero-region.png',
  clip: { x: 0, y: 0, width: 1200, height: 700 }
});

// Capture one matched element
await page.locator('main').screenshot({ path: 'main-content.png' });

To control the viewport, set it when creating the context, as in the runnable examples. A clip is positioned in page coordinates and has explicit dimensions; ensure it falls within the rendered page area. Element capture is useful for a focused component, while full-page capture preserves the page’s overall sequence.

5. Make the image useful in a client proposal

  • Confirm the address and page state are the intended ones, including any consent dialog or other overlay that is legitimately shown to visitors.
  • Inspect the complete image for missing sections, loading placeholders, broken images, or unwanted browser content.
  • Check legibility at the size the client will see. A very tall full-page image may be better split into sections or accompanied by a viewport capture.
  • Remove unrelated personal information or account details before sharing. A fresh browser context helps avoid carrying over an authenticated session, but inspect the image yourself.
  • When context could be unclear, label the source page and capture date in the proposal.
  • Check the page owner’s terms or obtain permission when needed. The fact that a page is publicly viewable does not settle reuse rights.

6. Troubleshooting

Symptom Likely cause Fix
Navigation times out The site is slow, blocked, or keeps background network requests open. Increase the timeout if the page is merely slow. If network idle never occurs, switch to load or domcontentloaded and wait for a specific content selector.
Image has blank or unfinished sections Content or images load after the chosen navigation event. Wait for a visible page-specific selector or a short, justified delay before capture, then inspect the output.
Capture contains a login screen The page is not available to an unauthenticated visitor, or access depends on a session. Use a page that is publicly available without signing in, or request authorized access. Do not treat a screenshot as a way to bypass access restrictions.
Full-page image is too tall to read The page has extensive scrollable content. Use a viewport image for the key first impression, capture relevant elements or clips, or divide the page into proposal sections.
Clip is empty or wrong The clip coordinates or dimensions do not match the rendered page. Check the page dimensions and coordinate values; use an element screenshot when the target is a known component.
Browser executable is missing The Playwright package is installed but its browser binaries are not. Install the browser binaries for the installed Playwright version using its official setup instructions.
Saved file is missing The script failed before screenshot or wrote relative to a different working directory. Check the command’s working directory and error output; use an absolute path if necessary.

7. Performance, reliability, and cost

A manual Firefox capture has little setup for a one-off page. Playwright adds installation and browser startup, but makes viewport, output path, and repeated capture steps explicit. Full-page captures may take longer and produce large, tall files, especially on long pages. Use a viewport or a focused element when that better fits the proposal.

For reliable results, use a fresh context, choose a navigation condition that fits the target site, wait for the content that matters, and review each output. A successful screenshot call only means an image was saved; it does not guarantee that every image, font, or dynamic section rendered as intended. Firefox and Playwright can be used locally without a screenshot API charge; account for your own machine or CI runtime and storage.

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server. One GET request returns an image or PDF; its documentation describes the available options.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://example.com"},
    timeout=90,
)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
const fs = require('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));

Replace YOUR_API_KEY with your API key. ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before the shot. Bot checks, blank pages, and failed loads are never billed. Its MCP server lets AI agents take screenshots. The Free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 screenshots.

Sign up for 1,000 free screenshots a month, with no card required.

FAQ

Can I capture a page without signing into a screenshot service?

Yes. Firefox can save a screenshot locally, and Playwright can automate a local browser capture. You do not need a screenshot-service account for either method.

Does a public page automatically allow reuse in a proposal?

No such conclusion follows from public visibility alone. Check the site owner’s terms or obtain permission if needed.

Should I use a full-page screenshot for every proposal?

No. Use it when below-the-fold content matters. A viewport capture can communicate the screen-sized first impression more clearly.

Can Playwright capture just one component?

Yes. The locator screenshot method captures a matched element; use it when the proposal needs a focused component rather than the whole page.