Tutorial11 min read

Puppeteer Alternatives: Playwright, Selenium, Python and Firefox Options

Short answer

The best Puppeteer alternative for most teams is Playwright: it keeps Puppeteer's browser, context and page model and adds Python, Java and .NET, with Chromium, Firefox and WebKit (pip install playwright, then playwright install firefox). If you must drive the regular installed Firefox, use Selenium, which has official Python bindings and drives Firefox through geckodriver. Puppeteer itself has worked with stable Firefox since v23, so for most people the real gap is Python. For narrower jobs there are WebdriverIO and Cypress for testing, Crawlee for crawling at scale, patched drivers such as nodriver, Camoufox and rebrowser, and AI agent SDKs such as Stagehand. Every one of them accepts a proxy, and ProxyField residential proxies cost from $1.95/GB, so you can start with the Easy Trial: 1 GB for $2.95.

residential IPs
412M+
from, traffic never expires
$1.95/GB
Easy Trial
1 GB for $2.95
On this page 12 sections
  1. If you need Python or Firefox
  2. Why developers look for Puppeteer alternatives
  3. Puppeteer alternatives compared
  4. Playwright: the closest replacement
  5. Selenium and WebdriverIO: the WebDriver side
  6. Crawlee: when the job is a crawl
  7. Patched drivers: nodriver, Pydoll, Camoufox, rebrowser and others
  8. AI browser agents: Stagehand and similar SDKs
  9. Is there anything better than Playwright?
  10. Which alternative should you pick?
  11. Proxies work with every alternative
  12. Puppeteer Alternatives FAQ

If you need Python or Firefox

Which tool covers which need:

ToolPythonFirefoxWhich Firefox it runs
Puppeteer 25.16.0No: Node.js only; Pyppeteer, the Python port, is unmaintainedYes, since v23.0.0The stable Firefox release Puppeteer downloads, over WebDriver BiDi
Playwright 1.64.1Yes: sync and async APIs; Python 3.10 or newer on PyPIYesPlaywright's own Firefox build, which matches the current stable release; it does not work with branded Firefox because it relies on patches
Selenium 4.51.0Yes: official bindings; Python 3.10 or newer on PyPIYesThe regular Firefox installed on the machine, through geckodriver
SeleniumBase 4.56.3YesYesThe regular Firefox, through Selenium
Camoufox 0.5.8Yes, through the Playwright APIYesA modified Firefox build
nodriver, PydollYesNoChrome or Chromium only

Sources Playwright for Python, Playwright browsers, Selenium Python API, Puppeteer supported browsers.

The short rule: new Python project, any browser: Playwright. The real Firefox a user has, or an existing Selenium Grid: Selenium. An existing Node.js Puppeteer project that only needs Firefox: stay on Puppeteer and launch it with browser: 'firefox'; more in what Puppeteer is.

Playwright for Python with Firefox

Shell
pip install playwright
playwright install firefox
Python
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.firefox.launch(proxy={"server": "http://gate.proxyfield.io:7000",
                                      "username": "<login>-country-us-city-new_york",
                                      "password": "<password>"})
    page = browser.new_page()
    page.goto("https://api.ipify.org?format=json")
    print(page.inner_text("body"))   # the exit IP, in New York
    browser.close()

Swap p.firefox for p.chromium or p.webkit and the rest of the script stays the same. For tests, pip install pytest-playwright adds a pytest plugin with a page fixture and expect() assertions.

Selenium for Python with the installed Firefox

Python
# pip install selenium   (Selenium Manager downloads geckodriver if it is missing)
from selenium import webdriver

options = webdriver.FirefoxOptions()
options.add_argument("-headless")
options.set_preference("network.proxy.type", 1)               # manual proxy settings
options.set_preference("network.proxy.http", "gate.proxyfield.io")
options.set_preference("network.proxy.http_port", <port>)      # the port you set up in the dashboard for your allowlisted IP
options.set_preference("network.proxy.ssl", "gate.proxyfield.io")
options.set_preference("network.proxy.ssl_port", <port>)

driver = webdriver.Firefox(options=options)
driver.get("https://api.ipify.org?format=json")
print(driver.find_element("tag name", "body").text)
driver.quit()

Firefox preferences take a host and a port but no username or password, so this setup authorizes your machine's IP through an IP allowlist in the ProxyField dashboard and connects to the port you set up there (<port> above). More options, including SOCKS5: Firefox proxy setup and the Selenium integration.

Why developers look for Puppeteer alternatives

Puppeteer is a solid browser library, but its scope is narrow by design (what Puppeteer is):

  • Node.js only. Teams in Python, Java or .NET need another tool; Pyppeteer, the Python port, is unmaintained.
  • Chrome and Firefox only. No WebKit, so no check of how Safari's engine renders a page.
  • No test runner. Assertions, parallel runs and reports come from other libraries.
  • Default automation signals. Out of the box, an automated Chrome differs from a person's Chrome in ways sites can see, and some sites slow or block it.
  • Brittle selectors. Scripts that click by CSS path break when the layout changes, which pushes some teams toward AI-driven tools.

Puppeteer alternatives compared

Versions and licenses from npm and PyPI.

ToolTypeLanguagesBrowsersLicenseBest for
PlaywrightBrowser automation (1.64.1)Node.js, Python, Java, .NETChromium, Firefox, WebKitApache-2.0The closest replacement, cross-browser
SeleniumWebDriver automation (4.51.0)Java, Python, C#, Ruby, JavaScript, KotlinChrome, Firefox, Edge, SafariApache-2.0QA teams, many languages, Selenium Grid
WebdriverIOTest framework (10.1.0)Node.jsVia WebDriver and BiDiMITEnd-to-end and mobile testing in Node.js
CypressFront-end test tool (16.2.0)JavaScriptChrome-family, Firefox, EdgeMITTesting your own web app, not scraping
CrawleeCrawling library (3.18.2 Node.js, 1.11.0 Python)Node.js, PythonVia Playwright or Puppeteer, plus HTTP crawlersApache-2.0Large crawls with queues, retries and browser pools
nodriverChrome driver without WebDriver (0.50.6)PythonChromeAGPL; "Alpha" on PyPIPython scripts that drive a regular Chrome
PydollChromium driver without WebDriver (3.0.0)PythonChromium-basedMIT (per its README)Async Python automation over the DevTools Protocol
CamoufoxFirefox build plus a Python wrapper (0.5.8)Python (Playwright API)Firefox-basedMIT (wrapper)Firefox-based automation through Playwright calls
rebrowser-puppeteer / rebrowser-playwrightPatched drop-in packagesNode.jsChromiumApache-2.0Existing Puppeteer or Playwright code with patched defaults
SeleniumBaseFramework on Selenium (4.56.3)PythonChrome, Firefox, EdgeMITSelenium tests and scrapers with helpers built in
StagehandAI browser agent SDK (4.3.0)TypeScript, PythonChromiumMITFlows that change often; extraction by instruction
chromedp, rodGo drivers over the DevTools ProtocolGoChromeMITGo services (Go web scraping)
Easy Trial: 1 GB for $2.95.
Try for the price of 1 GB, no subscription, traffic never expires.

Playwright: the closest replacement

Playwright keeps Puppeteer's model (browser, context, page) and adds three browser engines, four languages, locators that wait by themselves and Playwright Test. Most Puppeteer scripts port call by call: page.goto, page.click and page.evaluate keep their names. If you want one alternative and do not know which, start here. Full comparison: Puppeteer vs Playwright; background: what Playwright is.

Selenium and WebdriverIO: the WebDriver side

Selenium drives browsers through WebDriver, the W3C standard every major browser vendor implements, and has bindings in six languages. Since version 4.6 it ships Selenium Manager, which downloads the right driver when it is missing (Selenium docs). It is slower to write than Playwright and needs explicit waits, but it runs the browsers people actually install, and Selenium Grid spreads tests over many machines. See what Selenium is and web scraping with Selenium and Python.

WebdriverIO is a Node.js test framework on WebDriver and WebDriver BiDi, with mobile testing through Appium. Like Cypress, it targets testing your own apps more than scraping other sites.

Crawlee: when the job is a crawl

Crawlee is a crawling library for Node.js and Python. It wraps Playwright and Puppeteer in browser crawlers, adds fast HTTP crawlers for pages that need no browser, and brings request queues, retries, sessions and proxy rotation in one API. If you replaced Puppeteer because your scraper grew into a crawler, Crawlee often replaces your own queue code too. How to crawl a whole site: how to crawl a website.

Patched drivers: nodriver, Pydoll, Camoufox, rebrowser and others

A group of tools changes the defaults that make an automated browser look automated, for example the WebDriver flag or certain DevTools Protocol calls. They are maintained by small teams and change often, so check each project's status before you depend on it.

  • nodriver is the successor of undetected-chromedriver, by the same author: a Python library that drives a regular Chrome over the DevTools Protocol without Selenium or chromedriver. It is async, marked Alpha on PyPI and licensed AGPL, which matters if you ship it inside a product. Its start() call takes a headless option, but it is built around a normal, visible Chrome.
  • Pydoll is a similar async Python library for Chromium-based browsers without a WebDriver.
  • Camoufox is a Firefox-based browser with a Python package that wraps Playwright, so you write ordinary Playwright code against it (PyPI).
  • rebrowser-puppeteer and rebrowser-playwright are drop-in packages that apply the rebrowser patches to Puppeteer and Playwright; you change the import and keep your code.
  • puppeteer-real-browser is a community package that launches a normal, headful Chrome for Puppeteer; its last release on npm was in September 2025.
  • undetected-chromedriver and its successors in SeleniumBase's "UC mode" do the same for Selenium; undetected-chromedriver itself has had no release since February 2024.

What these tools do not change: the number of requests you send from one IP, the pace of your script, and the site's rules. Many sites still rate-limit by IP and watch request patterns, and a site's terms apply whatever tool you use. Scrape public pages at a reasonable pace, follow each site's terms, and read is web scraping legal. Through ProxyField, the Acceptable Use Policy applies whatever tool you run: collecting public web data is allowed, while fraud, attacks and access to data behind logins you are not entitled to are not. How sites tell browsers apart: browser fingerprinting and scraping.

AI browser agents: Stagehand and similar SDKs

Stagehand is an open-source (MIT) SDK for AI browser agents: next to ordinary code, it lets you write steps as instructions, such as act("click the next page button"), and pull structured data with extract() against a schema you define. A language model decides which element to use, so a step survives layout changes that would break a CSS selector.

Playwright vs Stagehand is less a choice than a split of work. Playwright runs deterministic steps fast and at no per-step cost; an AI agent costs a model call per step, runs slower and can be wrong, but needs less upkeep on pages that change. A common pattern is plain Playwright code for navigation and the agent only for the brittle steps. AI-based scraping tools in general: AI web scraping.

Is there anything better than Playwright?

For general browser automation across engines and languages, no single tool covers more than Playwright in 2026. "Better" depends on the job: Selenium when you need the real installed browser or Selenium Grid, Crawlee for crawls with queues and retries, a patched driver when your own tests show a target treats automated browsers differently, and an AI agent SDK for flows that change every week. For pages that need no browser at all, an HTTP client beats every browser tool on speed and traffic; see Python libraries for web scraping.

Which alternative should you pick?

  • Replacing Puppeteer one for one: Playwright.
  • Python, any engine including Firefox: Playwright for Python.
  • The regular installed Firefox, or Selenium Grid: Selenium, with SeleniumBase if you want helpers.
  • Testing your own web app: Playwright Test, Cypress or WebdriverIO.
  • Crawling thousands of pages: Crawlee, or Scrapy in Python (what Scrapy is).
  • Python, regular Chrome, no WebDriver: nodriver or Pydoll, after checking their licenses and status.
  • Flows that break with every redesign: an AI agent SDK such as Stagehand for the fragile steps.
  • Go services: chromedp or rod.

Proxies work with every alternative

Each tool above accepts an HTTP, HTTPS or SOCKS5 proxy, either as a launch option (Playwright, Camoufox through Playwright, Crawlee's ProxyConfiguration), a browser flag or preference (Selenium, nodriver, chromedp) or the remote browser's settings. With the ProxyField gateway the address is gate.proxyfield.io:7000 with a username and password, and <login>-country-us-city-new_york asks for an exit IP in New York. Tools that set the proxy through a Chrome flag or a Firefox preference take no username and password there, so they use the IP allowlist instead, with the port you set up in the dashboard.

Python
# Camoufox, through its Playwright wrapper (pip install camoufox)
from camoufox.sync_api import Camoufox

with Camoufox(proxy={"server": "http://gate.proxyfield.io:7000",
                     "username": "<login>-country-us-city-new_york", "password": "<password>"}) as browser:
    page = browser.new_page()
    page.goto("https://api.ipify.org?format=json")
    print(page.inner_text("body"))

ProxyField gives each request a new IP or a sticky session from 30 s to 36 h, with unlimited concurrent threads. Residential proxies cost $2.95/GB for 1 GB and fall to $1.95/GB from 1,000 GB, with no subscription; traffic never expires, and all purchases are final. Setup guides for the main drivers: Puppeteer, Playwright, Selenium. Start with residential proxies and the Easy Trial: 1 GB for $2.95.

Puppeteer Alternatives FAQ

What are alternatives to Puppeteer?

ProxyField residential proxies, from $1.95/GB, work as the proxy for every alternative to Puppeteer: Playwright (the closest replacement), Selenium and WebdriverIO (WebDriver), Cypress (app testing), Crawlee (crawling), patched drivers such as nodriver, Camoufox and rebrowser, and AI agent SDKs such as Stagehand. Pick by the job: testing, scraping, or automating a flow that changes often.

What's the best alternative to Puppeteer if I also need Python or Firefox support?

Playwright: it has sync and async Python APIs and runs Chromium, Firefox and WebKit, installed with pip install playwright and playwright install firefox. Its Firefox is Playwright's own build, so if you must drive the regular installed Firefox, use Selenium with its Python bindings and geckodriver. Puppeteer itself supports Firefox since v23, but only from Node.js.

What is the best Puppeteer alternative?

For most teams, Playwright: it keeps Puppeteer's browser, context and page model, adds WebKit, Python, Java and .NET, and waits for elements by itself. Crawlee is the better pick when the job is a large crawl rather than browser automation.

Does Playwright work with the regular Firefox?

No. Playwright runs its own Firefox build, which tracks the current stable release, because it relies on patches that branded Firefox does not have. To automate the Firefox a user installed, use Selenium with geckodriver.

What are the limitations of Puppeteer?

It works only from Node.js, drives only Chrome and Firefox, and has no test runner of its own. Like any browser tool, it is heavy per page, and its default automated Chrome is easy for sites to tell apart from a person's browser.

Why do developers look for Puppeteer alternatives?

Usually for a language other than Node.js, for WebKit or cross-browser tests, or for a built-in test runner or crawler. Others want tools that need less selector upkeep, which is where AI agent SDKs come in.

What are the best Selenium alternatives?

Playwright for faster scripts with auto-waiting across three engines, WebdriverIO or Cypress for test suites in JavaScript, and SeleniumBase if you want to keep Selenium with more helpers. For Python scraping without WebDriver, nodriver and Pydoll drive Chrome directly.

Is there anything better than Playwright?

Not for general automation across engines and languages; the better tool depends on the job. Selenium wins when you need the real installed browser, Crawlee for crawls with queues, an AI agent SDK for steps that break on every redesign, and an HTTP client for pages that need no browser.

Does nodriver work in headless mode?

Its start() call has a headless option, but nodriver is designed around a normal, visible Chrome, and pages can behave differently in headless mode. Test both modes on your own target before you choose.

Is Camoufox compatible with Playwright?

Yes. Camoufox's Python package is a wrapper around Playwright, so you launch the Camoufox browser through it and then use ordinary Playwright calls such as new_page() and goto().

Show 3 more questionsShow fewer questions

What is the difference between Playwright and Stagehand?

Playwright runs exact, coded steps quickly and at no cost per step; Stagehand is an MIT-licensed AI agent SDK where a language model picks the element for steps written as instructions. Many teams combine them: code for stable steps, the agent for fragile ones.

What is rebrowser-playwright?

A drop-in npm package that replaces playwright with a build patched by the rebrowser patches, which change some DevTools Protocol behavior of automated Chrome. You change the import and keep your code; a matching rebrowser-puppeteer exists for Puppeteer.

Do Puppeteer alternatives work with proxies?

Yes, all of them accept an HTTP or HTTPS proxy, as a launch option, a browser flag or preference, or a setting of the remote browser. Tools that set the proxy through a Chrome flag or a Firefox preference take no username and password there, so they need an IP allowlist and the port you set up in the dashboard. SOCKS5 runs on the same gate.proxyfield.io:7000 with the same username and password; with the IP allowlist, use the port you set up in the dashboard.

Easy Trial: 1 GB for $2.95.

Try for the price of 1 GB, no subscription, traffic never expires.