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 9 months ago
Repo Created almost 8 years ago
Repo Last Updated 8 months 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
Latest Open Source 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)
  • about 2 years Typekit fonts stopped rendering
  • about 2 years Header and footer with different height
  • about 2 years How to build master?
  • about 2 years PhantomJS: How to prevent all page redirects??
  • about 2 years Non-standard NamedNodeMap behaviour
  • about 2 years Regression in encoding.cpp
  • about 2 years Phantomjs crashed, reboot helps for a while
  • about 2 years Performance Log
  • about 2 years render don't work
  • about 2 years Wrong result from regex test
  • about 2 years Phantom JS crashed during a build by Jenkins
  • about 2 years phantomjs hangs while opening the url using selenium?
  • about 2 years fs module not found
  • about 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 ?
  • about 2 years Crash while parsing JSON command
  • about 2 years Failure to render WebP images inside a page
  • about 2 years Not bundled all the javascript in one binary file distribution
  • about 2 years REPL on Windows: Enter key on Numpad does not work
  • about 2 years Syntax Error: Use of reserved word 'class'
  • about 2 years The process of PhantomJS called by PHP under Windows server 2008 is slow
  • about 2 years Phantom.js does not respect iFrames at all
  • about 2 years Missing parentRule and parentStyleSheet attributes on a CSSStyleRule
  • about 2 years After set proxy get like this: <html><head></head><body></body></html>
  • about 2 years The requested URL was rejected. Please consult with your administrator. Your support ID is
  • about 2 years PhantomJS sometime display wrong Arabic characters
  • about 2 years Phantomjs + Nightwatchjs: Not reading raw HTML of SPA
  • about 2 years PhantomJS is not accepting --noproxy in capabilities.
  • about 2 years 2.1.1 port for FreeBSD
  • about 2 years Splits the argument on comma
  • about 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