使用NodeJS从外部页面返回Javascript变量数据

使用NodeJS从外部页面返回Javascript变量数据,javascript,html,node.js,Javascript,Html,Node.js,我试图向页面发送请求并获取整个DOM。基本上是爬行。在这个网站上,有一个变量与一些数据一起直接加载到HTML(不是脚本文件)中。使用我的NodeJS后端(与一起使用),我将如何请求此页面并返回变量的数据?下面是一个例子: var my_var={ 标题:“好标题”, 描述:“很好的描述”, 页码:5 }; 如果我访问网站,打开控制台并键入my_var我可以在控制台中看到内容,因此它是一个全局变量 我怎么能做这样的事?如果需要,我可以使用另一个请求库。您正在寻找jsdom: constdom

我试图向页面发送请求并获取整个DOM。基本上是爬行。在这个网站上,有一个变量与一些数据一起直接加载到HTML(不是脚本文件)中。使用我的NodeJS后端(与一起使用),我将如何请求此页面并返回变量的数据?下面是一个例子:


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;