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

Phantomjs 如何在CasperJS中获取当前执行的文件目录,phantomjs,casperjs,Phantomjs,Casperjs,我正在使用CasperJS检查一些站点并将JSON数据写入一个文件。文件应写入public/data文件夹。但是当我试图在我的项目目录(例如我的主目录)之外调用casperjs时,它直接在~/public/data中写入文件,而不是在我的项目目录中 我应该如何解决这个问题?我还没有找到如何获取u dirname或u filename。您可以使用phantomJS的文件系统模块 因为CasperJS是在PhantomJS之上构建的,所以可以在CasperJS脚本中包含Phantom的模块 尝试:

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


我应该如何解决这个问题?我还没有找到如何获取u dirname或u filename。

您可以使用phantomJS的文件系统模块

因为CasperJS是在PhantomJS之上构建的,所以可以在CasperJS脚本中包含Phantom的模块

尝试:

//需要对fs模块的引用
var fs=需要('fs');
...
//将当前工作目录更改为指定路径。
fs.changeWorkingDirectory(“/your/path”)

关于文件系统模块的完整文档

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

//由于Casper拥有控制权,因此调用的脚本位于参数堆栈的深处
常量args=require('system')。args;
var currentFile=args[args.length-1];
var curFilePath=fs.absolute(currentFile.split('/');
//我只是在调用casperjs时,如果我们还不在那里,就麻烦更改目录
如果(curFilePath.length>1){
curFilePath.pop();//PhantomJS没有等效的path.baseName()类方法
changeWorkingDirectory(curFilePath.join('/');
}
这允许我使用相对路径
fs.read()
生成
文件。也许
require()
也是如此,我只是没有一个模块来测试它

希望这是有帮助的

我的解决方案:

var system = require('system')
var absoluteFilePath = system.args[4];
var absoluteFileDir = absoluteFilePath.replace('{your_file_name}', '');
要检查系统参数,请执行以下操作:

console.log(system.args)

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

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

您只需使用:

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

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

你有你一直在使用的示例代码吗?你好,InviS。答案是否充分?请你在这上面注明答案好吗?非常感谢。不知道
require('system')。args
这显然需要
var fs=require('fs')
在我的设置中,我没有看到absoluteFilePath是system.args中的最后一个索引。相反,在我看来,它似乎是第四要素