PhantomJS无法打开本地文件

问题描述 投票:33回答:3

我试图打开一个本地的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
3个回答
54
投票

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

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-urlpath,不PhantomJS内工作,你不能使用process。幸运的是,fs模块提供了类似的功能。


0
投票

作为幻影2.1.1(可能更早)由OP描述的方法实际工作作为写入。

© www.soinside.com 2019 - 2024. All rights reserved.