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はそれを開くことができません!助言がありますか?
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
@Cybermaxs回答への追加:単純な相対パス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
モジュールは同様の機能を提供します。
ファントム2.1.1(おそらくそれ以前)の時点では、OPで記述されたメソッドは実際に書かれたとおりに機能します。