2017-10-19 9 views
0
var phantom = require('phantom'); 

phantom.create() 
     .then(function (ph) { 
      _ph = ph; 
      return ph.createPage(); 
     }) 
     .then(function(page) { 
      _page = page; 
      url = "http://www.aeiou.pt"; 
      return page.open(url); 
     }) 
     .then(function(page) { 

     console.log("hello3"); 
      page.evaluate(function() { 

Mon code commence par quelque chose comme ceci. Le console.log "hello3" est imprimé mais, il me donne l'erreur:PhantomJS - page.evaluate n'est pas une fonction

TypeError: page.evaluate is not a function at /home/someone/server123.js:58:11 at at process._tickCallback (internal/process/next_tick.js:188:7)

Pourquoi il arrive dans cette situation?

version Noeud: v8.6.0

version Npm: 5.3.0

version Phantom: [email protected]

Répondre

2

Le problème que vous rencontrez est que page.open() ne retourne pas la page - - Il retourne le statut. Donc, la valeur transmise au prochain then() est l'état, que vous essayez d'appeler évaluer sur cela. Cela, bien sûr, ne fonctionne pas. La façon dont ils traitent cela dans leur example est d'avoir une variable de page en dehors de la chaîne then() à laquelle ils peuvent accéder à l'intérieur de then(). Vous le faites presque avec _page = page; Si _page est défini en dehors de la fonction, vous devriez pouvoir appeler _page.evaluate() plutôt que de l'appeler sur la valeur de retour de open().

var phantom = require('phantom'); 
var _page; 

phantom.create() 
    .then(function (ph) { 
     _ph = ph; 
     return ph.createPage(); 
    }) 
    .then(function(page) { 
     _page = page; 
     url = "http://www.aeiou.pt"; 
     return page.open(url); 
    }) 
    .then(function(status) { 
     // check status for errors here 
     console.log("hello3"); 
     _page.evaluate(function() { 
+0

Oui, c'est ça! Merci! – PRVS

+0

ma question est résolue mais maintenant, à l'intérieur _page.evaluate (function() {Je ne peux rien imprimer, il semble qu'il y ait une erreur ... J'ai essayé de lancer une erreur mais sans succès – PRVS

+0

Ouais, c'est quelque chose qui est un peu compliqué - le code que vous lancez dans 'evaluate()' est exécuté dans le contexte de la page que vous évaluez Il y a un bon fil de discussion ici: https://stackoverflow.com/questions/ 16701208/phantomjs-page-evaluate-not-logging-on-console –