wkhtmltoimage captures one URL per command, so the straightforward way to screenshot a list of sites is to run it in a shell loop. Give each URL its own output filename, log failures, and test a few representative pages before processing the full list. The loop is your batch workflow; it is not a built-in bulk mode.
What you need before starting
- A working
wkhtmltoimageexecutable on your system. - A text file containing one URL per line.
- A destination directory with enough space for the images.
The tool is a headless, Qt WebKit-based command-line renderer. The project says it “do[es] not require a display or display service” (wkhtmltopdf project documentation). However, the upstream repository has been archived and made read-only, with an archive notice dated January 2, 2023 (upstream GitHub repository). Check the installed version and test your own operating system and target sites; the documentation does not guarantee compatibility with current websites.
As an Amazon Associate I earn from qualifying purchases.
Make a URL list
Create urls.txt with one address on each line, for example:
https://example.com/
https://www.iana.org/
https://www.wikipedia.org/
Keep credentials and sensitive query parameters out of the list when possible. The tool has options for cookies and HTTP authentication, but URLs or command arguments can be exposed in logs, shell history, or process listings depending on how you run them. Use a safe label in logs and avoid printing full sensitive URLs to shared output.
#1 Best Overall
- --- 𝐏𝐀𝐓𝐄𝐍𝐓 𝐀𝐏𝐏𝐋𝐈𝐄𝐃 𝐅𝐎𝐑---
- 🏡【𝐊𝐢𝐧𝐠&𝐂𝐡𝐚𝐫𝐥𝐞𝐬 𝐑&𝐃 𝐈𝐧𝐭𝐞𝐧𝐭𝐢𝐨𝐧】Versatile Screen Tool - combines the core functions of multi-size roller, hidden hooks, and replaceable blades, and designed this multifunctional screen tool. It solves the problems of traditional screen installation tools with single functions, lack of safety and adaptability. It truly realizes multiple uses of one tool, making screen replacement time-saving, labor-saving, and worry-free. One-time purchase can meet your installation or replacement needs.
- 🏡【𝟑 𝐒𝐢𝐳𝐞𝐬 𝐈𝐧𝐭𝐞𝐫𝐜𝐡𝐚𝐧𝐠𝐞𝐚𝐛𝐥𝐞 𝐑𝐨𝐥𝐥𝐞𝐫𝐬】Flexible Adaptation - In view of the differences in thickness of different window splines, we gift the roller into three specifications: Convex 0.13", Concave 0.13", and Concave 0.18", ensuring perfect matching with the mainstream rubber strip sizes on the market. Feature①: The roller is made of high-hardness plastic, which is strong and durable while avoiding the risk of traditional metal rollers scratching the screen mesh. Feature②: Metal bearing design - smoother rotation, even pressure without deviation. TIPS: you can use the provided Allen wrench to quickly disassemble and replace them.
- 🏡【𝐁𝐥𝐚𝐝𝐞 𝐅𝐮𝐧𝐜𝐭𝐢𝐨𝐧-𝐑𝐞𝐭𝐫𝐚𝐜𝐭𝐚𝐛𝐥𝐞&𝐒𝐭𝐨𝐫𝐚𝐠𝐞&𝐑𝐞𝐩𝐥𝐚𝐜𝐞𝐚𝐛𝐥𝐞】①Retractable-When in use, just hold button, blade will slow rollout, convenient trimming and cutting. Blade can be retracted to prevent Accident scratches. ②Blade has double locking device: it automatically locks to prevent retraction during work and is completely closed to prevent accidental touch when retracted. Ansure your safety. ③Replaceable - A separate button is provided for changing the blades. ④Blade is made of steel-sharp, durable and won't rust. ⑤Storage-Handle has built-in blade storage design to place complimentary blade.Extra equipped 2xreplacement blades- increase service life of tool.
- 🏡【𝐇𝐢𝐝𝐞𝐚𝐛𝐥𝐞 𝐑𝐞𝐦𝐨𝐯𝐚𝐥 𝐇𝐨𝐨𝐤】The hooks are sharp and can hook out the aged spline. The removal hook can be stored and hidden in the handle slot box. OPEN the box cover, take out the hook and insert it into the groove for use. can RETRACT after use to prevent the hook tip from scratching clothes or tool boxes. Hook made of Stainless steel material won't rust.
Run a simple serial batch
The documented command shape is wkhtmltoimage [OPTIONS]... <input file> <output file>—one input and one output per invocation. A Bash loop can apply it to every non-empty line:
mkdir -p screenshots
while IFS= read -r url; do
[ -z "$url" ] && continue
name=$(printf '%s' "$url" | sed 's#https?://##; s#[^A-Za-z0-9._-]#_#g')
wkhtmltoimage "$url" "screenshots/${name}.png" || printf 'FAILED: %sn' "$url" >&2
done < urls.txt
This example is serial: it finishes one capture before starting the next. That makes it easy to see which URL maps to which command and which captures fail. The filename is derived from the URL for convenience, but sanitizing different URLs can produce the same name. For a production batch, use a stable index or hash in every filename and keep a manifest mapping each filename to its URL.
Use collision-resistant names and a manifest
For a small list, numbered output files plus a CSV manifest are usually sufficient. For repeated or large runs, derive a stable hash from the exact URL and store the URL-to-file mapping separately. If URLs contain secrets, redact them in any manifest that other people can access.
Recommended Free Tools
When to use parallel workers
A serial loop is simpler to debug but takes longer as the list grows. A controlled worker pool can reduce elapsed time, but it is your own orchestration—not a documented wkhtmltoimage bulk feature. Set a conservative concurrency limit so the machine and the target sites are not flooded with simultaneous requests. Keep per-URL failure records so you can retry only the unsuccessful captures.
Choose rendering and output options
The Debian wkhtmltoimage(1) manual documents options for output format and quality, viewport dimensions, JavaScript timing, cookies, authentication, and load-error behavior. Exact availability may depend on the installed build; check its help output and test the flags in your environment.
Viewport and image format
Set viewport width and height when consistent page layout matters. The manual describes width as a guide unless smart width is disabled, so a specified width does not necessarily behave as a strict crop in every configuration. PNG is a lossless choice; a lossy format can reduce file size, and the documented --quality value ranges from 0 to 100. Choose output format and quality according to your fidelity and storage needs.
Wait for JavaScript-rendered content
If a page’s content is missing, try --javascript-delay <msec> to give scripts additional time. The manual also documents --window-status <value>, which waits for a page status value. A fixed delay does not require cooperation from the page but may be too short or waste time; a status value can be more targeted if the page sets it reliably. Neither option guarantees that every modern site will render correctly.
Rank #2
- [Perfect Combination]: The screen roller tool kit includes a stainless steel screen rolling tool, a screen rolling tool with plastic wheels, a screen spline removal hook, a window groove cleaning brush and 10 screen installer clips, all you need replacement tools is in this package, effective and convenient for your work.
- [2 Size Rolling Tool]: 2 screen roller tools of different materials can be used to repair variate sizes window screens. Plastic roller tools are suitable for wood, plastic and other that can avoid scratch; steel rollers are suitable for metal screens that heavy-duties replacement work. Both materials have convex and concave rollers, essential tools for replacing window and screen accessories.
- [Renew and Cleaning]: The hook can quickly remove and install the rubber strips top of window screens. the tools will help you replace old or damaged window screens, meanwhile, the equipped slot brush can quickly clean the dirt of the window slot.
- [Independent Installation]: Stainless steel screen installer clips can help you fix the screen mesh with stable. It is faster, more convenient, time-saving, and labor-saving. complete the installation independently.
- [Muti-Purpose]: rescreen tool suit for fixing window screens, sliding screen doors, terrace screens, RV screens, pool screens, garden screens, patio screens, porch screens, sliding doors, patio doors, windproof doors and so on.
Authenticated pages and request settings
The manual lists options for cookies, username/password authentication, custom headers, and client certificates. Use only the credentials needed for the target page, keep secrets out of reusable scripts where possible, and do not include them in logs. A command-line option may still be visible to other local users or system tools, so consider your environment’s process and access controls before capturing private pages.
Decide how load errors affect the batch
Documented load-error options let you choose whether certain failures abort, are ignored, or are skipped. For a complete deliverable, favor recording failures and retrying them rather than silently accepting missing images. If the goal is to capture as many pages as possible in one pass, a policy that allows the batch to continue may be more appropriate; preserve an explicit failure log either way.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Test and troubleshoot before scaling up
Run a small sample that includes a plain page, a JavaScript-heavy page, and any authenticated page type you need. Confirm output dimensions, expected content, filenames, and failure logging before processing the full list.
- No image or command not found: Check that
wkhtmltoimageis installed and accessible onPATH. Run its help or version command and verify that the installed build accepts the options you plan to use. - Page is blank or content is incomplete: Confirm the URL is reachable from the machine running the command. Try an appropriate JavaScript delay or, if the page sets a known status, wait for that status. Test the page individually before changing the whole batch.
- Different pages have inconsistent widths: Set the viewport dimensions explicitly and review smart-width behavior in the installed manual. A viewport width can be a guide rather than a strict output boundary.
- Output files overwrite one another: URL sanitization can collapse distinct addresses to the same filename. Add a stable index or hash and retain a URL-to-file manifest.
- Some pages fail while others succeed: Check network access, authentication, and load-error settings. Keep a list of failed inputs and rerun those after correcting the cause.
- Options behave unexpectedly on a newer system or site: The upstream project is archived, and behavior can vary by binary, operating system, network, and page. Verify compatibility locally; do not assume a successful capture of one site predicts results for all sites.
Or skip the browser setup
If you want to avoid installing and maintaining a local renderer, ScreenshotNeo takes a screenshot from one GET request. Its API and options are documented at ScreenshotNeo docs.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, failed loads, timeouts, and cache hits are not billed. Its MCP server lets AI agents use screenshot and page-info tools. 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.
Frequently Asked Questions
Does wkhtmltoimage have a built-in bulk mode?
No. Its documented command accepts one input and one output; a shell loop or other external script handles the batch.
Can I safely run the example with URLs containing credentials or private query values?
Avoid exposing sensitive values in shared URL lists, logs, shell history, or command arguments. Use redacted labels for logs and the narrowest required authentication options.
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.




