0%

JSDOM の fromURL で User-Agent を設定する

環境

  • JSDOM 19.0.0

方法

ResourceLoader を使用する。

1
2
3
4
5
6
import { JSDOM, ResourceLoader } from "jsdom";
...
const resourceLoader = new ResourceLoader({
userAgent: "Mozilla/5.0",
});
const dom = await JSDOM.fromURL(url, { resources: resourceLoader });

ただし、この方法はリソースの読み込みが発生する。

リソースが不要な場合は、一度だけリソースをフェッチする独自の ResourceLoader を使用する。

注: フェッチされるリソースは fromURLurl

one-time-fetch-resource-loader.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { ResourceLoader } from "jsdom";

export class OneTimeFetchResourceLoader extends ResourceLoader {
constructor(options) {
super(options);
this._fetched = false;
}

fetch(url, options) {
if (this._fetched) {
return null;
}
this._fetched = true;
return super.fetch(url, options);
}
}
1
2
3
4
5
6
7
8
import { JSDOM } from "jsdom";

import { OneTimeFetchResourceLoader } from "./one-time-fetch-resource-loader.js";
...
const resourceLoader = new OneTimeFetchResourceLoader({
userAgent: "Mozilla/5.0",
});
const dom = await JSDOM.fromURL(url, { resources: resourceLoader });