web-dev-qa-db-fra.com

PhantomJS ne parvient pas à ouvrir le fichier local

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?

33
AvL

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
54
Cybermaxs

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.

4
bluenote10

À partir de la version 2.1.1 (éventuellement antérieure), la méthode décrite par OP fonctionne en fait comme elle est écrite.

0
chiliNUT