Need advice about which tool to choose?Ask the StackShare community!
PhantomJS vs jsdom: What are the differences?
What is PhantomJS? Scriptable Headless WebKit. PhantomJS (www.phantomjs.org) is a headless WebKit scriptable with JavaScript. It is used by hundreds of developers and dozens of organizations for web-related development workflow.
What is jsdom? A JavaScript implementation of the WHATWG DOM and HTML standards, for use with node.js. It is a pure-JavaScript implementation of many web standards, notably the WHATWG DOM and HTML Standards, for use with Node.js. In general, the goal of the project is to emulate enough of a subset of a web browser to be useful for testing and scraping real-world web applications.
PhantomJS and jsdom can be primarily classified as "Headless Browsers" tools.
Some of the features offered by PhantomJS are:
- 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 Iron.io.
On the other hand, jsdom provides the following key features:
- Canvas support
- Encoding sniffing
- Closing down a jsdom
PhantomJS and jsdom are both open source tools. PhantomJS with 27K GitHub stars and 5.73K forks on GitHub appears to be more popular than jsdom with 12.9K GitHub stars and 1.16K GitHub forks.
I am using Node 12 for server scripting and have a function to generate PDF and send it to a browser. Currently, we are using PhantomJS to generate a PDF. Some web post shows that we can achieve PDF generation using Puppeteer. I was a bit confused. Should we move to puppeteerJS? Which one is better with NodeJS for generating PDF?

You better go with puppeteer. It is basically chrome automation tool, written in nodejs. So what you get is PDF, generated by chrome itself. I guess there is hardly better PDF generation tool for the web. Phantomjs is already more or less outdated as technology. It uses some old webkit port that's quite behind in terms of standards and features. It can be replaced with puppeteer for every single task.

I suggest puppeteer to go for. It is simple and easy to set up. Only limitaiton is it can be used only for chrome browser and currently they are looking into expanding into FF. The next thing is Playwright which is just a scale up of Puppeteer. It supports cross browsers.
Pros of jsdom
Pros of PhantomJS
- Scriptable web browser13
- Depends on QT3
- No ECMAScript 62