2017-10-12 3 views
0

J'espère utiliser l'extrait suivant dans un grattoir pour tirer des statistiques de radios à distance sur un réseau:« demande » module Node retourne html incomplet

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

La console affiche le code HTML suivant:

<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> 

la charge utile Je suis intéressé par l'analyse syntaxique sur réside dans le balise div id = « contenu ». À l'intérieur il y a un formulaire, et à l'intérieur du formulaire est une table avec toutes les données que je suis après. L'image ci-dessous montre une inspection de la page développée pour voir 'Voltage' avec une valeur correspondante à l'intérieur des balises td. J'ai essayé différents combos d'en-têtes à la demande, ainsi que des délais d'attente pensant que la latence du réseau faisait partie du problème. Comment accéder aux éléments sous l'élément div?

Merci.

inspection of elements below div element

Répondre

0

Un appel à request.get() récupère le code HTML RAW que le serveur Web envoie au navigateur. C'est ce que tu as. Si vous faites View/Source dans le navigateur en regardant cette page, c'est la même chose que vous verrez alors.

Si la page Web est construite de manière à utiliser le Javascript pour ajouter du contenu à la page, vous ne verrez PAS ce nouveau contenu avec request.get() car aucun Javascript n'est exécuté lors de la récupération des données avec request.get(). Vous effectuez simplement une requête HTTP sur le serveur et récupérez le contenu de la page brute. Si vous voulez accéder au contenu qui est ajouté via Javascript, vous devez utiliser ce que l'on appelle souvent un "navigateur sans tête" qui peut extraire le HTML RAW, exécuter le Javascript dans la page et vous donner un DOM- comme interface pour accéder au contenu qui a été inséré avec le Javascript.

Vous pouvez voir une liste de modules de navigation sans tête que vous pouvez utiliser dans nodejs ici: https://github.com/dhamaniasad/HeadlessBrowsers. Je n'ai aucune expérience personnelle avec l'un d'entre eux, mais ceux que je vois le plus mentionné ici sur le débordement de pile sont Nightmare, X-Ray et PhantomJS.

0

Pour le nettoyage du site, je suis un ardent défenseur massif de rayons X. Il est bien documenté, mais dans votre cas, vous allez essentiellement

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

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

Il est très, très, bien.