【问题标题】:PhantomJS fails to open local filePhantomJS 无法打开本地文件
【发布时间】:2013-11-12 20:17:02
【问题描述】:

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

【问题讨论】:

  • 你为什么不像我在这个答案中那样使用 page.onLoadFinished 回调? stackoverflow.com/a/7549515/541404
  • 另外,您使用的是什么操作系统?您可能希望使用fs.separator 来获取适当的文件系统分隔符。例如,如果您在 Windows 中,则分隔符将为“\”,但如果您在 Unix\OS X 变体中,则将使用“/”。
  • 我错过了“file:///”上的第三个“/”。它使幻影给了我成功的地位,但以 为内容。很奇怪。

标签: phantomjs


【解决方案1】:

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

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

根据路径,试试这样的:

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

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

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

【讨论】:

  • @MiguelAlejandroFuentesLopez:Unix 路径不是RFC 3986 中描述的完整统一资源标识符。
【解决方案2】:

@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 模块提供了类似的功能。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-05-02
      • 1970-01-01
      • 2017-06-05
      • 2013-12-05
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 2019-02-27
      • 2013-11-27
      相关资源
      最近更新 更多