PhantomJS从字符串创建页面

mik*_*ike 34 javascript node.js phantomjs

是否可以从字符串创建页面?

例:

html = '<html><body>blah blah blah</body></html>'

page.open(html, function(status) {
  // do something
});
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Ari*_*yat 121

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

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

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

  • @mike,这不是node.js代码,这是幻像脚本,可以和我见过的许多npm幻像模块一起使用. (4认同)

rah*_*202 18

为此,您需要将页面内容设置为您的字符串.

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();
      });
  });
});
Run Code Online (Sandbox Code Playgroud)

你需要用来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)


lak*_*ker 2

查看 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>
Run Code Online (Sandbox Code Playgroud)