是否可以从字符串创建页面?
例子:
html = '<html><body>blah blah blah</body></html>'
page.open(html, function(status) {
// do something
});
我已经尝试过上述方法,但没有运气....
另外,我认为值得一提的是,我正在使用带有 phantomjs-node 的 nodejs(https://github.com/sgentle/phantomjs-node)
谢谢!
是否可以从字符串创建页面?
例子:
html = '<html><body>blah blah blah</body></html>'
page.open(html, function(status) {
// do something
});
我已经尝试过上述方法,但没有运气....
另外,我认为值得一提的是,我正在使用带有 phantomjs-node 的 nodejs(https://github.com/sgentle/phantomjs-node)
谢谢!
很简单,看一下colorwheel.js的例子。
var page = require('webpage').create();
page.content = '<html><body><p>Hello world</p></body></html>';
就这样!然后您可以操作页面,例如将其渲染为图像。
为此,您需要将页面内容设置为您的字符串。
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)
查看 phantomjs API, page.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>
只是想提一下我最近有类似的需求,发现我可以将 file:// 样式引用作为 URL 参数传递,所以我将 HTML 字符串转储到本地文件中,然后将完整路径传递给我的捕获脚本 (django_screamshot)基本上使用 casperjs 和 phantomjs + capture.js 脚本。
无论如何,它只是工作并且相当快..
我得到了以下在 PhantomJS 2.0.0 版中的工作。而之前,我使用 page.open() 从文件系统打开页面并设置回调:
page.open("bench.html", pageLoadCallback);
现在,我通过 HTML 页面的字符串变量完成同样的事情。该page.setContent()
方法需要一个 URL 作为第二个参数,这用于fs.absolute()
构造一个file:// URL。
page.onLoadFinished = pageLoadCallback;
page.setContent(bench_str, "file://" + fs.absolute(".") + "/bench.html");