2016-11-11 1 views
0

Je viens de commencer à utiliser cauchemar. Je l'utilisais sur ma page Web à des fins de test.Effectuez une opération de clic successivement sur la liste dynamique des éléments sélectionnés dans le cauchemar js

J'ai l'interface utilisateur suivante.

Menu

tab1 | tab2 | tab3 ...... (onglets) générées dynamiquement

conteneur div pour onglet sélectionné

 selected tab data 

I a l'élément de dom qui contient le menu.

Je ne sais pas comment effectuer, cliquez sur chaque onglet et obtenir les données de l'onglet sélectionné. Après avoir lu les documents, je ne pouvais pas comprendre cela, ni aucun exemple pour cela.

j'ai pu faire que cela -

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

nightmare 
    .goto('http://www.example.com') 
    .wait('#menu') 
    .evaluate(function() { 
     var menuDiv = document.querySelector('div#menu.content-disp'); 
     var menuAnchors = menuDiv.querySelectorAll('a[href]'); 

     var res = ""; 
     for(var i =0;i<menuAnchors.length;i++){ 
      res+=menuAnchors[i].innerText; 
     } 

     return res; 
    }) 
    .end() 
    .then(function (result) { 
     console.log(result) 
    }) 
    .catch(function (error) { 
    console.error('Search failed:', error); 
    }); 

J'utilise cauchemar Version

"dependencies": { 
    "nightmare": "^2.8.1" 
    } 

Répondre

1

Une fois que vous avez construit la liste des points d'ancrage, vous devrez parcourir eux, qui avec Promises est une tâche non triviale. Considérez ce qui suit, qui itère sur vos résultats et obtient le titre de chaque page:

nightmare.then((result) => 
    result.reduce(function(accumulator, url) { 
    return accumulator.then(function(results) { 
     return nightmare.goto(url) 
     .wait('body') 
     .title() 
     .then(function(result){ 
      results.push(result); 
      return results; 
     }); 
    }); 
    }, Promise.resolve([])).then(function(results){ 
    console.dir(results); 
}); 

Vous pouvez donner une lecture "Asynchronous Operations and Loops" at nightmare-examples. Cela devrait vous aider à démarrer.

+0

C'est fantastique. C'est votre réponse m'a aidé http://stackoverflow.com/questions/38772060/moving-between-pages-and-scraping-as-i-go-with-nightmare/38808596#38808596. Et cela devrait être dans le document officiel me lire sur le github de cauchemar - "Opérations asynchrones et boucles" à cauchemar-exemples. – WitVault

+1

@WitVault Je pense que je vais ajouter une branche de pages github à Nightmare et fusionner la plupart, sinon tous les 'exemples de cauchemar 'dans un avenir proche. – Ross

+0

Ce serait vraiment utile. Êtes-vous un contributeur à cauchemar js? – WitVault