J'utilise Nightmare.js (v2.3.3) pour automatiser une partie de mon flux de travail où je dois accéder à un site Web qui met à jour notre base de données. J'ai pu faire fonctionner Nightmare pour des choses de base comme .type
, .click
, et .screenshot
pour valider que j'accède à ces pages et que je saisis les informations que je voulais.Est-il possible de passer des informations du navigateur à la portée du nœud en utilisant Nightmare.js (v2 Electron)?
Où j'ai été bloqué, et la documentation semble manquer, utilise .evaluate
pour extraire des informations de la page. Dans la documentation, il a comme:
.evaluate(fn [,arg1,arg2,...])
var selector = 'h1';
var text = yield nightmare
.evaluate(function (selector) {
// now we're executing inside the browser scope.
return document.querySelector(selector).innerText;
}, selector); // <-- that's how you pass parameters from Node scope to browser scope
Tout cela est bien beau, mais est-il réellement possible d'aller la direction opposée et transmettre des informations de portée du navigateur vers le nœud champ? Ce que je voudrais faire est de retourner toutes les cases d'une page en tant que tableau, puis de les parcourir dans le script Nightmare. J'ai aussi cherché parmi de nombreux problèmes GitHub et questions StackOverflow pour trouver une réponse, et le problème semble être que les versions précédentes ont été construites à partir de PhantomJS et v2 + utilise Electron, il est donc difficile de distinguer quelles réponses s'appliquent encore à la version actuelle. Here est une réponse qui a semblé avoir du sens pour moi, mais c'était en 2014 donc je pense que c'était probablement une version de PhantomJS. Pour référence, voici l'extrait qui semblait avoir une réponse sur la façon de transférer du navigateur à la portée du Noeud:
var p1=1,
p2 = 2;
nightmare
.evaluate(function(param1, param2){
//now we're executing inside the browser scope.
return param1 + param2;
}, function(result){
// now we're inside Node scope again
console.log(result);
}, p1, p2 // <-- that's how you pass parameters from Node scope to browser scope
) //end evaluate
.run();
Mais il ne semble pas que la version actuelle de Nightmare prend en charge ce format .evaluate(fn, cb, arg1, arg2,...)
?
Je voudrais juste savoir si c'est possible avant que je me rends fou! Merci pour toute aide, s'il vous plaît laissez-moi savoir si vous avez besoin d'informations supplémentaires pour aider à répondre.
Je ne comprends pas. Dans votre premier extrait, 'text' devrait contenir la valeur qui a été transmise du contexte de la page au contexte du noeud, n'est-ce pas? Le fait? –
@ArtjomB. pas de ma compréhension. 'Cédez au cauchemar 'commence juste l'instance de cauchemar pour suivre la chaîne d'instructions. – rynjwssl