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)
Спасибо!
Ответы
Ответ 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");