Recommended Free Tools
A rendered HTML API returns the page’s current DOM after a browser has parsed the response and run JavaScript. That is different from downloading the original HTTP response, which may contain only an application shell. You can obtain this post-render markup through a managed browser API or by driving Chromium with Playwright or Puppeteer and calling page.content().
This guide explains the distinction, shows working browser-automation code, covers interaction and edge cases, and helps you choose between rendered HTML and structured extraction.
What “rendered HTML” contains
Rendered HTML is the serialized representation of the browser’s Document Object Model (DOM) at the moment you capture it. The browser starts with the server response, executes scripts, applies client-side routing, inserts components, and updates text or attributes. page.content() then serializes that current DOM.
For example, an initial response might contain only <div id="app"></div>. A JavaScript application can later insert a product list, prices, and navigation into that element. An ordinary HTTP client sees the empty container; a rendered HTML request sees the populated DOM.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Rendered markup is not the original source
- Original HTML: bytes returned by the first HTTP request.
- Rendered HTML: the DOM after browser parsing and script execution.
- Screenshot: pixels produced by painting the rendered page; it is not an HTML representation.
- Structured extraction: selected fields returned as JSON rather than the complete markup.
Browserless documents separate a /content endpoint for fully rendered HTML from a /scrape endpoint for selector-based JSON. Choose the output that matches what your downstream code actually needs.
Choose a retrieval method
| Method | Best for | Trade-off |
|---|---|---|
| Managed browser HTTP API | One request/response integration without operating Chromium | Provider-specific limits, request semantics, and pricing |
| Playwright or Puppeteer | Custom waits, branching workflows, browser state, and detailed control | You install, run, and scale browsers (unless connecting to a hosted browser) |
| Structured extraction endpoint | A small set of fields selected with CSS selectors | Not a complete DOM document |
A hosted service is usually the shortest path for a one-shot fetch. Direct automation is preferable when you must click, type, scroll, reuse a session, inspect failures, or decide the next action from page state. Zyte also supports connecting Playwright or Puppeteer to a managed browser through CDP, retaining the library’s control surface while outsourcing browser infrastructure.
Get rendered HTML with Playwright (Node.js)
Install Playwright and its browser binaries:
npm install playwright
npx playwright install chromium
Save this as rendered-html.mjs:
import { chromium } from 'playwright';
import { writeFile } from 'node:fs/promises';
const target = process.argv[2] ?? 'https://example.com';
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({
viewport: { width: 1440, height: 900 },
deviceScaleFactor: 1
});
try {
await page.goto(target, { waitUntil: 'domcontentloaded', timeout: 60000 });
await page.waitForLoadState('networkidle', { timeout: 30000 }).catch(() => {});
const html = await page.content();
await writeFile('rendered.html', html, 'utf8');
console.log(`Saved ${html.length} characters to rendered.html`);
} finally {
await browser.close();
}
Run it with node rendered-html.mjs https://your-site.example. The network-idle wait is deliberately non-fatal: analytics, sockets, or advertisements can keep a page busy forever. For an application with a known completion point, wait for that selector instead.
Wait for the state you need
await page.waitForSelector('[data-testid="product-grid"]', {
state: 'visible',
timeout: 30000
});
const html = await page.content();
Use a short explicit delay only for a known animation or debounce that cannot be observed another way. A selector or application-specific readiness signal is more reliable than an arbitrary sleep.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Interact before serialization
await page.getByRole('button', { name: 'Load more' }).click();
await page.locator('#search').fill('laptop');
await page.keyboard.press('Enter');
await page.waitForSelector('.results article');
const html = await page.content();
Scrolling can trigger lazy loading:
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
await page.waitForTimeout(1000);
const html = await page.content();
Prefer an element wait after scrolling when possible, because a fixed delay does not prove that images or data have arrived.
Get rendered HTML with Puppeteer
Puppeteer exposes the same essential sequence: navigate, wait for the rendered state, call page.content(), then close the browser.
npm install puppeteer
import puppeteer from 'puppeteer';
import { writeFile } from 'node:fs/promises';
const url = process.argv[2] ?? 'https://example.com';
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
try {
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 60000 });
await page.waitForSelector('body', { timeout: 30000 });
const html = await page.content();
await writeFile('rendered.html', html, 'utf8');
} finally {
await browser.close();
}
Use a managed browser API
Managed APIs accept a URL, render it in an instrumented browser, and return a browser-HTML string. Zyte’s documented flow enables its browserHtml output and reads the returned string. Browserless offers REST access to rendered content through /content, so a Puppeteer or Playwright client library is not required.
Read each provider’s request documentation before integrating. Zyte documents restrictions on browser requests, including no arbitrary initial method, body, or initial-request header other than Referer; subsequent browser activity can make additional requests. Its browser action execution has a documented 60-second limit. These constraints can affect login flows, POST-only pages, and long interactions.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Hosted versus self-managed operations
- Hosted: no browser image maintenance, sandbox configuration, or concurrency scheduler in your application; you pay the provider and follow its quotas.
- Self-managed: full control over executable version, networking, cookies, and resource policy; you must handle crashes, cold starts, parallelism, and security.
- Hybrid: drive a provider-hosted browser over CDP when you need Playwright/Puppeteer logic without running Chromium yourself.
Frames, shadow DOM, and what the HTML string may omit
An HTML string is not a universal dump of every visual node. Zyte documents that iframes are empty by default in browser HTML. Content inside a frame belongs to a separate document; capture it by targeting the frame and serializing that frame’s document, subject to cross-origin rules.
Shadow DOM also requires care. A component’s shadow tree may not appear in ordinary outer HTML. If you need shadow content, use browser actions or selectors supported by your automation tool and extract the relevant nodes explicitly. Closed shadow roots cannot be inspected with normal page JavaScript.
Rendered HTML versus structured extraction
Return the complete DOM when you need links, embedded metadata, component markup, or a later parser that you control. Use structured extraction when your application needs stable fields such as title, price, or author and does not need the surrounding document. A selector-based JSON response is smaller and easier to validate, but it is not a substitute for the full rendered page when you later discover another field is required.
Reliability and performance checklist
- Set a navigation timeout and an overall job deadline.
- Wait for a meaningful selector or application signal, not network idle alone.
- Record the final URL, HTTP status, and captured HTML length for diagnostics.
- Reuse a browser process for batches, but create isolated contexts for separate cookies and identities.
- Limit concurrency to what CPU, memory, and the target site can sustain.
- Block unnecessary images, fonts, ads, or trackers only when they cannot affect the DOM you need.
- Store the exact browser and library versions used to generate reproducible captures.
- Respect authentication, robots policies, terms of service, and rate limits.
Troubleshooting rendered captures
The HTML still contains an empty app shell
The page was serialized too early, JavaScript failed, or the application requires an interaction. Check console and page errors, wait for a stable selector, and reproduce the click, scroll, or form submission that reveals the content.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsRank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Network-idle never occurs
Persistent analytics, WebSockets, or polling can prevent quiescence. Replace the network-idle wait with a selector, response wait, or bounded delay, and keep the overall timeout.
Content differs from a normal browser
Check viewport, locale, timezone, cookies, authentication, user agent, and geolocation. Some pages also vary by consent state or bot detection. Capture diagnostic screenshots and logs when permitted.
Frames are blank
Wait for the frame to load and serialize its own document. Cross-origin restrictions may prevent reading it; in that case use an extraction capability that supports the frame or capture the content through an authorized endpoint.
The browser crashes or runs out of memory
Reduce parallel pages, close contexts promptly, cap page size, and avoid retaining every HTML string in memory. Recycle long-lived browser processes and monitor per-job memory.
Free tools Windows power users keep installed
One-click scans. No signup required.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Cost and limits
Managed-browser pricing is service-specific and changes. Zyte’s pricing page checked on September 29, 2026 listed browser-rendered pay-as-you-go ranges of $1.01–$16.08 per 1,000 requests across complexity tiers; commitments of $100, $200, and $500 per month listed ranges of $0.75–$12.00, $0.60–$9.60, and $0.48–$7.68 respectively. These are live commercial prices, not benchmarks, and the page requires a target URL for site-specific pricing. Verify current pricing and execution limits before budgeting.
Or skip the browser setup
If you need a visual capture rather than an HTML string, ScreenshotNeo provides a single-call website screenshot API and MCP server. It removes cookie banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, with the result identified by response headers. AI agents can use its MCP tools take_screenshot, get_page_info, and capture_pdf.
It does not replace a rendered-HTML endpoint: it returns PNG, JPEG, WebP, or PDF. It is useful when the deliverable is a faithful visual artifact.
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 all options. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Create a free ScreenshotNeo account.
Frequently Asked Questions
Does rendered HTML include JavaScript source code?
It includes the DOM produced by scripts, not a guarantee that every original script file or runtime state is preserved as source.
Can I use rendered HTML for pages behind a login?
Yes, when your automation supplies an authorized session, cookies, or credentials and the provider permits that workflow. Keep credentials out of saved HTML and logs.
Is a screenshot API the same as a rendered HTML API?
No. A rendered HTML API returns markup; a screenshot API returns pixels or a PDF. Choose based on the artifact your application consumes.
Quick Recap
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.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →

