web-dev-qa-db-ja.com

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はそれを開くことができません!助言がありますか?

34
AvL

PhantomJSは問題なくローカルファイルを開くことができます。特に ローカルファイル の場合、URLは従来のUrl/Uriルールに従う必要があります。

/Full/Path/To/test.htmlはPhantomJSでは無効です。ローカルファイルですか、それともWebリソースですか?

パスに応じて、次のようなものを試してください。

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

または、Webサーバーでホストされている場合:

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

@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に基づくソリューション は使用できないことに注意してください。これは、PhantomJS内では機能しないpathおよびprocessに基づいているためです。幸い、 fs モジュールは同様の機能を提供します。

4
bluenote10

ファントム2.1.1(おそらくそれ以前)の時点では、OPで記述されたメソッドは実際に書かれたとおりに機能します。

0
chiliNUT