如何在CasperJS中获取当前执行的文件目录

时间:2013-05-27 08:21:29

标签: phantomjs casperjs

我正在使用CasperJS检查某个站点并将JSON数据写入文件。文件应写入public/data文件夹。但是当我试图在我的项目目录(例如我的主目录)之外调用casperjs时,它会直接在~/public/data中写入文件,而不是在我的项目目录中。

我该如何解决这个问题?我还没有找到如何获取__dirname或__filename。

5 个答案:

答案 0 :(得分:20)

我有这个问题;需要相对于脚本所在位置的路径中的文件。 通过一点点(阅读:大量)修补,我能够产生以下内容:

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

这允许我使用相对路径来fs.read()spawn个文件。也许是require(),我只是没有一个模块来测试它。

希望这有用!

答案 1 :(得分:2)

您可以使用phantomJS的FileSystem模块。

因为CasperJS是基于PhantomJS构建的,所以您可以在CasperJS脚本中包含Phantom的模块。

尝试:

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

有关文件系统模块here

的完整文档

答案 2 :(得分:2)

我的解决方案:

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

检查系统参数:

console.log(system.args)

答案 3 :(得分:1)

您需要的只是使用phantomjs fs

基本上,您可以将项目设置为完整路径:

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

答案 4 :(得分:0)

您使用4个参数为特定的casperjs调用提供答案。 一般的解决方案是将最后一个参数作为absoluteFilePath

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