PhantomJS从string创build页面

有没有可能从string创build一个页面?

例:

html = '<html><body>blah blah blah</body></html>' page.open(html, function(status) { // do something }); 

我已经尝试了上面没有运气….

另外,我认为值得一提的是我正在使用nodejs和phantomjs-node(https://github.com/sgentle/phantomjs-node)

谢谢!

查看phantomjs API ,page.open需要一个URL作为第一个参数,而不是HTMLstring。 这就是为什么你所尝试的不起作用。

然而,从string中创build页面的一种方法是在一个URL(可能是localhost)的地方放置一个空的“框架页面”,然后将Javascript(使用includeJs)包含到空的页面。 包含在空白页面中的Javascript可以使用document.write("<p>blah blah blah</p>")来dynamic地将内容添加到网页中。

我曾经这样做,但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> 

这很简单,看看colorwheel.js的例子。

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

就这样! 然后,您可以操纵页面,例如将其渲染为图像。

为此,您需要将页面内容设置为您的string。

 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)

只是想提及我最近有一个类似的需求,发现我可以通过file://作为一个URL参数的样式引用,所以我把我的HTMLstring转储到本地文件,然后传递完整的path到我的捕获脚本(django_screamshot)这基本上使用casperjs和phantomjs + capture.js脚本。

无论如何,它只是工作,其相当快..

我有以下工作PhantomJS 2.0.0版。 而之前,我使用page.open()从文件系统打开一个页面,并设置callback:

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

现在,我用HTML页面的stringvariables完成同样的事情。 page.setContent()方法需要一个URL作为第二个参数,并使用fs.absolute()来构造一个file:// URL。

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