
jsdom
jsdom 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.
The latest versions of jsdom require newer Node.js versions; see the package.json "engines" field for details.
Basic usage
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
To use jsdom, you will primarily use the JSDOM constructor, which is a named export of the jsdom main module. Pass the constructor a string. You will get back a JSDOM object, which has a number of useful properties, notably window:
const dom = new JSDOM(<!DOCTYPE html><p>Hello world</p>);
console.log(dom.window.document.querySelector("p").textContent); // "Hello world"
(Note that jsdom will parse the HTML you pass it just like a browser does, including implied , , and tags.)
The resulting object is an instance of the JSDOM class, which contains a number of useful properties and methods besides window. In general, it can be used to act on the jsdom from the "outside," doing things that are not possible with the normal DOM APIs. For simple cases, where you don't need any of this functionality, we recommend a coding pattern like
const { window } = new JSDOM(...);
// or even
const { document } = (new JSDOM(...)).window;
Full documentation on everything you can do with the JSDOM class is below, in the section "JSDOM Object API".
Customizing jsdom
The JSDOM constructor accepts a second parameter which can be used to customize your jsdom in the following ways.
Simple options
const dom = new JSDOM(`, {
url: "https://example.org/",
referrer: "https://example.com/",
contentType: "text/html",
includeNodeLocations: true,
storageQuota: 10000000
});
- url
sets the value returned bywindow.location,document.URL, anddocument.documentURI, and affects things like resolution of relative URLs within the document and the same-origin restrictions and referrer used while fetching subresources. It defaults to"about:blank". - referrer
just affects the value read fromdocument.referrer. It defaults to no referrer (which reflects as the empty string). - contentType
affects the value read fromdocument.contentType, as well as how the document is parsed: as HTML or as XML. Values that are not a HTML MIME type or an XML MIME type will throw. It defaults to"text/html". If acharsetparameter is present, it can affect binary data processing. - includeNodeLocations
preserves the location info produced by the HTML parser, allowing you to retrieve it with thenodeLocation()method (described below). It also ensures that line numbers reported in exception stack traces for code running insideChat with me