我试图打开一个本地的HTML文件,PhantomJS(版本1.9.2):
var page = require('webpage').create(), fs = require('fs'),
address = "/Full/Path/To/test.html";
console.log('isFile? ' + fs.isFile(address));
console.log('isReadable? ' + fs.isReadable(address));
page.open(address, function(status){
console.log('status? ' + status);
console.log(page.content)
phantom.exit();
});
首先,我检查,如果我得到了正确的路径和文件是否可读使用fs.isFile()
&fs.isReadable()
。然后我检查phantomjs是否成功地打开文件(用status
)。独立的文件,我总是得到的实际内容:
isFile? true
isReadable? true
status? fail
<html><head></head><body></body></html>
因此,文件和路径似乎是好的 - 但PhantomJS无法打开它!有什么建议么?
PhantomJS可以打开本地文件没有任何问题。该URL必须遵循经典的URL / URI的规则,尤其是对local file。
/Full/Path/To/test.html
无效PhantomJS。它是一个本地文件或网络资源?
根据不同的道路,只是这样的尝试:
file:///C:/Full/Path/To/test.html
或者,如果它在一个Web服务器的托管:
http://localhost/Full/Path/To/test.html
一个除了@Cybermaxs答案:如果你需要一个简单的相对路径test.html
转换成适当的URL,你可以通过像这样做:
var fs = require('fs');
function getFileUrl(str) {
var pathName = fs.absolute(str).replace(/\\/g, '/');
// Windows drive letter must be prefixed with a slash
if (pathName[0] !== "/") {
pathName = "/" + pathName;
}
return encodeURI("file://" + pathName);
};
var fileUrl = getFileUrl("test.html");
需要注意的是,因为它是基于solution based on file-url
和path
,不PhantomJS内工作,你不能使用process
。幸运的是,fs
模块提供了类似的功能。
作为幻影2.1.1(可能更早)由OP描述的方法实际工作作为写入。