Подтвердить что ты не робот

PhantomJS не удается открыть локальный файл

Я пытаюсь открыть локальный HTML файл с помощью PhantomJS (версия 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();
});

Сначала я проверяю, получил ли я правильный путь, и если файл доступен для чтения с помощью fs.isFile() и fs.isReadable(). Затем я проверяю, удалось ли phantomjs открыть файл (с помощью status). Независимо от фактического содержимого файла я всегда получаю:

isFile? true
isReadable? true
status? fail
<html><head></head><body></body></html>

Итак, файл и путь кажутся в порядке - но PhantomJS не может его открыть! Любые предложения?

4b9b3361

Ответ 1

PhantomJS может открывать локальные файлы без проблем. URL должен следовать классическим правилам Url/Uri, особенно для локального файла.

/Full/Path/To/test.html недействителен для PhantomJS. Это локальный файл или веб-ресурс?

В зависимости от пути, попробуйте что-то вроде этого:

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

или если он размещен на веб-сервере:

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

Ответ 2

Добавление в ответ @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, поскольку оно основано на path и process, которые не работают в PhantomJS, К счастью, модуль fs обеспечивает аналогичную функциональность.

Ответ 3

Начиная с фантома 2.1.1 (возможно, ранее) метод, описанный OP, фактически работает как написано.