If a Microlink screenshot shows a spinner, empty shell, or placeholder, the browser may have captured the page before its JavaScript finished rendering the content you need. Set a page-specific readiness condition—usually waitForSelector—and, when needed, trigger the tab or scroll action that reveals the content before capture.
Choose a readiness signal that proves your content is there
A navigation event tells you about the browser’s progress loading a document; it does not prove that a client-rendered app has hydrated, received its data, or drawn a chart. Identify a stable element that appears only when the particular content you want is ready, then wait for that element.
As an Amazon Associate I earn from qualifying purchases.
- Best fit:
waitForSelectorfor a page-specific element such as a chart’s SVG or the contents of a report panel. - Fallback:
waitForTimeoutwhen there is no reliable DOM condition to observe. A timer may be too short on a slow response and unnecessarily long on a fast one. - Use with care: network-idle waiting may not finish on pages that keep long-lived requests open.
Choose a selector that represents the result you need, not merely a generic app container that appears while the page is still loading. If the selector never appears, the wait can run until the request times out.
Wait for a rendered chart with the JavaScript SDK
Microlink’s documented SDK example sets waitUntil to domcontentloaded and waits for .chart svg:
#1 Best Overall
import createClient from 'microlink.io'
const microlink = createClient({
apiKey: process.env.MICROLINK_API_KEY
})
const { url } = await microlink.screenshot('https://app.example.com/report', {
waitUntil: 'domcontentloaded',
waitForSelector: '.chart svg'
})
Replace the illustrative URL and selector with the page and element you actually need. The example shows the documented invocation; it does not establish that a particular third-party page has been tested.
waitUntil selects the navigation lifecycle event. Here, domcontentloaded lets the request move past document parsing without relying on a later navigation event as proof that the app is ready. waitForSelector then supplies that content-specific condition.
Rank #2
- Intuitive interface of a conventional FTP client
- Easy and Reliable FTP Site Maintenance.
- FTP Automation and Synchronization
Use the REST API when you do not need the SDK
Microlink’s URL-request example uses screenshot=true, meta=false, waitUntil=domcontentloaded, and waitForSelector=.chart svg. Encode query parameters correctly when constructing a request, especially if a URL or selector contains reserved characters. Confirm the current endpoint and authentication requirements in Microlink’s documentation before deploying an integration; they are not specified here.
Pick a selector from the rendered page’s actual DOM. For example, a chart library may render an SVG, canvas, or another element, so do not assume .chart svg will match your application.
Rank #3
Prepare tabs, expandable panels, and lazy-loaded sections
Capture content behind a tab
Use click to activate the tab, then wait for an element inside the resulting panel. Microlink’s guide illustrates clicking #tab-revenue and waiting for #panel-revenue canvas. The important pairing is the user action and a selector that confirms the requested panel’s content has appeared.
Capture content loaded on scroll
For a section that loads only when it enters the viewport, use scroll to bring the section into view, wait for an element inside it, and request fullPage if the output should include the entire document. Scrolling prepares the page; the selector confirms the content is ready. A full-page setting controls capture geometry, not application readiness.
Rank #4
Capture one element
Microlink’s guide says an element screenshot waits for its own target to become visible. If you are capturing that element, a separate waitForSelector is only needed when you need to wait for a different content condition. A viewport or full-page screenshot may need its own readiness selector because its capture target is not necessarily the app content you are waiting for.
Set capture geometry and avoid unnecessary script work
Choose viewport capture when the desired result is what fits in a specific browser view; choose full-page capture when the output must include the whole document. Microlink’s screenshot materials also describe choosing image type and viewport dimensions. Browser automation documentation describes device presets and pre-capture page actions. Select the geometry based on what the recipient needs to see, rather than treating a larger capture as a readiness fix.
Best Value
If the page is already complete in its initial HTML and does not need scripts, Microlink’s guide recommends javascript: false. Leave JavaScript enabled for client-rendered apps, charts, and other content that depends on it; disabling it would prevent that rendering work.
Keep waits within the request timeout
Microlink’s dynamic-content guide states request timeouts of 30 seconds for the free endpoint and 60 seconds for Pro. These are vendor-published operational limits in that guide, accessed October 3, 2026—not independent performance measurements. Recheck the current plan limits before implementation, and ensure any combination of navigation and readiness waiting can finish within the applicable request timeout.
Troubleshoot blank, stale, or incomplete captures
- The screenshot shows an app shell or spinner: The navigation event likely completed before the app’s data or client rendering. Wait for an element tied to the desired result instead of relying on the navigation event alone.
- The selector wait times out: Verify that the selector exists on the requested page and that it appears in the state you are capturing. If the content is behind a tab, click the tab first; if it is lazy-loaded, scroll it into view first.
- The capture is slow or times out on network idle: A page may keep long-lived requests open. Prefer a content-specific selector when one exists, and keep waits within the request timeout.
- A fixed delay works inconsistently: It may be shorter than a slow load or longer than a fast one. Replace it with a stable selector condition where possible.
- The requested section is missing from a full-page image: If the page loads it on scroll, scroll to the section and wait for content inside it before requesting full-page capture.
- A supposedly ready element is still empty: The selector may match a shell or placeholder rather than the rendered result. Choose an element that appears only after the chart, panel, or other target content is present.
- A static page takes longer than necessary: Remove redundant waits. If its initial HTML already contains the needed content and scripts are unnecessary, consider
javascript: false.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. Its one-request API can return a screenshot or PDF; for this example, request a WebP screenshot of the report page. See the ScreenshotNeo documentation for the API options.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://app.example.com/report -o shot.webp
ScreenshotNeo’s clean-shot options accept cookie and consent banners and remove more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify the page verdict and billing status in headers. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for AI agents and MCP clients. The free plan includes 1,000 shots per month without a card; paid plans start at $5 for 3,000 shots. Sign up for ScreenshotNeo’s free plan.
Frequently Asked Questions
Can I use an arbitrary delay instead of waiting for a selector?
Yes, when there is no stable DOM condition to observe, but a timer cannot confirm that the specific content has rendered.
Does the documented JavaScript SDK example prove a live page will capture correctly?
No. Its example URL and selector are illustrative; adapt them to your application and confirm the current API details before shipping.
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.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.




