J'essaie d'ouvrir un fichier HTML local avec PhantomJS (version 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();
});
Je vérifie d’abord si j’ai le bon chemin et si le fichier est lisible avec fs.isFile()
& fs.isReadable()
. Ensuite, je vérifie si phantomjs a réussi à ouvrir le fichier (avec status
). Indépendamment du contenu réel du fichier, je reçois toujours:
isFile? true
isReadable? true
status? fail
<html><head></head><body></body></html>
Donc, le fichier et le chemin semblent être corrects - mais PhantomJS ne parvient pas à l'ouvrir! Des suggestions?
PhantomJS peut ouvrir des fichiers locaux sans aucun problème. Les URL doivent suivre les règles classiques Url/Uri, en particulier pour un fichier local .
/Full/Path/To/test.html
n'est pas valide pour PhantomJS. Est-ce un fichier local ou une ressource Web?
En fonction du chemin, essayez avec quelque chose comme ceci:
file:///C:/Full/Path/To/test.html
ou s'il est hébergé sur un serveur Web:
http://localhost/Full/Path/To/test.html
Un complément à la réponse de @Cybermaxs: Si vous devez convertir un chemin relatif simple test.html
en une URL appropriée, vous pouvez le faire comme suit:
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");
Notez que vous ne pouvez pas utiliser une solution basée sur file-url
car elle est basée sur path
et process
, qui ne fonctionnent pas dans PhantomJS. Heureusement, le module fs
fournit des fonctionnalités similaires.
À partir de la version 2.1.1 (éventuellement antérieure), la méthode décrite par OP fonctionne en fait comme elle est écrite.