JSDOM 不返回网页上的所有元素
JSDOM not returning all elements on webpage
我正在尝试制作一个相当简单的网络爬虫,但 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);
});
理论上,这应该return如下:
但它 return 大约一半的锚元素,none 其他元素:
我唯一的理论是它不是 运行 脚本,但这没有任何意义,因为我明确告诉它 ({ runScripts: "dangerously", resources: "usable", pretendToBeVisual: true }
)。
我这辈子都想不通为什么这行不通。
查看原问题的评论。 Heretic Monkey 建议使用他们的 API 是正确答案。
我正在尝试制作一个相当简单的网络爬虫,但 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);
});
理论上,这应该return如下:
但它 return 大约一半的锚元素,none 其他元素:
我唯一的理论是它不是 运行 脚本,但这没有任何意义,因为我明确告诉它 ({ runScripts: "dangerously", resources: "usable", pretendToBeVisual: true }
)。
我这辈子都想不通为什么这行不通。
查看原问题的评论。 Heretic Monkey 建议使用他们的 API 是正确答案。