2013-05-27 8 views
13

Ich benutze CasperJS, um einige Seiten zu überprüfen und JSON-Daten in eine Datei zu schreiben. Die Datei sollte in den Ordner public/data geschrieben werden. Aber wenn ich versuche, casperjs außerhalb meines Projektverzeichnisses (z. B. mein Heimatverzeichnis) aufzurufen, schreibt es Datei direkt in ~/public/data, nicht in meinem Projektverzeichnis.So erhalten Sie das aktuell ausgeführte Dateiverzeichnis in CasperJS

Wie soll ich dieses Problem lösen? Ich habe nicht gefunden, wie man __dirname oder __dateiname bekommt.

+0

Do Sie haben Beispielcode, mit dem Sie gearbeitet haben? – imjared

+0

Hallo, InviS. Wurde das ausreichend beantwortet? Könnten Sie so freundlich sein, eine Antwort darauf zu markieren? Vielen Dank! – Morgon

Antwort

2

Sie können das FileSystem-Modul von phantomJS verwenden.

Da CasperJS über PhantomJS gebaut wurde, können Sie Phantom-Module in Ihre CasperJS-Skripte integrieren.

Versuche:

//require a reference to the fs module 
var fs = require('fs'); 
... 
//changes the current workingDirectory to the specified path. 
fs.changeWorkingDirectory('/your/path') 

vollständige Dokumentation über Filesystem-Modul here

19

ich genau dieses Problem hatte; eine Datei in einem Pfad relativ zum Ort des Skripts benötigen. Mit ein wenig (sprich: viel) Bastelei, konnte ich folgendes erzeugen:

// Since Casper has control, the invoked script is deep in the argument stack 
var currentFile = require('system').args[3]; 
var curFilePath = fs.absolute(currentFile).split('/'); 

// I only bother to change the directory if we weren't already there when invoking casperjs 
if (curFilePath.length > 1) { 
    curFilePath.pop(); // PhantomJS does not have an equivalent path.baseName()-like method 
    fs.changeWorkingDirectory(curFilePath.join('/')); 
} 

Dies ermöglicht es mir zu fs.read() und spawn Dateien mit relativen Pfaden. Vielleicht auch require(), ich hatte einfach kein Modul, um es zu testen.

Hoffe, das ist hilfreich!

+0

Wusste nicht über 'require ('system'). Args' – Deviljho

+2

Dies erfordert offensichtlich' var fs = require ('fs'); ' –

2

Meine Lösung:

var system = require('system') 
var absoluteFilePath = system.args[4]; 
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', ''); 

Um System args zu überprüfen:

console.log(system.args) 
0

Sie eine Antwort geben für eine bestimmte casperjs mit 4 Argumenten aufrufen. Die allgemeine Lösung ist das letzte Argument als absoluteFilePath nehmen

var system = require('system') 
var absoluteFilePath = system.args[system.args.length-1]; 
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', ''); 
+0

In meiner Einstellung sehe ich nicht, dass absoluteFilePath der letzte Index im System ist .args. Im Gegenteil, es scheint mir das vierte Element zu sein –

1

Alles, was Sie brauchen, zu verwenden ist phantomjs fs:

Grundsätzlich Sie an Ihrem Projekt als vollständigen Pfad festlegen:

var fs = require('fs'); 
console.log(fs.workingDirectory); 
// output "F:/path/to/your/project" 
Verwandte Themen