2012-06-28 7 views
9

Ich versuche CasperJS zu verwenden, um eine Website zu scrappen, die dynamischen Inhalt hat und bisher versagt. Die Website verwendet einige js-Bibliotheken (z. B. Prototyp), um die automatische Vervollständigung zum Erstellen von Inhalten zu verwenden. Ich versuche daher, einige Werte einzufügen und Ereignisse auszulösen, um die Erstellung des Inhalts zu verhindern. Das Einfügen und Auslösen von Ereignissen funktioniert einwandfrei, es wird jedoch kein Inhalt erstellt.injectJs mit PhantomJs und CasperJs

Ich bin neu in CasperJS und festgestellt, dass es Probleme mit relativen Pfaden zu den Bibliotheken hat. Ich vermute, dass mein Problem dadurch entsteht, dass die Bibliotheken in meiner Seitenumgebung nicht richtig geladen werden. Ich versuchte daher injectJs verwenden sie wie folgt casper

// ... erstellen zu injizieren und einige andere Sachen

casper.then tun (function() {

this.echo(this.page.injectJs('http://www.my-website.com/path/to/js1')); 
this.echo(this.page.injectJs('http://www.my-website.com/path/to/js2')); 

}); 

Leider gibt dies für beide Funktionen false zurück Der Pfad zum Skript ist korrekt, wo sonst könnte die Wurzel dieses Problems sein

Vielen Dank yo Dir sehr für jede Hilfe.

Antwort

4

Ich glaube nicht, dass CasperJS HTTP-Anfragen zur Injektion von Skripten verarbeiten kann. Das ist komisch, weil sie dies tatsächlich zeigen in their FAQ on including jQuery. Jedoch sagt die gleichen FAQ folgend:

Sie keine Skripts über das HTTP-Protokoll injizieren, die Sie tatsächlich zu einen relativen/absoluten Dateisystem Pfad zur Skript-Ressource verwenden.

Nur um zu überprüfen, habe ich es selbst mit Mac OS X und Ihrem obigen Code versucht. Die Ergebnisse von Echo waren false bei Verwendung einer Datei über http und true, wenn es lokal war.

+0

Dank. Ich denke, der beste Weg ist, die Skripte herunterzuladen und sie dann aus lokalen Pfaden einzubinden. – Marco

+3

Für die Aufzeichnungen habe ich die Dokumentation entsprechend aktualisiert, Entschuldigung für diesen Fehler. – NiKo

+0

Ich denke, Sie können 'remoteScripts' verwenden, um nicht-lokale Skripte jetzt zu injizieren. – wildpeaks

1

das ist, wie ich JQuery in Casperjs Skript

casper.options.clientScripts = ["jquery-3.2.1.min.js"] 

Jquery-Datei auf demselben Verzeichnis Injizieren sein sollte, wo casperjs Skript exisit