Kann phantomjs mit node.js arbeiten?

Möchte ich nutzen, phantomjs in meinem node.js script. es ist ein phantomjs-Knoten Bibliothek.. aber leider ist der Autor benutzt dieses komische Kaffee-script-code, um zu erklären, was er tut:

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()

nun, wenn ich waren zu verwenden, phantomjs direkt mit javascript, es würde Aussehen wie diese:

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

also grundsätzlich bin ich versucht zu schreiben, das äquivalent der ersten code-snippet oben in der normalen javascript (durch das Lesen der Kaffee Skript Dokumentation.. dies ist, was ich getan habe:

//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();
});

leider funktioniert es nicht! Wenn ich

node phantomTest.js

auf der Schale, es passiert nichts.. gar nichts gibt und der Prozess nicht stoppen.. irgendwelche Ideen?

update:

Ich habe gerade gelesen das in der phantomjs faq:

Q: Warum ist PhantomJS nicht geschrieben Node.js Modul?

A: Die kurze Antwort lautet: "niemand kann zwei Herren dienen."

Einer längeren Erklärung ist wie folgt.

Als jetzt, es ist technisch sehr anspruchsvoll, so zu tun.

Jeder Node.js Modul ist im wesentlichen "ein Sklave" der Kern Node.js,
also "der Meister". In seinem aktuellen Zustand, PhantomJS (und den darin enthaltenen
WebKit) haben muss, um die volle Kontrolle (in einem synchronen Materie) über
alles: event-loop, Netzwerk-stack und die Ausführung von JavaScript.

Wenn die Absicht ist, nur über die Verwendung von PhantomJS direkt aus einem Skript
bei der Ausführung in Node.js eine solche "lockere Bindung" kann erreicht werden durch
die Einleitung einer PhantomJS-Prozess und mit ihm zu interagieren.

mmm.. könnte das etwas damit zu tun haben? aber dann, die ganze Bibliothek wäre nicht sinnvoll!

update 2:

Fand ich diesen code in der webdie tut die gleiche Sache:

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();
      });
    });
  });
});

leider nicht funktioniert entweder.. gleiche Ergebnis!

InformationsquelleAutor der Frage abbood | 2013-04-01

Schreibe einen Kommentar