是否有可能从字符串创建一个页面?
例:
html = '<html><body>blah blah blah</body></html>'
page.open(html, function(status) {
// do something
});
我已经尝试了上面没有运气....
另外,我觉得这是值得提的是,我使用的是phantomjs节点的NodeJS(https://github.com/sgentle/phantomjs-node)
谢谢!
是否有可能从字符串创建一个页面?
例:
html = '<html><body>blah blah blah</body></html>'
page.open(html, function(status) {
// do something
});
我已经尝试了上面没有运气....
另外,我觉得这是值得提的是,我使用的是phantomjs节点的NodeJS(https://github.com/sgentle/phantomjs-node)
谢谢!
纵观phantomjs API ,page.open需要一个URL作为第一个参数,而不是HTML字符串。 这就是为什么你尝试过什么行不通。
然而,一个办法,你也许能够实现从一个字符串创建一个页面的效果是一个URL来承载一个空的“骨架页,”某个地方(可以是localhost),然后包含Javascript(使用includeJs)到空页。 您包括到空白页中的JavaScript可以使用document.write("<p>blah blah blah</p>")
动态地添加内容的网页。
我做过这个,但据我所知这应该工作。
样品骨架页:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head></head>
<body></body>
</html>
这很简单,看看在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( '版本',回调)或page.set( 'viewportSize',{宽度:640,高度:480})等。嵌套的对象可以通过包括在钥匙的点,如page.set(“settings.loadImages”,假)来访问
只是想提一提我最近也有类似的需要,发现我能通过文件://样式引用作为URL PARAM,所以我甩我的HTML字符串到本地文件,然后通过的完整路径,我捕获脚本(django_screamshot)的主要采用casperjs和phantomjs +一个capture.js脚本。
反正它只是作品和它的相当快..
我得到了以下的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");