节点模块'request'返回不完整的html

时间:2017-10-12 01:28:05

标签: node.js request

我希望在刮刀中使用以下代码段从网络上的远程无线电中提取统计数据:

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>

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

感谢。

inspection of elements below div element

2 个答案:

答案 0 :(得分:0)

对于网站抓取,我是X射线的大力倡导者。这是有据可查的,但在你的情况下你基本上会去

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

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

非常非常好。

答案 1 :(得分:0)

request.get()的调用将检索Web服务器发送到浏览器的RAW HTML。这就是你得到的。如果您在查看该页面时在浏览器中执行查看/来源,那么您将会看到同样的事情。

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

如果您想要访问通过Javascript添加的内容,那么您需要使用通常称为&#34;无头浏览器&#34;可以获取RAW HTML,在页面中运行Javascript,并为您提供类似DOM的界面,用于访问使用Javascript插入的内容。

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