2017-04-04 2 views
0

J'écris un petit script de cauchemar qui tape les noms dans un formulaire Web et lit les résultats imprimés dans un tableau. Je l'ai fait la saisie d'entrée déjà et obtenir les résultats de la table comme celle-ci:Nightmarejs - Comment lire le contenu des lignes de table?

{ jQuery110205953448106032428: 124 } 

Je ne sais pas comment lire les lignes de cet élément.

Mon script actuel est:

const Nightmare = require('nightmare') 
const nightmare = Nightmare({ show: true }) 

nightmare 
    .goto('https://rnped.segob.gob.mx/') 
    .click('small#leyendacomun') 
    .wait(2000) 
    .type('input#comun_c_nombre', 'María') 
    .type('input#comun_c_apaterno', 'Hernández') 
    .click('button#busca_comun') 
    .wait(2000) 
    .evaluate(function() { 
     return document.querySelector('table#t_comun') 
     // Here I select and return the <table> 
    }) 
    .end() 
    .then(function (result) { 
     console.log(result) 
     // Here I get { jQuery110205953448106032428: 124 } 
    }) 
    .catch(function (error) { 
     console.error('Error:', error); 
    }); 

Comment pourrais-je obtenir les lignes de la table de ce sélecteur de requête?

Répondre

0

Le résultat de evaluer ne peut pas être une référence à un élément DOM comme dans votre code. Faites toutes les extractions de données à l'intérieur de votre fonction evaluate(), par exemple, comme ceci:

// ... 
    .wait(2000) 
    .evaluate(function() { 
     // get table and prepare result 
     const table = document.querySelector('table#t_comun'), 
      result = []; 

     // get rows 
     const rows = table.querySelectorAll('tr'); 
     for(let i=0; i<rows.length; i++) { 

     // get cells 
     let cells = rows[i].querySelectorAll('td'); 

     // get contents 
     let row = []; 
     for(j=0; j<cells.length; j++) { 
      row.push(cells[i].innerHTML); 
     } 

     // add to result 
     result.push(row); 
     } 

     // done, return result 
     return result; 
    }) 
    .end() 
    // ... 
+0

Ok, merci beaucoup! Et comment puis-je parcourir toutes les pages de la table des résultats, je dois le faire dans la fonction d'évaluation aussi? – forkfork

+0

Vous pouvez tester dans votre propre navigateur: Écrivez un script qui extrait toutes les données dont vous avez besoin dans un tableau ou un objet. Utilisez ensuite le même code dans la fonction 'evaluate()' et renvoyez les résultats. – Sirko