PhantomJS无法打开本地文件

时间:2013-11-12 20:17:03

标签: phantomjs

我正在尝试使用PhantomJS(版本1.9.2)打开本地HTML文件:

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无法打开它! 有什么建议吗?

3 个答案:

答案 0 :(得分:54)

PhantomJS可以毫无问题地打开本地文件。该网址必须遵循经典的Url / Uri规则,尤其是local file

/Full/Path/To/test.html对PhantomJS无效。它是本地文件还是Web资源?

根据路径,尝试使用以下内容:

file:///C:/Full/Path/To/test.html

或者它是否托管在网络服务器中:

http://localhost/Full/Path/To/test.html

答案 1 :(得分:4)

@Cyber​​maxs的补充回答:如果您需要将简单的相对路径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,因为它基于pathprocess,但在PhantomJS中无效。幸运的是,fs模块提供了类似的功能。

答案 2 :(得分:0)

从幻影2.1.1(可能更早)开始,OP描述的方法实际上是按照书面形式工作的。