A web browser without a graphical user interface, controlled programmatically. Used for automation, testing, and other purposes.
Sponsored by 🅱️ Browserbase: Hosted Headless Web Browsers with built-in session recording, auto-scaling, proxies and captcha solving.
Compatible with Puppeteer, Playwright, and Selenium.
Compatible with Puppeteer, Playwright, and Selenium.
Experience unstoppable data extraction with Bright Data’s Scraping Browser. Bypass blocks, handle JavaScript effortlessly, and power up your automation at scale. Start your free trial now!
These browser engines fully render web pages or run JavaScript in a virtual DOM
Name | About | Supported Languages | License |
---|---|---|---|
Chromium Embedded Framework | CEF is a open source project based on the Google Chromium project. | JavaScript | BSD |
Erik | Headless browser on top of Kanna and WebKit. | Swift | MIT |
jBrowserDriver | A Selenium-compatible headless browser which is written in pure Java. WebKit-based. Works with any of the Selenium Server bindings. | Java | Apache License v2.0 |
PhantomJS | [Unmaintained] PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG. | JavaScript, Python, Ruby, Java, C#, Haskell, Objective-C, Perl, PHP, R(via Selenium) | BSD 3-Clause |
Splash | Splash is a javascript rendering service with an HTTP API. It's a lightweight browser with an HTTP API, implemented in Python using Twisted and QT. | Any | BSD 3-Clause |
Surf | Surf is an open source project that implements a virtual web browser that can be controlled programatically | Go | MIT |
These libraries can control multiple browser engines (typically using Selenium)
Name | About | Supported Languages | License |
---|---|---|---|
CasperJS | [Unmaintained] CasperJS is an open source navigation scripting & testing utility written in Javascript for the PhantomJS WebKit headless browser and SlimerJS (Gecko). | JavaScript | MIT |
Geb | Geb is a Groovy interface to WebDriver. | Groovy | Apache |
Playwright | Playwright is a Node library to automate the Chromium, WebKit and Firefox browsers with a single API | TypeScript | Apache |
playwright-dotnet | Playwright for .NET is a library to automate Chromium, Firefox and WebKit browsers with a single API. | .NET | MIT |
playwright-python | Playwright for Python is a library to automate Chromium, Firefox and WebKit browsers with a single API. | Python | Apache |
playwright-java | Playwright for Java is a library to automate Chromium, Firefox and WebKit browsers with a single API. | Java | Apache |
playwright-go | Playwright for Go is a library to automate Chromium, Firefox and WebKit browsers with a single API. | Go | MIT |
Selenium | Selenium is a suite of tools to automate web browsers across many platforms. | JavaScript, Python, Ruby, Java, C#, Haskell, Objective-C, Perl, PHP, R, C++ | Apache |
Splinter | Splinter is an open source tool for testing web applications using Python. It lets you automate browser actions, such as visiting URLs and interacting with their items. | Python | - |
SST | SST (selenium-simple-test) is a web test framework that uses Python to generate functional browser-based tests. | Python | - |
Watir | The most elegant way to use Selenium WebDriver with Ruby. | Ruby | MIT |
These libraries control PhantomJS
Name | About | Supported Languages | License |
---|---|---|---|
Ghostbuster | Automated browser testing via phantom.js, with all of the pain taken out! That means you get a real browser, with a real DOM, and can do real testing! | JavaScript | Not specified |
jedi-crawler | Lightsabing Node/PhantomJS crawler; scrape dynamic content : without the hassle | JavaScript | Not specified |
Lotte | Lotte is a headless, automated testing framework built on top of PhantomJS and inspired by Ghostbuster. | JavaScript | MIT |
phantompy | Phantompy is a headless WebKit engine with powerful pythonic api build on top of Qt5 Webkit | Python | LGPL-2.1 |
X-RAY | Supports strings, arrays, arrays of objects, nested object structures, selector API, pagination, crawler, concurrency, throttles, delays, timeouts, and pluggable drivers (PhantomJS, HTTP) | JavaScript | MIT |
Horseman | Promise based Node.js module for PhantomJS. Features chainable API, understandable control-flow, support for multiple tabs, and built-in jQuery. | JavaScript | MIT |
These libraries control Chromium
Name | About | Supported Languages | License |
---|---|---|---|
Awesomium | Chromium-based headless browser engine | C++, .NET | Free/Commercial |
Headless Chromium | Chromium feature activated with the --headlesss flag, currently availible in the nightly build of Chromium, not yet released |
C++ | Opensource |
Puppeteer | Headless Chrome Node API from the Chrome DevTools team | JavaScript | Apache |
PuppeteerSharp | PuppeteerSharp is a .NET port of the official Headless Chrome Node.JS Puppeteer API | .NET | MIT |
chrome-remote-interface | Chrome Debugging Protocol interface for Node.js | JavaScript | MIT |
Chromy | Features chainable API, mobile emulation, fundamental API such as javascript evaluation. | JavaScript | MIT |
chromedp | A faster, simpler way to drive browsers (Chrome, Edge, Safari, Android, etc) without external dependencies (ie, Selenium, PhantomJS, etc) using the Chrome Debugging Protocol. | Go | MIT |
Chromeless | Chrome automation made simple. Runs locally or headless on AWS Lambda. | JavaScript | MIT |
Chrome PHP | PHP API to drive Chromium or Google Chrome via the Chrome Devtools Protocole. | PHP | Fair |
Wendigo | Test-oriented browser automation library using Puppeteer. | JavaScript | GPL-3.0 |
cdp4j | A web-automation library for Java. It can be used for automating the use of web pages and for testing web pages. It use Google Chrome DevTools Protocol to automate Chrome/Chromium based browsers. | Java | cdp4j Commercial License |
Pyppeteer | Python port of puppeteer JavaScript (headless) chrome/chromium browser automation library | Python | MIT |
Headless Chrome | A high-level API to control headless Chrome or Chromium over the DevTools Protocol. | Rust | None |
These drivers control an in-process instance of Webkit
Name | About | Supported Languages | License |
---|---|---|---|
Browserjet | Runs a custom build of webkit, controlled by node.js interface. | JavaScript | Not specified |
ghost.py | ghost.py is a webkit web client written in python. | Python | MIT |
headless_browser | Headless browser based on WebKit written in C++. | C++ | Not Specified |
Jabba-Webkit | Jabba's headless webkit browser for scraping AJAX-powered webpages. | Python | Not specified |
Jasmine-Headless-Webkit | jasmine-headless-webkit uses the QtWebKit widget to run your specs without needing to render a pixel. | Python, JavaScript, Ruby | Free |
Python-Webkit | Python-Webkit is a python extension to Webkit to add full, complete access to Webkit's DOM | Python | GNU |
Spynner | Programmatic web browsing module with AJAX support for Python | Python | Not specified |
Webloop | Scriptable, headless WebKit with a Go API. | Go | BSD 3-Clause |
wkhtmltopdf wkhtmltox wkhtmltoimage | Command line tool rendering HTML into PDF and other image formats. | shell, C | LGPLv3 |
WKZombie | Functional headless browser (with JSON support) for iOS using WebKit and hpple/libxml2. | Swift | MIT |
These libraries control lesser known browsers or OS-provided web libraries
Name | About | Supported Languages | License |
---|---|---|---|
Cypress | Cypress supports end-to-end, integration and unit tests and makes debugging tests simple. Default engine is headless Electron. | JavaScript | MIT |
Nightmare | Nightmare is a high-level browser automation library built as an easier alternative to PhantomJS. It runs on the Electron engine. | JavaScript | MIT |
grope | A RubyCocoa interface to the macOS WebKit Framework | RubyCocoa | MIT |
SlimerJS | SlimerJS is similar to PhantomJs, except that it runs Gecko, the browser engine of Mozilla Firefox, instead of Webkit (And it is not yet truly headless). | JavaScript | Mozilla 2.0 |
SpecterJS | A scriptable headless Internet Explorer port of PhantomJS. | JavaScript | MIT |
trifleJS | A headless Internet Explorer browser using the .NET WebBrowser Class with a Javascript API running on the V8 engine. | JavaScript | MIT |
These libraries are typically naive or HTML-only browsers
Name | About | Supported Languages | License |
---|---|---|---|
AngleSharp | .Net Http Parsing Library | .NET | MIT |
Guillotine | A .NET headless browser, written in C# | .NET | LGPL-3.0 |
benv | Stub a browser environment in node.js and headlessly test your client-side code. | JavaScript | MIT |
browser.rb | Headless Ruby browser on top of Nokogiri and TheRubyRacer | Ruby | Not specified |
BrowserKit | BrowserKit simulates the behavior of a web browser. | PHP | MIT |
DamonJS | Bot navigating urls and doing tasks. | JavaScript | Apache |
Headless | Headless browser support for fast web acceptance testing in .Net | .NET | MIT |
HeadlessBrowser | A very miniature headless browser, for testing the DOM on Node.js | JavaScript | Not specified |
HtmlUnit | HtmlUnit is a "GUI-Less browser for Java programs". | Java | Apache |
Jaunt | Java Web Scraping & Automation API | Java | Apache (monthly edition) |
Jauntium | Free Java library that allows you to easily automate Chrome, Firefox, Safari, Edge, IE, and other modern web browers. | Java | Apache |
JSDom | A JavaScript implementation of the WHATWG DOM and HTML standards, for use with Node.js. | JavaScript | MIT |
MechanicalSoup | A Python library for automating interaction with websites. | Python | MIT |
mechanize | Stateful programmatic web browsing. | Python | BSD 3-Clause, ZPL 2.1 |
node-as-browser | Create a browser-like environment within Node.js | JavaScript | MIT |
RoboBrowser | A simple, Pythonic library for browsing the web without a standalone web browser. | Python | BSD 3-Clause |
SimpleBrowser | A flexible and intuitive web browser engine designed for automation tasks. Built on the .Net 4 framework. | .NET | BSD 3-Clause |
twill | Twill is a simple language that interacts with basic HTML pages (no JavaScript support). | Python | MIT |
WeasyPrint | WeasyPrint is a visual rendering engine for HTML and CSS that can export to PDF. It aims to support web standards for printing. | Python | BSD 3-Clause |
WWW::Mechanize | Headless browser for Perl with many plugins and extensions, notably Test::WWW:Mechanize for testing | Perl | Perl 5 |
X-RAY | Supports strings, arrays, arrays of objects, nested object structures, selector API, pagination, crawler, concurrency, throttles, delays, timeouts, and pluggable drivers (PhantomJS, HTTP) | JavaScript | MIT |
Xidel (Internet Tools) | An XQuery-based cli web scraper for static X/HTML pages and JSON-APIs. | FreePascal, XQuery | GPL-2 |
Zombie.js | Zombie.js is a lightweight framework for testing client-side JavaScript code in a simulated environment. No browser required. | JavaScript | MIT |
Name | About | Supported Languages | License |
---|---|---|---|
DalekJS | [unmaintained and recommend TestCafé] Automated cross browser testing with JavaScript. | JavaScript | MIT |
TestCafé | Automated browser testing for the modern web development stack. | JavaScript | MIT |
Sahi | Sahi is a cross-browser automation/testing tool with the facility to record and playback scripts. | JavaScript, Java, Ruby, PHP | Apache / Commercial |
WatiN | Web Application Testing In .Net | .NET | Apache 2.0 |
Name | About | Supported Languages | License |
---|---|---|---|
browser-launcher | Detect and launch browser versions, headlessly or otherwise | JavaScript | MIT |
Headless Recorder | Chrome extension that records your browser interactions and generates a Playwright or Puppeteer script | JavaScript | MIT |