Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从node.js中的url获取可视化DOM结构_Node.js - Fatal编程技术网

如何从node.js中的url获取可视化DOM结构

如何从node.js中的url获取可视化DOM结构,node.js,Node.js,我想知道如何从node.js中的url获取“可视化”DOM结构。当我尝试使用库获取html内容时,html结构不正确 const request = require('request'); const jsdom = require("jsdom"); const { JSDOM } = jsdom; request({ 'https://www.washingtonpost.com/news/acts-of-faith/wp/2017/06/30/trump-promised-to-dest

我想知道如何从node.js中的url获取“可视化”DOM结构。当我尝试使用库获取html内容时,html结构不正确

const request = require('request');
const jsdom = require("jsdom");
const { JSDOM } = jsdom;

request({ 'https://www.washingtonpost.com/news/acts-of-faith/wp/2017/06/30/trump-promised-to-destroy-the-johnson-amendment-congress-is-targeting-it-now/', jar: true }, function (e, r, body) {
  console.log(body);
});
重新合并的html结构为,其中元标记不正确:

<meta property="og:title" content=""/>
<meta itemprop="description" name="description" content=""/>

如果我在web浏览器中打开网站,我可以在web inspector中看到正确的元标记:

<meta property="og:title" content="Trump promised to destroy the Johnson Amendment. Congress is targeting it now."/>

<meta itemprop="description" name="description" content="Observers believe the proposed legislation would make it harder for the IRS to enforce a law preventing pulpit endorsements."/>

我可能需要更多关于什么是“可视”DOM结构的说明,但正如一位评论员指出的那样,当一个网站有复杂的加载行为时,像无头浏览器这样的浏览器可能是最好的选择

这里的优点是,至少使用Puppeter,您可以导航到一个页面,然后以编程方式等待某个条件满足后再继续。在本例中,我选择等待,直到您指定的某个meta标记的content属性为truthy,但根据您的需要,您可以等待其他内容,甚至可以等待多个条件为true

您可能需要更深入地分析相关页面的行为,以确定您应该等待什么,但至少以下代码似乎正确地加载了问题中的标记

从“木偶演员”导入木偶演员
(异步()=>{
常量url=https://www.washingtonpost.com/news/acts-of-faith/wp/2017/06/30/trump-promised-to-destroy-the-johnson-amendment-congress-is-targeting-it-now/'
const browser=wait puppeter.launch()
const page=wait browser.newPage()
等待页面。转到(url)
//等待,直到内容属性具有真实值
wait page.waitForFunction(()=>{
return document.querySelector('meta[property=“og:title”]”).getAttribute('content')
})
const html=wait page.content()
console.log(html)
等待浏览器关闭()
})()


此外,由于此解决方案使用Puppeter,我建议不要使用html字符串,而是使用Puppeter API来提取所需的信息。

这可能是因为这些值是由客户端javascript(预渲染)设置的。我会尝试使用无头浏览器,然后在呈现页面后从其API获取HTML。也许这个NPM软件包对你有用,因为我认为它能满足你的需要:@MarcosLuis非常感谢你的回复。我要去看看,让你知道@html get不能生成好的html标记。这是最新的。Html正文为空。我尝试了
prerender:true
,结果是一样的。似乎这是一个复杂的网站,或者他们正在阻止这种导航。我曾尝试使用puppeeter和nickjs获取HTML,但没有成功:/I很抱歉无法提供帮助。@MarcosLuis无论如何感谢您的帮助。如果我找到另一个解决方案,我会把它贴在这里。