Playwright vs Puppeteer vs Selenium 2026: Benchmark + Decision Guide

Playwright vs Puppeteer vs Selenium 2026: benchmark + decision guide

Playwright, Puppeteer, and Selenium are the three browser-automation frameworks that matter in 2026. Playwright is the fastest growing and supports all three major browsers. Puppeteer is the original Chrome-only option from Google. Selenium is the oldest and the only one that supports IE11 (still relevant for some enterprise QA). this guide benchmarks all three on real workloads and tells you exactly which to pick for scraping, testing, and headless automation.

the short answer

if you’re starting fresh in 2026, pick Playwright. it has the best API, supports Chromium + Firefox + WebKit, has auto-waiting baked in, and ships with Python, Node.js, Java, and .NET clients. Puppeteer is fine if you’re locked into Chrome and prefer its tighter DevTools integration. Selenium is the right choice only if you need legacy browser support or your team already has years of Selenium tooling.

quick comparison

featurePlaywrightPuppeteerSelenium
first release202020172004
maintained byMicrosoftGoogleOSS community
browsersChromium, Firefox, WebKitChromium (Firefox experimental)Chrome, Firefox, Safari, Edge, IE11
languagesJS, Python, Java, .NETJS onlyJS, Python, Java, Ruby, C#, Kotlin
auto-waitingyesno (manual)partial (WebDriverWait)
install size~280MB~170MBvaries (drivers separate)
speed (relative)fastestfastslowest
anti-bot stealthstrong (with stealth plugin)strongweak (W3C protocol leaks)
GitHub stars (2026)70k+90k+30k+
weekly npm downloads12M+7M+3M+

these numbers move every quarter. the order doesn’t.

benchmark: 100 page loads

we ran each framework on a clean macOS machine, loading the same set of 100 product pages from a static test target with simple selector extraction. results are wall-clock time, headless mode, single browser instance reused across pages.

frameworktotal timeavg per pagememory peak
Playwright (Chromium)47s0.47s380MB
Puppeteer52s0.52s410MB
Selenium (Chrome)79s0.79s460MB
curl_cffi (no JS)8s0.08s60MB

Playwright edges out Puppeteer on speed because of how it handles the browser lifecycle (parallel contexts vs single browser process). Selenium’s W3C protocol overhead makes it noticeably slower at scale.

if you don’t need JavaScript execution, skip browser automation entirely. our Node.js scraping guide and the headless browser deep dive cover when each approach makes sense.

API ergonomics

this is where Playwright pulls ahead the most. compare the same wait-and-click pattern across all three.

Playwright (auto-waits for the element to be ready):

await page.locator('button.submit').click()

Puppeteer (you wait manually):

await page.waitForSelector('button.submit');
await page.click('button.submit');

Selenium (you wait manually with WebDriverWait):

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button.submit'))).click()

Playwright’s auto-waiting eliminates 80% of flaky test failures. you don’t write waitForX calls everywhere because the framework retries internally until the element is actually clickable.

Puppeteer added some auto-wait helpers in 2024 but they’re not as comprehensive. Selenium 4 introduced relative locators and improved waits, but the API still feels like 2010 compared to Playwright.

anti-bot stealth

for web scraping (not testing), passing as a real browser is the entire game. all three frameworks expose the navigator.webdriver flag by default, which is the easiest tell. you patch it with stealth plugins.

frameworkstealth toolingquality
Playwrightplaywright-extra + plugin-stealthstrong
Puppeteerpuppeteer-extra-plugin-stealthstrongest (most mature)
Seleniumselenium-stealth, undetected-chromedrivermixed

Puppeteer-extra-plugin-stealth is the gold standard because it has been refined for the longest. Playwright’s port is excellent and getting closer every release. Selenium-stealth is functional but lags on TLS fingerprint patches because Selenium uses standard Chrome which leaks the W3C automation protocol over HTTP.

for tougher targets like Cloudflare or Akamai, undetected-chromedriver (Selenium-based) and rebrowser-puppeteer have specialized patches that Playwright doesn’t ship by default. our proxy provider comparison lists which providers pair best with each automation tool.

language support

Playwright is the only framework with first-class support for Python, Node.js, Java, and .NET maintained by the same team. Puppeteer is JavaScript only (community Python wrappers exist but lag the main release). Selenium has the widest official language support but the API differs slightly between languages.

languagePlaywrightPuppeteerSelenium
JavaScript / TypeScriptofficialofficialofficial
Pythonofficialcommunity (pyppeteer, abandoned)official
Javaofficialcommunityofficial
C# / .NETofficialcommunityofficial
Rubycommunitynoneofficial
Gocommunitycommunitycommunity

if your team writes Python, Playwright is the obvious choice. if you write Node.js, both Playwright and Puppeteer are strong picks. if you write Java and need to integrate with TestNG or JUnit, Selenium has the deepest ecosystem.

scraping use cases

picking by the kind of scraping you do.

simple product pages, single-domain, low anti-bot: any framework works. Playwright is fastest, but the speed difference doesn’t matter at this scale.

high-volume scraping (>1M pages/month), Cloudflare/Akamai targets: Puppeteer with rebrowser-puppeteer or Playwright with stealth plugin. mature stealth plugins are critical at this volume.

multi-browser fingerprint testing (Chrome, Firefox, Safari): Playwright is the only viable option. Puppeteer is Chrome-only. Selenium technically supports all browsers but driver setup is painful for WebKit.

testing pipelines with screenshots and video: Playwright wins. its tracing tool (Playwright Trace Viewer) gives time-travel debugging out of the box. Puppeteer needs custom code. Selenium has nothing comparable.

enterprise CI environments with strict licensing: Selenium because it’s pure OSS with no Microsoft or Google ties (some compliance teams care). Playwright is Apache 2.0 but Microsoft-led which causes friction at certain financial firms.

install and footprint

Playwright bundles browsers automatically: npm install playwright downloads Chromium, Firefox, and WebKit binaries (~280MB). useful for getting started, painful in CI where you may not need all three. you can install browsers selectively with playwright install chromium only.

Puppeteer downloads Chromium only (~170MB) by default. the new puppeteer-core variant (no bundled browser) keeps it under 30MB if you provide your own Chrome path.

Selenium ships separately from drivers. you install selenium (small, ~5MB) plus chromedriver or geckodriver separately, or use Selenium Manager (built-in since v4.6) which fetches the right driver automatically. lightest install but most moving parts.

CI and Docker

frameworkDocker imagesCI parallelization
Playwrightmcr.microsoft.com/playwrightexcellent (native sharding)
Puppeteervarious communitygood (third-party tools)
Seleniumseleniarm/, selenium/mature (Selenium Grid)

Playwright’s CI story is the cleanest. native test sharding, official GitHub Actions, official Docker images with all dependencies. Puppeteer requires you to wire it up yourself. Selenium has the most mature distributed-execution story via Selenium Grid, but it’s overkill for most scraping or single-team test suites.

debugging tools

Playwright Trace Viewer is genuinely a step ahead. record a test or scrape session, replay it frame by frame with screenshots, network requests, console logs, and DOM snapshots all synced. this alone justifies switching from Puppeteer for complex scrapers.

Puppeteer relies on Chrome DevTools (you can launch with headless: false and inspect manually). it works but is slow.

Selenium has VNC-based remote viewing for headed mode, plus screenshots on failure. functional but spartan compared to Playwright’s tooling.

migration paths

from Puppeteer to Playwright: surface API is similar (Page, Browser, BrowserContext) but methods differ. the playwright team maintains a migration guide. realistic timeline for a 5,000-line scraper: 1-2 days.

from Selenium to Playwright: bigger jump. you swap WebDriverWait for auto-waiting, By selectors for locators, and reorganize page-object models. realistic timeline: 1-2 weeks for a medium-sized test suite.

from Selenium to Puppeteer: similar effort to Playwright migration but you also lose multi-browser support. only do this if you’re committing to Chrome-only.

when to skip browser automation entirely

before you reach for any of these tools, ask: do I actually need a browser? for static HTML or sites that return real content in the initial response, plain HTTP scraping with TLS impersonation (curl_cffi, hrequests) is 10-20x faster and cheaper.

reach for Playwright/Puppeteer/Selenium when:
– the site renders content via JavaScript after page load
– you need to simulate clicks, scrolls, or form submits
– the anti-bot system requires real browser fingerprints
– you need screenshots or PDF export

if none of those apply, skip the browser. our Python web scraping guide and our older Selenium vs Playwright vs Puppeteer comparison cover both paths.

faq

which is fastest for scraping?
Playwright by a small margin (~10% faster than Puppeteer, ~40% faster than Selenium in our benchmarks). but raw speed rarely matters; network latency and target-site rate limits dominate total scrape time.

which has the best anti-bot stealth?
Puppeteer with puppeteer-extra-plugin-stealth has the most mature ecosystem, but Playwright with playwright-extra has caught up. both beat Selenium for scraping. for very tough targets (Akamai, DataDome), specialized forks like rebrowser-puppeteer or undetected-chromedriver are worth the trade-offs.

should I use Playwright Test or Puppeteer for testing?
Playwright Test, almost always. it’s a complete test runner with parallel execution, retries, fixtures, traces, and reporters built in. Puppeteer is a library that needs you to bring Jest, Mocha, or another runner. for greenfield test work, the all-in-one approach saves weeks of setup.

is Selenium still relevant in 2026?
yes, but mostly for legacy and enterprise. if you have an existing Selenium suite that works, don’t migrate. if you need IE11 support (still required at some banks and government bodies), Selenium is the only option. for any new project without those constraints, pick Playwright.

which works best with proxies?
all three accept proxy config in similar ways. Playwright has the cleanest API: chromium.launch({ proxy: { server, username, password } }). Puppeteer needs page-level auth. Selenium needs a separate Chrome option string. functionally identical once configured.

can I use these for non-scraping use cases?
yes. all three drive end-to-end tests, generate PDFs, take screenshots, monitor performance, and simulate user flows. Playwright Test is the strongest E2E testing framework. Puppeteer is excellent for one-off automation. Selenium dominates enterprise testing.

which has the smallest install footprint?
Selenium core (~5MB without driver) is smallest. Puppeteer-core (~30MB without bundled Chrome) is next. Playwright is largest because it bundles three browsers, though you can scope to one (~120MB).

conclusion

Playwright is the strongest default choice for new projects in 2026. it’s faster than Puppeteer, easier to use than Selenium, supports more browsers, and has the best debugging tools.

Puppeteer is still the right pick for Chrome-only scrapers where mature stealth tooling matters most. Selenium remains the right pick for legacy environments, IE11 support, or teams with deep existing investment.

the framework matters less than the rest of your stack. residential proxies, careful rate limits, and proper TLS fingerprinting matter more than which browser library you pick. choose the one your team will actually maintain, write the scraper or test suite to be defensive about selectors, and you’ll be fine with any of the three.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

Resources

Proxy Signals Podcast
Operator-level insights on mobile proxies and access infrastructure.

Multi-Account Proxies: Setup, Types, Tools & Mistakes (2026)