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

PhantomJS создает страницу из строки

Можно ли создать страницу из строки?

Пример:

html = '<html><body>blah blah blah</body></html>'

page.open(html, function(status) {
  // do something
});

Я уже пробовал выше, не повезло....

Кроме того, я думаю, стоит упомянуть, что я использую nodejs с phantomjs- node (https://github.com/sgentle/phantomjs- node)

Спасибо!

4b9b3361

Ответ 1

Глядя на phantomjs API, на странице .open требуется URL как первый аргумент, а не строка HTML. Вот почему то, что вы пробовали, не работает.

Тем не менее, один из способов, которым вы могли бы добиться эффекта создания страницы из строки, - это разместить пустую "страницу скелета", где-нибудь с URL-адресом (может быть localhost), а затем включить Javascript (используя includeJs ) в пустую страницу. Javascript, который вы включаете в пустую страницу, может использовать document.write("<p>blah blah blah</p>") для динамического добавления контента на веб-страницу.

Я когда-либо делал это, но AFAIK это должно сработать.

Пример страницы скелета:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head></head>
<body></body>
</html>

Ответ 2

Это очень просто, посмотрите пример colorwheel.js.

var page = require('webpage').create();
page.content = '<html><body><p>Hello world</p></body></html>';

Это все! Затем вы можете манипулировать страницей, например. визуализируйте его как изображение.

Ответ 3

Для этого вам нужно установить содержимое страницы в свою строку.

phantom.create(function (ph) {
  ph.createPage(function (page) {
      page.set('viewportSize', {width:1440,height:900})

      //like this
      page.set('content', html);

      page.render(path_to_pdf, function() { 
        //now pdf is written to disk.
        ph.exit();
      });
  });
});

вам нужно использовать page.set() для установки содержимого html.

согласно https://github.com/sgentle/phantomjs-node#functionality-details

Свойства нельзя получить/установить напрямую.
Вместо этого используйте page.get('version', callback) или page.set('viewportSize', {width: 640, height: 480}) и т.д.

Вложенные объекты могут быть доступны, включая точки в ключах, например page.set('settings.loadImages', false)

Ответ 4

Просто хотел упомянуть, что у меня недавно была аналогичная потребность, и обнаружил, что могу передавать ссылки на файл://в качестве параметра URL, поэтому я удалил свою строку HTML в локальный файл, а затем передал полный путь к моему захвату script (django_screamshot), который в основном использует casperjs и phantomjs + a capture.js script.

Во всяком случае, он просто работает и его разумно быстро.

Ответ 5

У меня появилось следующее для работы в PhantomJS версии 2.0.0. Если раньше я использовал page.open(), чтобы открыть страницу из файловой системы и установить обратный вызов:

page.open("bench.html", pageLoadCallback);

Теперь я выполняю то же самое из строковой переменной с HTML-страницей. Метод page.setContent() требует URL-адреса в качестве второго аргумента, и для этого используется fs.absolute() для создания файла://URL.

page.onLoadFinished = pageLoadCallback;
page.setContent(bench_str, "file://" + fs.absolute(".") + "/bench.html");