peut travailler avec phantomjs node.js?

Je voudrais l'utiliser dans mon phantomjs node.js script. il y a un phantomjs-nœud bibliothèque.. mais, malheureusement, l'auteur a utilisé cette étrange café du code de script pour expliquer ce qu'il fait:

phantom = require 'phantom'

phantom.create (ph) ->
  ph.createPage (page) ->
    page.open "http://www.google.com", (status) ->
      console.log "opened google? ", status
      page.evaluate (-> document.title), (result) ->
        console.log 'Page title is ' + result
        ph.exit()

maintenant, si je devais utiliser phantomjs directement avec javascript, il ressemblerait à quelque chose comme cette:

var page = require('webpage').create();
page.open(url, function (status) {
    var title = page.evaluate(function () {
        return document.title;
    });
    console.log('Page title is ' + title);
});

donc, fondamentalement, je suis en train d'écrire l'équivalent du premier extrait de code ci-dessus en javascript normale (à la lecture du café script la documentation.. c'est ce que j'ai fait:

//file name: phantomTest.js

var phantom = require('phantom');

phantom.create(function(ph) {
    ph.createPage(function(page) {
        page.open('http://www.google.com', function(status) {
            console.log('opened google?', status);
            var title = page.evaluate(function() {
                return document.title;
            });
            console.log('page title is ' + title);              
        });
    });
    ph.exit();
});

malheureusement ça ne fonctionne pas! Si je lance

node phantomTest.js

sur la coque, rien ne se passe.. rien de revient et le processus ne s'arrête pas.. des idées?

mise à jour:

Je viens de lire dans le phantomjs faq:

Q: Pourquoi est-PhantomJS pas écrit comme Node.js module?

Un: La réponse courte: "nul Ne peut servir deux maîtres."

Une explication plus longue est comme suit.

Comme de maintenant, il est techniquement très difficile à faire.

Chaque Node.js le module est essentiellement "un esclave" à la base de Node.js,
c'est à dire "le maître". Dans son état actuel, PhantomJS (et ses
WebKit) doit avoir le contrôle total (en mode synchrone question) plus
tout: boucle d'événement, le réseau de la pile, et l'exécution de JavaScript.

Si l'intention est simplement sur l'utilisation de PhantomJS droite à partir d'un script
cours d'exécution dans Node.js ce "lâche" liaison peut être réalisée par
le lancement d'un PhantomJS processus et d'interagir avec elle.

mmm.. cela pourrait-il avoir quelque chose à faire avec elle? mais alors que l'ensemble de la bibliothèque ne serait pas de bon sens!

mise à jour 2:

J'ai trouvé ce code dans les web qui fait la même chose:

var phantom = require('phantom');
phantom.create(function(ph) {
  return ph.createPage(function(page) {
    return page.open("http://www.google.com", function(status) {
      console.log("opened google? ", status);
      return page.evaluate((function() {
        return document.title;
      }), function(result) {
        console.log('Page title is ' + result);
        return ph.exit();
      });
    });
  });
});

malheureusement, cela ne fonctionne pas non plus.. même résultat!

  • L'appel de quelque chose de "stupide" parce que vous ne comprenez pas comment il fonctionne et/ou vous ne pouvez pas le faire fonctionner dans votre cas est de la plaine impoli.
  • Aussi, il y a github.com/sheebz/phantom-proxy qui est plus recommandés que d'autres Node.js les ponts. Les gens ont été en utilisant transition PhantomJS avec Ruby, PHP, Node.js avec plus ou moins de succès.
  • Je m'excuse pour mon libellé forte, je vais prendre la question.. je vais aussi jeter un oeil à phantom-proxy.. à la fin de la journée, mon but est de faire fonctionner les choses, ce n'est pas pour rabaisser les autres personnes de l'effort.
  • C'est obsolète et devrait être édité ou supprimé. Elle ne reflète pas la dernière phantomjs-node package et ses capacités.
InformationsquelleAutor abbood | 2013-04-01