使用NodeJS从外部页面返回Javascript变量数据
我试图向页面发送请求并获取整个DOM。基本上是爬行。在这个网站上,有一个变量与一些数据一起直接加载到HTML(不是脚本文件)中。使用我的NodeJS后端(与一起使用),我将如何请求此页面并返回变量的数据?下面是一个例子:使用NodeJS从外部页面返回Javascript变量数据,javascript,html,node.js,Javascript,Html,Node.js,我试图向页面发送请求并获取整个DOM。基本上是爬行。在这个网站上,有一个变量与一些数据一起直接加载到HTML(不是脚本文件)中。使用我的NodeJS后端(与一起使用),我将如何请求此页面并返回变量的数据?下面是一个例子: var my_var={ 标题:“好标题”, 描述:“很好的描述”, 页码:5 }; 如果我访问网站,打开控制台并键入my_var我可以在控制台中看到内容,因此它是一个全局变量 我怎么能做这样的事?如果需要,我可以使用另一个请求库。您正在寻找jsdom: constdom
var my_var={
标题:“好标题”,
描述:“很好的描述”,
页码:5
};
如果我访问网站,打开控制台并键入my_var
我可以在控制台中看到内容,因此它是一个全局变量
我怎么能做这样的事?如果需要,我可以使用另一个请求库。您正在寻找jsdom:
constdom=newjsdom(`
document.body.appendChild(document.createElement(“hr”));
`,{runScripts:“危险的”});
//将执行脚本并修改DOM:
dom.window.document.body.children.length==2;
它还附带了一个虚拟控制台
虚拟控制台
与web浏览器一样,jsdom也有“控制台”的概念。这个记录
这两种信息都是通过执行脚本直接从页面发送的
文档内部以及来自jsdom的信息
执行本身
也许在响应回调中,会出现类似于
eval(body.match(/.*/).join('\n'))
的内容,其中body是回调的第三个参数(根据repo自述文件中的示例)。请使用npm模块Cheerio。@willusdaman所以执行页面上的所有JS到节点后端?当然有更好的办法。@DanielZuzevich Cheerio不能这样做,据我所知。@Mortenmolder肯定有。在我的示例中,我只是想给出可能是最简单的解决方案(并且忽略该方法可怕的安全性影响),如何输入网站的URL并从已知变量中提取数据?获取页面内容并将其放入jsdom中执行。可能在那里添加代码,以将控制台日志添加到虚拟控制台并获得输出。啊,好吧,在我的后端运行未知代码似乎有点“危险”(因此runScripts:“危险地”
)。不过,我想这是可行的。谢谢jsdomgithub页面上有安全指南。我不确定您的具体用例,但我推荐使用jsdom,因为假设脚本正在处理DOM,将输出放在div中,或者您可以在jsdom中得到的东西。
<html>
<head>
<script>
var my_var = {
title: "Good title",
description: "Nice description",
page: 5
};
</script>
</head>
</html>
const dom = new JSDOM(`<body>
<script>document.body.appendChild(document.createElement("hr"));</script>
</body>`, { runScripts: "dangerously" });
// The script will be executed and modify the DOM:
dom.window.document.body.children.length === 2;