Free tools Windows power users keep installed
One-click scans. No signup required.
Short answer: Puppeteer runs on Node.js, while a standard Jupyter installation uses a Python (IPython) kernel. To use Puppeteer in a notebook, either install a JavaScript kernel and run Puppeteer cells there, or keep the Python kernel and call a Node.js script as a subprocess. Install the full puppeteer package when you want Puppeteer to download a compatible Chrome for Testing browser; use puppeteer-core only when you will provide an existing browser with executablePath or channel.
What you need before starting
- A Jupyter Notebook or JupyterLab installation. Typical commands are
pip install notebookfollowed byjupyter notebook; use the equivalent JupyterLab commands if that is your interface. - Node.js available to the notebook kernel or process. The current Puppeteer release line lists Node 22.12 or newer as its system requirement.
- A writable project directory and enough disk space for the browser download. Puppeteer’s installation guide lists approximate Chrome for Testing download sizes of 170 MB on macOS, 282 MB on Linux and 280 MB on Windows.
On a managed notebook, container or server, also verify that Chrome’s Linux dependencies, sandbox, file permissions and cache directory are available. A local desktop usually supplies these automatically; a hosted runtime may not.
Choose the notebook integration
Option 1: JavaScript kernel
A JavaScript kernel gives you the closest experience to a normal Puppeteer script: imports, top-level await and browser objects remain in notebook cells. Jupyter’s default installation does not include this kernel, so install and register a JavaScript-capable kernel separately according to that kernel’s documentation. The precise package and command vary, and there is no single official Puppeteer-specific Jupyter extension.
Option 2: Python kernel plus a Node process
This is often the most predictable choice on a Python notebook server. Put Puppeteer in a small Node project, then invoke it from Python with subprocess. Your notebook remains Python while browser work runs in the supported Node runtime. It also makes dependency locking and deployment easier.
#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.
Install Puppeteer in a Node project
- Create a directory and initialize npm:
mkdir notebook-browser && cd notebook-browser && npm init -y. - Install the full package:
npm i puppeteer. The normal post-install step downloads a compatible Chrome for Testing browser. - If your package manager disabled install scripts, explicitly download the browser with
npx puppeteer browsers install. - For an existing Chrome or Chromium installation instead, install
npm i puppeteer-core. This package does not download a browser; launch it with an explicitexecutablePathor a supportedchannel.
Keep the project directory (including its npm lockfile) associated with the notebook environment. A fresh hosted session may otherwise lose the browser cache and require another download.
Run Puppeteer in a JavaScript notebook
In a JavaScript kernel cell, use Puppeteer’s standard asynchronous sequence:
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
await page.goto('https://example.com', {waitUntil: 'domcontentloaded'});
const title = await page.title();
console.log(title);
await browser.close();
headless: true is the default and is appropriate for unattended notebook jobs. For local visual debugging, use headless: false. Puppeteer also supports headless: 'shell', which selects the separate chrome-headless-shell mode.
Reuse a browser across cells
Starting Chrome for every cell is slow and can leave orphaned processes when a cell is interrupted. Keep a browser variable in notebook state and close it in a final cell:
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →if (!globalThis.browser || !globalThis.browser.isConnected()) {
globalThis.browser = await puppeteer.launch({headless: true});
}
const page = await globalThis.browser.newPage();
try {
await page.goto('https://example.com', {waitUntil: 'networkidle2', timeout: 30000});
console.log(await page.title());
} finally {
await page.close();
}
await globalThis.browser?.close();
globalThis.browser = undefined;
Use a new page per task, set a finite navigation timeout, and close pages in a finally block. If a notebook kernel restarts, check the operating system for leftover Chrome processes before rerunning.
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.
Run Puppeteer from a Python notebook
The default Python kernel cannot import a Node package directly. The reliable boundary is a Node script launched with Python. Create capture.mjs in the npm project:
import puppeteer from 'puppeteer';
const target = process.argv[2] ?? 'https://example.com';
const output = process.argv[3] ?? 'shot.png';
const browser = await puppeteer.launch({headless: true});
try {
const page = await browser.newPage();
await page.goto(target, {waitUntil: 'networkidle2', timeout: 60000});
await page.screenshot({path: output, fullPage: true});
console.log(JSON.stringify({title: await page.title(), output}));
} finally {
await browser.close();
}
Call it from a Python cell, using the project directory as cwd so Node resolves the local installation:
import json, subprocess
result = subprocess.run(
["node", "capture.mjs", "https://example.com", "example.png"],
cwd="notebook-browser",
text=True,
capture_output=True,
check=True,
timeout=90,
)
print(json.loads(result.stdout))
Use capture_output=False while diagnosing a failure so Chrome’s stderr is visible. For structured notebook results, have the Node script print JSON only on stdout and send diagnostic messages to stderr.
Use an existing Chrome with puppeteer-core
Choose this model when your organization manages Chrome, when a container already includes a browser, or when downloading Chrome during installation is undesirable:
import puppeteer from 'puppeteer-core';
const browser = await puppeteer.launch({
headless: true,
executablePath: '/usr/bin/google-chrome'
});
const page = await browser.newPage();
await page.goto('https://example.com', {waitUntil: 'domcontentloaded'});
console.log(await page.title());
await browser.close();
The path is environment-specific. On systems where Puppeteer supports a browser channel, you can pass channel instead. Do not assume that puppeteer-core can discover a browser by itself.
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.
Useful notebook capture patterns
Wait for application content
Single-page applications may report domcontentloaded before their data appears. Prefer a meaningful selector or a bounded delay:
await page.goto(url, {waitUntil: 'domcontentloaded', timeout: 60000});
await page.waitForSelector('[data-ready="true"]', {timeout: 30000});
Use networkidle2 when the site settles quickly, but avoid treating it as a universal readiness test: analytics, sockets and polling can keep a page active indefinitely.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Capture data and files
const heading = await page.$eval('h1', el => el.textContent.trim());
const html = await page.content();
await page.pdf({path: 'page.pdf', format: 'A4', printBackground: true});
await page.screenshot({path: 'page.webp', type: 'webp', fullPage: true});
Notebook output can display returned strings and metadata, while screenshots and PDFs should be saved to a known directory and then loaded by Python or displayed by the notebook UI.
Control viewport and device behavior
await page.setViewport({width: 1440, height: 900, deviceScaleFactor: 2});
await page.emulateTimezone('America/New_York');
await page.setGeolocation({latitude: 40.7128, longitude: -74.0060});
These settings affect responsive layouts and locale-sensitive rendering. Set them before navigation when the initial page load depends on them.
Browser installation and launch failures
“Could not find Chrome”
This usually means the Puppeteer install script was blocked or the cache is missing. Run npx puppeteer browsers install, permit the package’s install script, or switch to puppeteer-core with a verified executablePath.
Rank #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
Linux launch errors
Install the Chrome system libraries required by your distribution, confirm that the cache and temporary directories are writable, and check ownership when the notebook runs as a different user. A missing or unusable sandbox is another common cause. Puppeteer’s documentation describes --no-sandbox only as a fallback for trusted content when no usable sandbox exists; it reduces isolation and should not be a routine setting for untrusted pages.
Recommended Free Tools
Hosted notebook or container failures
Serverless and managed notebook images may omit native packages needed by Headless Chrome. Build an image with those dependencies, persist or correctly configure the Puppeteer cache, and verify the Node version at runtime rather than relying on the host’s default. Re-run a minimal about:blank launch before debugging your target site.
Navigation timeout or an empty result
- Confirm DNS and outbound network access from the notebook host.
- Increase the timeout only after checking whether the page is waiting on a blocked resource.
- Use
domcontentloadedand thenwaitForSelectorfor applications that never become network-idle. - Inspect the final URL, response status and page content; redirects, authentication and bot checks can produce a valid browser session with no expected content.
Headful mode does not open a window
headless:false needs a graphical display. On a remote Linux notebook, provide a display server such as Xvfb or return to headless mode. Headful mode is primarily a local debugging aid.
Reliability, performance and cost considerations
- Startup: launching Chrome is expensive relative to opening a page, so reuse one browser for a batch while isolating tasks in separate pages.
- Concurrency: multiple pages increase memory and CPU use. Start conservatively, then measure your notebook host rather than assuming desktop capacity.
- Determinism: fix viewport, timezone, locale, user agent and wait conditions when generating repeatable artifacts.
- Cleanup: always close pages and the browser, especially in loops and exception paths.
- Storage: account for the browser download, screenshots, PDFs and cache growth. Ephemeral notebook disks can disappear between sessions.
- Security: treat page content and downloaded files as untrusted. Avoid disabling the sandbox unless the runtime leaves no alternative and the URLs are trusted.
Puppeteer itself has no Jupyter-specific usage fee; your costs come from the machine, storage and any hosted notebook or browser infrastructure you choose.
Or skip the browser setup
If your goal is a clean screenshot rather than browser automation, ScreenshotNeo provides a single HTTP request. It accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups and chat widgets. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and response headers identify the page verdict and whether it was billed.
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 →See the parameter reference in the ScreenshotNeo documentation. cURL:
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.
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}`);
ScreenshotNeo also offers an MCP server with take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients. Its API supports full-page and element captures, dark mode, device presets or custom viewports, retina scale, PDF paper and page-range controls, custom CSS and JavaScript, clicks, selector or network-idle waits, request and resource blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, TTL caching, signed links, asynchronous jobs with webhooks, bulk capture of up to 100 URLs per call, usage reporting and an OpenAPI specification. Existing screenshot API parameter names are accepted to ease migration.
The Free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is included on every plan. Create a free ScreenshotNeo account.
FAQ
Can I import Puppeteer directly in a Python cell?
No. Use a JavaScript kernel or invoke a Node script from Python.
Should I use puppeteer or puppeteer-core?
Use puppeteer when you want Puppeteer to manage Chrome for Testing; use puppeteer-core when your environment already manages the browser.
Why does my notebook work locally but fail in a container?
Containers often lack Chrome’s native libraries, sandbox support, writable cache paths or a compatible Node version.
Is headful mode required for screenshots?
No. Headless mode is the default and produces screenshots without a visible desktop. Use headful mode only when you need to watch or debug the browser.
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.

