JSDOM 不返回网页上的所有元素

问题描述

我正在尝试制作一个相当简单的网络爬虫,但 JSDOM 似乎无法正常工作。这是我用于刮板的代码

const axios = require("axios");
const jsdom = require("jsdom");
const { JSDOM } = jsdom;

let v = "15";

axios.get("https://adoptopenjdk.net/releases.html?variant=openjdk" + v + "&jvmVariant=hotspot")
.then(function (response) {
  const dom = new JSDOM(response.data,{ runScripts: "dangerously",resources: "usable",pretendToBeVisual: true });
  console.log(dom.window.document.querySelector('title').textContent);
  let a = [...dom.window.document.querySelectorAll('a')];
  let osList = [...dom.window.document.getElementsByClassName('os')];
  let archList = [...dom.window.document.querySelectorAll('.arch')];
  let downloadLinks = [...dom.window.document.querySelectorAll('.main-download__variant__sub-table__download')];
  console.log(a);
  console.log(osList);
  console.log(archList);
  console.log(downloadLinks);
})
.catch(function (error) {
  console.log(error);
});

理论上,这应该返回以下内容

Expected Output

但它返回大约一半的锚元素,而不返回任何其他元素:

enter image description here

我唯一的理论是它没有运行脚本,但这毫无意义,因为我明确告诉它 ({ runScripts: "dangerously",pretendToBeVisual: true })。

我终其一生都无法弄清楚为什么这行不通。

解决方法

查看对原始问题的评论。异端猴子建议使用他们的 API 是正确的答案。