节点模块“请求”返回不完整的HTML

问题描述:

我希望使用下面的代码段中的刮刀拉网络上从远程无线电统计:节点模块“请求”返回不完整的HTML

var request = require('request'); 
var radioURL = '192.10.1.65'; 
request.get({ 
    url: pageURL 
}, (error, response, html) => { 
    console.log(html); 

控制台输出以下HTML:

<html> 
<head> 
<link rel="stylesheet" type="text/css" href="2.22.css"> 
<script type="text/javascript" src="2.22.js">"></script> 
</head> 
<body onLoad="show('viewPage=10');"> 
    <div id="logo"><img src="logo.jpg"></div> 
    <div id="menu"></div> 
    <div id="reboot"><center><input type="button" value="Reboot" onclick="javascript:show('reboot=1');"></center></div> 
    <div id="info"></div> 
    <div id="header"></div> 
    <div id="content"></div> 
</body> 

有效载荷我很感兴趣,解析出驻留在div标签中使用id =“内容”。里面有一个表格,里面的表格是一张表格,里面包含了我所有的数据。下图显示了对扩展页面的检查,以查看td标签中相应值的“电压”。我在请求中尝试了不同的头部组合,以及超时认为网络延迟是问题的一部分。我如何获得div元素下面的元素?

谢谢。

inspection of elements below div element

调用request.get()检索Web服务器发送给浏览器的RAW HTML。这就是你得到的。如果您在查看该页面的同时在浏览器中执行查看/源代码,则这与您将看到的内容相同。

如果网页的构建方式是使用Javascript向页面添加内容,那么您将不会看到request.get()的新内容,因为在使用request.get()检索数据时没有运行Javascript。您只是对服务器执行HTTP请求并获取原始页面内容。

如果你想访问通过Javascript添加的内容,那么你需要使用通常所说的“无头浏览器”,它可以获取RAW HTML,在页面中运行Javascript并为您提供DOM-用于访问使用Javascript插入的内容。

您可以在这里看到可以在nodejs中使用的无头浏览器模块列表:https://github.com/dhamaniasad/HeadlessBrowsers。我对他们中的任何人都没有亲身经历,但是我在这里看到的堆栈溢出最多的是Nightmare,X-Ray和PhantomJS。

对于站点刮,我是X射线的一个巨大的倡导者。它是有据可查的,但在你的情况,你会去基本上

xray('http://192.10.1.65', 'form-elements-you-are-targetting')(fn) 

https://github.com/matthewmueller/x-ray

这是非常,非常好。