Technology moves fast! ⚡ Don't get left behind.🚶 Subscribe to our mailing list to keep up with latest and greatest in open source projects! 🏆

Subscribe to our mailing list


Scriptable Headless Browser

Subscribe to updates I use phantomjs

Statistics on phantomjs

Number of watchers on Github 24930
Number of open issues 1807
Average time to close an issue 4 days
Main language HTML
Average time to merge a PR 10 days
Open pull requests 100+
Closed pull requests 74+
Last commit over 1 year ago
Repo Created over 8 years ago
Repo Last Updated over 1 year ago
Size 161 MB
Organization / Authorariya
Page Updated
Do you use phantomjs? Leave a review!
View open issues (1807)
View phantomjs activity
View TODOs for phantomjs (26)
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating phantomjs for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

PhantomJS - Scriptable Headless WebKit

PhantomJS ( is a headless WebKit scriptable with JavaScript. The latest stable release is version 2.1.

Note: Please do not create a GitHub pull request without reading the Contribution Guide first. Failure to do so may result in the rejection of the pull request.

Use Cases

  • Headless web testing. Lightning-fast testing without the browser is now possible!
  • Page automation. Access and manipulate web pages with the standard DOM API, or with usual libraries like jQuery.
  • Screen capture. Programmatically capture web contents, including CSS, SVG and Canvas. Build server-side web graphics apps, from a screenshot service to a vector chart rasterizer.
  • Network monitoring. Automate performance analysis, track page loading and export as standard HAR format.


  • Multiplatform, available on major operating systems: Windows, Mac OS X, Linux, and other Unices.
  • Fast and native implementation of web standards: DOM, CSS, JavaScript, Canvas, and SVG. No emulation!
  • Pure headless (no X11) on Linux, ideal for continuous integration systems. Also runs on Amazon EC2, Heroku, and
  • Easy to install: Download, unpack, and start having fun in just 5 minutes.


PhantomJS is free software/open source, and is distributed under the BSD license. It contains third-party code, see the included third-party.txt file for the license information on third-party code.

PhantomJS is created and maintained by Ariya Hidayat (Twitter: @ariyahidayat), with the help of many contributors. Follow the official Twitter stream @PhantomJS to get the frequent development updates.

phantomjs open issues Ask a question     (View All Issues)
  • over 2 years Typekit fonts stopped rendering
  • over 2 years Header and footer with different height
  • over 2 years How to build master?
  • over 2 years PhantomJS: How to prevent all page redirects??
  • over 2 years Non-standard NamedNodeMap behaviour
  • over 2 years Regression in encoding.cpp
  • over 2 years Phantomjs crashed, reboot helps for a while
  • over 2 years Performance Log
  • over 2 years render don't work
  • over 2 years Wrong result from regex test
  • over 2 years Phantom JS crashed during a build by Jenkins
  • over 2 years phantomjs hangs while opening the url using selenium?
  • over 2 years fs module not found
  • over 2 years Update PhantomJS version from 1.9.8 to 2.1.1 in my CentOS6.2,but it does not render an image src completely ?
  • over 2 years Crash while parsing JSON command
  • over 2 years Failure to render WebP images inside a page
  • over 2 years Not bundled all the javascript in one binary file distribution
  • over 2 years REPL on Windows: Enter key on Numpad does not work
  • over 2 years Syntax Error: Use of reserved word 'class'
  • over 2 years The process of PhantomJS called by PHP under Windows server 2008 is slow
  • over 2 years Phantom.js does not respect iFrames at all
  • over 2 years Missing parentRule and parentStyleSheet attributes on a CSSStyleRule
  • over 2 years After set proxy get like this: <html><head></head><body></body></html>
  • over 2 years The requested URL was rejected. Please consult with your administrator. Your support ID is
  • over 2 years PhantomJS sometime display wrong Arabic characters
  • over 2 years Phantomjs + Nightwatchjs: Not reading raw HTML of SPA
  • over 2 years PhantomJS is not accepting --noproxy in capabilities.
  • over 2 years 2.1.1 port for FreeBSD
  • over 2 years Splits the argument on comma
  • over 2 years random freezes of phantomJS during tests in Docker Container
phantomjs open pull requests (View All Pulls)
  • Actual implementation of custom IP in ghostdriver
  • Document optional parameters of evaluateAsync
  • Test load-images=yes and load-images=no.
  • #13976 - 'global variables are forbidden in strict mode' issue fixed
  • Linting the javascript code
  • Allow setting devicePixelRatio
  • Fix bodySize in onResourceReceived end, fix #10156
  • Documentation changes for renderBuffer
  • Add ability to specify the size of the output image file when rendering page
  • Remove referer from customHeaders after first request
  • Fix for issue #10455: Canvas toDataURL encode is different.
  • Changing webpage settings should get immediate result
  • Support dpi setting for pdf generation
  • Upgrade Ghostdriver to support PhantomJS 2
  • Add support for capturing viewport when rendering images
  • Added page.renderBuffer, response.writeBinary, query string parsing, and a webpage snapshot service example
  • Update networkaccessmanager.cpp - fix #10156 bodysize inconsistances/bytes transferred
  • renderBase64 with Quality Parameter
  • Migrated from QCommandLine to QCommandLineParser
  • proxy exceptions
  • added possibility to use proxy for localhost
  • Also send WebPage::customHeaders within our request
  • Add tests for #11887
  • Added fromCache attribute to network response
  • allow native modules to be created and require()'d
  • #11979 support remote proxy class configuration in webdriver mode
  • Adds require.resolve() functionality for better combatibility with node modules.
  • #11884 - New child windows now inherit the settings of the parent
  • Add a field for request headers on response
  • Set frameName for WebPage's resource callbacks.
  • Add/Remove CookieJar methods must return value
  • Define "pageWidth" and "pageHeight"
  • Add examples
  • rasterize,js: missing var declarations
  • Increase memory available on Windows
  • Update RE: adding gnuwin32/bin to PATH on windows
  • Fix a bug of ``.
  • Update to disable qtbase/qtwebkit unwanted features
  • Add issue template
  • Handle empty stack processing onError
  • Allow to disable local storage
  • Emit resourceRecevied for sync AJAX requests
  • Allow user to change DPI of a web page
  • Variables not declared, only identified if you specify an image size …
  • Enable CI builds in travis and appveyor.
  • Add support to render pdf to base64.
  • [WIP] Add callbacks and feature to download files
  • Fix for Issues #11944 #12382 - pass along a custom referrer
  • Fixed typo
  • Upgrade example to run with Jasmine 2.4.1
  • Revert "Add support to render pdf to base64."
  • Fix QPageLayout::Orientation orientation assigns
  • Add frameName to onNavigationRequested.
  • Initial implementation of Docker container, building from source
  • Added a bug-reporting.html page that directs people to crash-reporting.html
  • Be ready for bleeding edge WebKit
  • Merging Updates on June 23,2016
  • Fix case-insensitive format for renderBase64 (#14358)
  • Strict mode forbids implicit creation of global property
  • Add WebPage#cookiesForUrl (#14391)
  • Fix typo in command line doc
  • Move documentation from gh-pages to master branch under /docs
  • Provides ability to compile PhantomJS with new webkit code
  • Issue #14497: Don't force Content-Type header on POST request with empty body
  • Issue #14497: Don't force Content-Type header on POST request with empty body
  • Add system.stdout.isTTY property
  • [third-party][mongoose] fix the memory leak
  • Update
  • Change some awkward phrasing in the docs
  • update run-jasmine.js example for new jasmine
  • Update
  • Fix raphaeljs url as it does not exist anymore
  • Fix regression in setEncoding introduced in 9d1c6b9
  • Update run-jasmine.js example for Jasmine 2.5
  • Update
  • Linked up addCookie page
  • Add an optional quality parameter to renderBase64
  • Fixed misleading comment about cookie "expires"
  • Documented the fields of the addCookie parameter
  • Update
  • fix for evaluateAsync reversing args
  • [Bugfix] Fix cookie addition in ghostdriver
  • Fix addCookie documentation
  • Update
  • add ghostdriver command line option
  • Add RPM spec file and scripts
  • Fix for passwordless-credential proxy authentication
  • Update
  • attach fragment when redirect
  • Update
  • add example
  • corrected syntax in addCookie() example
  • Make reading server.port return the correct value when port=0
  • add a resourceTimeout parameter to phantomjs from 2.1.1
  • Update
  • Add code to execFile callback
  • _posts/api/fs/method/
  • Fix for file uploads
  • update ghostdriver for phantomjs 2.5
  • Create raster_multiple.js
phantomjs questions on Stackoverflow (View All Questions)
  • Getting Asynchronous Sessions cleanup phase starting NOW using Phantomjs
  • PhantomJS hangs for a long time saying "Asynchronous Sessions clean-up phase starting NOW"
  • Scrape links with casperjs/phantomjs
  • How to use jQuery with PhantomJS?
  • selenium phantomJS states 'element is not visible' but works fine in firefox
  • How to create a symbolic link in phantomjs using fs api?
  • How to download a csv file using PhantomJS
  • Downloading entire html webpage using PhantomJS
  • Mock Timezone in PhantomJS for Jasmine Test
  • How to download files from a FTP using PhantomJS
  • File upload with Behat, Mink & PhantomJS
  • Using PhantomJs with PHP loops
  • Phantomjs is duplicating content when exporting to PDF
  • Phantomjs: Set margin for one page pdf
  • Where are the sources for phantomjs 1.9.19?
  • how use phantomjs screenshot the whole page
  • set timezone for Nreco phantomjs wrapper
  • When running karma locally, phantomjs won't start
  • Multiple PhantomJS instances hanging
  • How does PhantomJS' Mongoose web server handle routing?
  • How to pass arguments to a PhantomJS script from Selenium/Ghostdriver
  • RequireJS errors in PhantomJS but not Chrome/FireFox
  • phantomjs incorrect pdf rendering
  • PhantomJS not playing nice with RequireJS+Jasmine
  • selenium-webdriver + phantomjs, ajax nodejs
  • Array Index out of bounds exception -1 when switching iframes using PhantomJS headless browser
  • node script with phantomjs lib hangs and no error
  • How do I set proxy in phantomjs
  • How to use log4javascript with ScalaJS / PhantomJS
  • phantomjs doesn't show rendered page
phantomjs list of languages used
Other projects in HTML