ScreenshotNeo

BlogHow-to

How to Capture Screenshots of Websites in Different Time Zones

Override a browser’s time zone, capture a viewport or full page, and record the conditions so you can compare how a website renders.

By the ScreenshotNeo team4 October 20268 min read

To capture a website as it renders in another time zone, set the browser’s time-zone context before loading the page, wait for the relevant content to update, then capture the viewport or full page. For repeatable automation, Chrome DevTools Protocol (CDP) provides Emulation.setTimezoneOverride. A time-zone override does not change geographic location, IP address, or necessarily the time used by the website’s server.

Choose the right capture method

Method Time-zone control Capture scope Best for
Chrome DevTools The current manual UI path is not established here; browser controls can change between versions. Viewport or full-size page in device mode. Occasional manual captures at a chosen viewport.
Chrome DevTools Protocol Explicit Emulation.setTimezoneOverride method. Page screenshots, including a beyond-viewport option. Repeatable scripted comparisons.
Firefox DevTools The cited screenshot documentation does not establish a Firefox time-zone override workflow. Full page, selected element, or console helper. Captures where Firefox is the target browser.
shot-scraper The cited CLI documentation does not establish a built-in time-zone flag. Full page, selectors, waits, and dimensions. Automated captures when paired with a separately verified browser-level time-zone override.

For an occasional screenshot, use browser DevTools. For repeatable testing across zones, automate the browser and set the override before navigation or reload. The browser’s screenshot controls and the time-zone setting are separate steps. Chrome device mode documentation describes viewport and full-size captures; the CDP Emulation domain documents the protocol override.

Decide what you need to test

  • Visible viewport: use this to compare the content a user sees without scrolling.
  • Full page: use this when date-dependent content may appear lower down, or when you need a complete record. Lazy-loaded sections may need scrolling or an appropriate wait before capture.
  • One element: capture a specific clock, schedule, or banner when the rest of the page is irrelevant. Firefox’s screenshot helper documents selector capture; see Firefox’s screenshot documentation.

Also decide whether location, login state, viewport, or account preferences are part of the scenario. A time-zone override affects the browser’s time-zone context available to page scripts. It does not by itself emulate geographic coordinates. Chrome documents geolocation as a separate sensor control in its device sensor documentation.

Capture manually in Chrome

  1. Open the target page and Chrome DevTools device mode. Set the viewport that matches the condition you want to document.
  2. Apply the time-zone override using a browser control supported by your installed version, or use the CDP procedure below. The source material here verifies the protocol method, not the current manual Sensors menu path, so avoid relying on an unverified menu location.
  3. Reload if needed. Check the date, time, and offset shown by the page; a page may use client-side time, geolocation, account settings, or server-side settings.
  4. In device mode, select More options > Capture screenshot for the visible viewport or More options > Capture a full size screenshot for the full page, as documented by Chrome.
  5. Save separate files for separate zones and include the tested zone and other conditions in the filename or accompanying notes.

Automate time-zone screenshots with Chrome DevTools Protocol

CDP’s Emulation.setTimezoneOverride accepts a timezoneId string. An empty string disables the override and restores the host time zone. Use an IANA-style region identifier supported by the browser rather than assuming a fixed UTC offset represents a region year-round. The cited protocol page defines the parameter but does not provide a complete identifier list or guarantee date-specific daylight-saving outcomes; verify the browser’s behavior and the page’s displayed date and offset for your test.

The example below uses the CDP interface exposed by Playwright’s Chromium browser connection. Install Playwright and its Chromium browser first using the project’s documented setup. The script accepts the target URL and zone as arguments, sets the override before navigating, uses a fixed viewport, and saves a full-page PNG.

import { chromium } from 'playwright';

const [url, timezoneId] = process.argv.slice(2);
if (!url || !timezoneId) {
  throw new Error('Usage: node capture.mjs <url> <timezoneId>');
}

const browser = await chromium.launch({ headless: true });
try {
  const context = await browser.newContext({
    viewport: { width: 1440, height: 1000 },
  });
  const page = await context.newPage();
  const cdp = await context.newCDPSession(page);

  await cdp.send('Emulation.setTimezoneOverride', { timezoneId });
  await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 60000 });
  await page.waitForLoadState('networkidle', { timeout: 15000 }).catch(() => {});

  // Replace this with a selector for the time-dependent content when possible.
  await page.screenshot({ path: 'capture.png', fullPage: true });
  console.log(`Saved capture.png for ${timezoneId}`);
  await context.close();
} finally {
  await browser.close();
}

Run it with the URL and a browser-supported region identifier:

node capture.mjs https://example.com Europe/Paris

For a different zone, run a separate capture and change the second argument. For deterministic test suites, prefer waiting for a meaningful page condition, such as a clock selector or known text, over relying only on a fixed delay. CDP’s Page.captureScreenshot supports image formats and a captureBeyondViewport option; exact behavior can depend on the automation client and page. See the CDP Emulation documentation.

Capture a visible viewport instead

In the example, change the screenshot call to await page.screenshot({ path: 'capture.png' }) to capture the viewport. For a specific element, locate it and use the automation library’s element screenshot method. If the page’s relevant content appears after interaction, perform that interaction before capturing.

Capture in Firefox

Firefox DevTools documents full-page and node screenshots, plus the Web Console :screenshot helper. To enable the full-page toolbar control, open toolbox button settings and enable Take a screenshot of the entire page. The helper supports options including delay, device-pixel ratio, filename, full-page capture, and CSS selector capture. These instructions cover capture only: the cited Firefox source does not establish a Firefox-specific time-zone override workflow. See Taking screenshots in Firefox DevTools.

Keep time zone and location separate

A time zone tells page scripts which local time context to use. Geolocation supplies coordinates. A page may use either, both, or neither; it may also derive content from the server, an account preference, or a saved cookie. If location affects the result, configure geolocation independently and record it separately. Chrome’s sensor documentation describes choosing a preset city or custom longitude and latitude.

For each image, record the URL, time-zone identifier, capture date and time, viewport dimensions, browser and version, and whether geolocation or authentication was configured. This makes later comparisons interpretable and helps distinguish a rendering change from a changed test condition.

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server for developers. Its API captures a URL in one request; it does not claim to set the browser time zone, so use browser automation when the time-zone override is essential. For ordinary URL captures, its cookie and consent handling can remove banners, popups, and chat widgets before the shot.

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

Equivalent Python and Node.js requests:

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}`);
await import('node:fs/promises').then(({ writeFile }) => writeFile('shot.webp', Buffer.from(await res.arrayBuffer())));

See the ScreenshotNeo API documentation for request options. Cookie banners, popups, and chat widgets are removed 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. Sign up for 1,000 free screenshots a month, with no card.

Troubleshooting

Symptom Likely cause What to do
The displayed time did not change. The override was applied after navigation, the page did not update, or its time comes from server/account state. Set the override before navigation, reload, and inspect the page’s date and offset. Check whether the site uses a server response or saved preference.
The zone identifier is rejected. The browser does not accept that identifier. Use a supported IANA-style region identifier and verify it with the browser version used for the run.
Content reflects the wrong city or country. Time zone and geolocation are separate; the page may use IP-based or account-based location. Configure and record geolocation separately when relevant. Do not infer location from the time-zone override.
The screenshot is blank or incomplete. The page may still be loading, need authentication, or render content after an interaction. Wait for a meaningful selector or page condition, confirm the page state, then capture. Check whether authentication and required actions were configured.
Full-page capture omits lower content. Some sections may load only after scrolling, or the capture method may have page-specific limits. Scroll through the page to trigger lazy content, wait for it to settle, then capture. Compare with a viewport capture if diagnosing layout.
Two captures differ unexpectedly. Viewport, browser version, geolocation, authentication, capture time, or page data may differ. Keep these conditions consistent and record them with each file. Recheck the date and offset shown by the page.
CDP reports a protocol error. The target may not be a compatible Chromium page session, or the command may have been sent to the wrong session. Create a CDP session for the page target and apply the Emulation command before navigating. Check the protocol documentation for the browser in use.

Performance, reliability, and cost

  • Performance: each zone generally requires its own page state and capture. Reuse a browser process where appropriate, but apply the override before each navigation and avoid sharing mutable contexts between simultaneous zone runs.
  • Waits: network-idle waits can time out on pages with persistent connections. Use a relevant selector or known content condition when available, and set an explicit timeout so a capture cannot hang indefinitely.
  • Repeatability: preserve the same URL, viewport, browser version, authentication state, and geolocation across comparisons. Dynamic page data can change independently of the time zone.
  • Reliability: save the zone and capture metadata with the image; verify the page’s displayed date and offset instead of assuming the override took effect. Retry transient navigation failures only after identifying whether the page state changed.
  • Cost: local browser automation has no per-screenshot API charge, but uses compute and requires browser setup and maintenance. For ordinary screenshots through ScreenshotNeo, only clean shots are billed; bot checks/CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers identify the page verdict and billing status. The free plan is 1,000 shots per month; paid plans start at $5 for 3,000.

Frequently asked questions

Does changing the browser time zone change the website’s location?

No. Time-zone emulation and geolocation are separate controls. IP-based location and account preferences can also affect what a site shows.

Should I use a UTC offset or a region name?

Use a browser-supported region identifier for regional tests. A fixed offset does not represent a region’s changing seasonal rules. Verify the rendered date and offset for the date under test.

Can I use ScreenshotNeo to force a time zone?

The ScreenshotNeo facts provided for this article do not include a time-zone override option. Use browser automation with CDP when controlling the page’s time-zone context is required.

Can a full-page screenshot include content that loads on scroll?

Not necessarily. Trigger lazy-loaded content and wait for it to appear before capturing, then check the resulting image.

Sources