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");