Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteUse chrome.tabs.captureVisibleTab() to obtain an image of the active tab’s currently visible area, then pass that image URL to chrome.downloads.download() to save a file. The two APIs are separate: capture creates the image representation, while Downloads writes a URL to disk. This workflow needs activeTab (or <all_urls>) for capture and the downloads permission for saving. It is not a full-page screenshot API, and Chrome documents a maximum of two capture calls per second.
What the capture-and-download workflow actually does
chrome.tabs.captureVisibleTab(windowId?, options?) returns a Promise that resolves to a string representing an image. If you omit windowId, Chrome uses the current window. The captured pixels are the visible page area in that tab at that moment; the method does not automatically scroll through the document or stitch a full-page image.
A download is a second operation: chrome.downloads.download(options) receives a URL, optionally a relative filename, and an optional saveAs flag. On success it returns the new download ID. Treat the connection between the capture result and the download URL as an implementation detail to verify in the Chrome version and extension context you support. The API references document each method independently; they do not guarantee that every data-URL or object-URL conversion behaves identically in every context.
Permissions and access scope
Capture permission
activeTabgrants temporary access to the tab after a user invocation, such as clicking the extension action. It is usually the narrowest choice for an action-triggered screenshot.<all_urls>is the broader alternative when the extension must capture pages without relying on a user invocation. Request it only when the product really needs capture access across sites.- For
file://pages, the user must also enable the extension’s file access in Chrome’s extension-management UI.
Download permission
Add downloads before calling chrome.downloads.download. The permission controls the save operation; it does not replace the host access needed for capture.
#1 Best Overall
- KEYBOARD: The keyboard works for Windows with hot keys that enable easy access to Media, My Computer, Mute, Volume up/down, and Calculator
- EASY SETUP: Experience simple installation with the USB wired connection
- VERSATILE COMPATIBILITY: This keyboard is designed to work with multiple Windows versions, including Vista, 7, 8, 10 offering broad compatibility across devices.
- SLEEK DESIGN: The elegant black color of the wired keyboard complements your tech and decor, adding a stylish and cohesive look to any setup without sacrificing function.
- FULL-SIZED CONVENIENCE: The standard QWERTY layout of this keyboard set offers a familiar typing experience, ideal for both professional tasks and personal use.
Minimal Manifest V3 extension
The following files implement a user-invoked capture. Clicking the toolbar action grants activeTab, captures the visible area, and asks Chrome to save the returned URL. Test the URL hand-off on the exact Chrome release and context you target before shipping.
manifest.json
{
"manifest_version": 3,
"name": "Visible Tab Saver",
"version": "1.0.0",
"description": "Capture and download the visible area of the active tab.",
"permissions": ["activeTab", "downloads"],
"background": { "service_worker": "service-worker.js" },
"action": { "default_title": "Save visible screenshot" }
}
service-worker.js
chrome.action.onClicked.addListener(async (tab) => {
if (!tab.windowId) {
console.error('The clicked tab has no usable window ID.');
return;
}
try {
const imageUrl = await chrome.tabs.captureVisibleTab(
tab.windowId,
{ format: 'png' }
);
// Verify that your target Chrome version accepts this returned URL
// directly in chrome.downloads.download in your extension context.
const downloadId = await chrome.downloads.download({
url: imageUrl,
filename: 'screenshots/visible-' + Date.now() + '.png',
saveAs: false
});
console.log('Started download', downloadId);
} catch (error) {
console.error('Capture or download failed', error);
}
});
Load the directory from chrome://extensions with Developer mode enabled, click “Load unpacked,” then click the extension action while the page you want is active. The filename is relative to Chrome’s Downloads directory, so Chrome creates or uses the screenshots subdirectory according to its normal download rules.
Choosing image options and filenames
PNG versus JPEG
Pass an options object to request the format supported by your target Chrome version, for example {format: 'png'} or {format: 'jpeg', quality: 85}. PNG preserves sharp text and transparency-like edges; JPEG generally produces smaller files but introduces lossy compression. Confirm the resulting extension and MIME handling in your own tests rather than assuming a filename alone changes the encoded bytes.
Save immediately or ask the user
Set saveAs: true to request a Save As dialog. If you also provide filename, Chrome documents that the dialog is pre-populated with that suggested path. With saveAs: false (or when omitted), Chrome starts the download using the configured download behavior.
Rank #2
- Reliable Plug and Play: The USB receiver provides a reliable wireless connection up to 33 ft (1), so you can forget about drop-outs and delays and you can take it wherever you use your computer
- Type in Comfort: The design of this keyboard creates a comfortable typing experience thanks to the low-profile, quiet keys and standard layout with full-size F-keys, number pad, and arrow keys
- Durable and Resilient: This full-size wireless keyboard features a spill-resistant design (2), durable keys and sturdy tilt legs with adjustable height
- Long Battery Life: MK270 combo features a 36-month keyboard and 12-month mouse battery life (3), along with on/off switches allowing you to go months without the hassle of changing batteries
- Easy to Use: This wireless keyboard and mouse combo features 8 multimedia hotkeys for instant access to the Internet, email, play/pause, and volume so you can easily check out your favorite sites
Use deterministic names
Include a timestamp, tab title after sanitizing it, or a sequence number to avoid collisions. Keep the path relative and avoid characters that are illegal on the user’s operating system. The API returns a download ID, which you can log for diagnostics.
Making capture automatic without exceeding Chrome’s limit
Chrome documents MAX_CAPTURE_VISIBLE_TAB_CALLS_PER_SECOND as two calls per second and describes capture as expensive. Do not run an unrestricted setInterval loop. A safer design is a single-flight queue that records the last capture time and refuses or delays work until at least 500 milliseconds have elapsed.
let lastCaptureAt = 0;
let captureInProgress = false;
async function captureAndDownload(windowId) {
const now = Date.now();
if (captureInProgress || now - lastCaptureAt < 500) {
return { skipped: true, reason: 'rate-limit' };
}
captureInProgress = true;
lastCaptureAt = now;
try {
const imageUrl = await chrome.tabs.captureVisibleTab(windowId, {
format: 'jpeg',
quality: 85
});
const id = await chrome.downloads.download({
url: imageUrl,
filename: 'screenshots/auto-' + Date.now() + '.jpg',
saveAs: false
});
return { skipped: false, id };
} finally {
captureInProgress = false;
}
}
Call this function from a scheduler that matches your product’s needs, and decide what should happen when a capture is skipped. For long-running automation, account for extension service-worker suspension and page navigation; persist scheduling state or use the scheduling mechanism appropriate for your manifest and Chrome versions. Never assume that a background loop will remain alive indefinitely.
Visible area, active tab, and timing edge cases
- Viewport only: browser chrome, other tabs, and content below the viewport are not part of the page image. A full-page result requires a different technique, such as page-side scrolling and stitching, and is outside
captureVisibleTabitself. - Active-window changes: capture the intended window ID and check that the tab is still the one your workflow selected. A user switching windows between scheduling and capture can otherwise produce an unexpected image.
- Navigation races: a navigation, closed tab, or page transition can make a pending capture fail. Catch the Promise rejection and retry only after applying your rate policy.
- Restricted pages: pages that Chrome does not expose to extensions, or file URLs without the user’s file-access approval, can fail even when your JavaScript is correct.
- Dynamic rendering: wait for the state you want before invoking capture. The API takes a snapshot of the current pixels; it does not wait for a framework, animation, or lazy image to settle.
Troubleshooting common failures
“The method is not available” or a permission error
Check that the code runs in an extension context with the required manifest permission and that you are calling the Tabs API from a supported extension page or service worker. For a click-driven flow, confirm the action click happened before relying on activeTab.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Rank #3
- All-day Comfort: The design of this standard keyboard creates a comfortable typing experience thanks to the deep-profile keys and full-size standard layout with F-keys and number pad
- Easy to Set-up and Use: Set-up couldn't be easier, you simply plug in this corded keyboard via USB on your desktop or laptop and start using right away without any software installation
- Compatibility: This full-size keyboard is compatible with Windows 7, 8, 10 or later, plus it's a reliable and durable partner for your desk at home, or at work
- Spill-proof: This durable keyboard features a spill-resistant design (1), anti-fade keys and sturdy tilt legs with adjustable height, meaning this keyboard is built to last
- Plastic parts in K120 include 51% certified post-consumer recycled plastic*
Capture works on websites but not on a local file
Open the extension’s details in chrome://extensions and enable “Allow access to file URLs.” Chrome requires this additional user grant for file pages.
Capture succeeds but saving fails
Verify that downloads is declared, inspect the rejected error in the service-worker console, and test the exact returned string as the download URL in your target Chrome version. The official references define the capture return as a string and the download input as a URL, but do not promise one universal conversion path for every context.
Only some scheduled shots appear
Measure the interval between calls, enforce the two-per-second ceiling, and prevent overlapping captures. Also check whether the service worker was suspended, the tab navigated, or the page became unavailable. Log the returned download ID and each caught exception so skipped work is distinguishable from failed work.
The screenshot is blank or shows an intermediate state
Capture after the page reaches the visual state you need. For applications with transitions, wait for a selector or an application signal in your extension’s own logic; do not solve the problem by firing calls faster.
Free tools Windows power users keep installed
One-click scans. No signup required.
Rank #4
- 【Dreamy Rainbow Gaming Keyboard】K521 Gaming Keyboard Adopts a Different LED Backlight Design, Upgraded on the Traditional LED Backlight Effect, Making the Light More Penetrating, Giving You a More Dazzling Visual Effect, Making Your Gaming Process More Enjoyable
- 【One Touch Opens & Visual Feast】The K521 Red Dragon Keyboard has a One-Touch on/off Lighting Button for Added Convenience. It also has a Three-Position Adjustable Breathing Mode and a Four-Position Adjustable Brightness Lighting Mode
- 【Mechanical Feeling & Fast Tapping】The PC Keyboard Keys are Designed for Mechanical Feeling, Giving You a Better Feel During Use and the Ability to Trigger Keys Quickly, Allowing You to Win All Your Games
- 【19 Keys Anti-Ghosting Keyboard】Anti-Ghosting Ensures Every Button Can Be Triggered. This Allows You to Trigger Key Combinations In The Game Accurately, And Each Skill Can Be Accurately Released to Increase Your Winning Rate. Redragon K521 Will Be Your Perfect Partner
- 【12 Multimedia Combination Keys】The K521 Wired Gaming Keyboard is Equipped with 12 Multimedia Keys That Can Greatly Enhance Your Gaming/Office Efficiency and Make It More Convenient to Use
Or skip the browser setup
ScreenshotNeo provides a website screenshot API and MCP server for developers. One GET request returns a PNG, JPEG, WebP, or PDF, so you do not need to maintain a Chrome extension just to capture a URL. See the ScreenshotNeo documentation for the complete parameter reference.
cURL
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Python
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
Node.js
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
Before capture, ScreenshotNeo accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers report the page verdict and billing status through X-Page-Verdict and X-Billed. Its MCP server exposes take_screenshot, get_page_info, and capture_pdf to Claude, Cursor, and other MCP clients.
Other controls include full-page capture with lazy images loaded, CSS-selector element capture, dark mode, 12 device presets or custom viewports, retina scale, PDF paper and page-range settings, HTML/CSS rendering, custom JavaScript and CSS, click-before-capture, hidden selectors, selector/delay/network-idle waits, ad and tracker blocking, custom headers/cookies/user agents/Authorization, timezone and geolocation, transparent backgrounds, resizing, selectable cache TTLs, signed image links, asynchronous jobs with signed webhooks, bulk capture for up to 100 URLs per call, usage reporting, an OpenAPI specification, and compatibility with parameter names used by other screenshot APIs.
| Plan | Included screenshots | Price |
|---|---|---|
| Free | 1,000 per month | $0; no card |
| Starter | 3,000 | $5 |
| Growth | 15,000 | $15 |
| Pro | 60,000 | $39 |
| Scale | 250,000 | $99 |
| Business | 1,000,000 | $249 |
Every feature is available on every plan, and yearly billing provides two months free. Create a free ScreenshotNeo account to get 1,000 screenshots each month with no card required; paid plans start at $5 for 3,000 screenshots.
Recommended Free Tools
When to use each approach
Choose captureVisibleTab when the screenshot must reflect an interactive Chrome session, the user’s current viewport, or extension-controlled state. Choose a server-side API when you need repeatable URL capture, PDF output, bulk jobs, cleanup of consent UI, or an AI-agent workflow without browser-permission and service-worker concerns. In either case, design around timing, failures, and the distinction between a viewport image and a full-page document.
Best Value
- All-day Comfort: This USB keyboard creates a comfortable and familiar typing experience thanks to the deep-profile keys and standard full-size layout with all F-keys, number pad and arrow keys
- Built to Last: The spill-proof (2) design and durable print characters keep you on track for years to come despite any on-the-job mishaps; it’s a reliable partner for your desk at home, or at work
- Long-lasting Battery Life: A 24-month battery life (4) means you can go for 2 years without the hassle of changing batteries of your wireless full-size keyboard
- Simply plug the USB receiver into a USB port on your desktop, laptop or netbook computer and start using the keyboard right away without any software installation
- Simply Wireless: Forget about drop-outs and delays thanks to a strong, reliable wireless connection with up to 33 ft range (5); K270 is compatible with Windows 7, 8, 10 or later
Frequently Asked Questions
Can I capture a page that is not currently visible?
No. The method captures the visible area of a tab in a window at capture time; an off-screen or full-document result requires a different workflow.
What does the download promise return?
On success, chrome.downloads.download() resolves to the new download ID, which you can record for diagnostics or later download-state handling.
Is two calls per second a recommendation or a documented limit?
Chrome documents two captureVisibleTab calls per second as the maximum and describes the operation as expensive, so treat it as a hard design boundary rather than a target rate.
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.

