A web browser without a graphical user interface, controlled programmatically. Used for automation, testing, and other purposes.
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 | Not specified |
| PhantomJS | 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 |
These libraries can control multiple browser engines (typically using Selenium)
| Name | About | Supported Languages | License |
|---|---|---|---|
| CasperJS | 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 |
| 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 | 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 |
| Nightmare | Nightmare is a high-level browser automation library built as an easier alternative to PhantomJS. | 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 |
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 |
|---|---|---|---|
| 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 |
| 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 | Not specified |
| 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 |
| stanislaw | Naive, mechanize-like HTML parser/form driver. | Python | Not specified |
| 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 | Automated cross browser testing with JavaScript. | 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 |