34

我正在尝试使用 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 无法打开它!有什么建议么?

4

3 回答 3

54

PhantomJS 可以毫无问题地打开本地文件。url 必须遵循经典的 Url/Uri 规则,尤其是对于本地文件

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

根据路径,只需尝试以下方法:

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

或者如果它托管在 Web 服务器中:

http://localhost/Full/Path/To/test.html
于 2013-11-14T07:15:07.970 回答
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");

请注意,您不能使用基于的解决方案,file-url因为它基于pathand process,这在 PhantomJS 中不起作用。幸运的是,该fs模块提供了类似的功能。

于 2017-05-13T08:41:30.940 回答
0

从 phantom 2.1.1(可能更早)开始,OP 所描述的方法实际上是按照所写的方式工作的。

于 2018-01-18T16:52:58.217 回答