PhantomJS创建的字符串页(PhantomJS create page from string

2019-06-26 16:21发布

是否有可能从字符串创建一个页面?

例:

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

page.open(html, function(status) {
  // do something
});

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

另外,我觉得这是值得提的是,我使用的是phantomjs节点的NodeJS(https://github.com/sgentle/phantomjs-node)

谢谢!

Answer 1:

纵观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>


Answer 2:

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

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

就这样! 然后,你可以操纵的页面,如呈现为一个图像。



Answer 3:

要做到这一点,你需要设置页面内容的字符串。

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”,假)来访问



Answer 4:

只是想提一提我最近也有类似的需要,发现我能通过文件://样式引用作为URL PARAM,所以我甩我的HTML字符串到本地文件,然后通过的完整路径,我捕获脚本(django_screamshot)的主要采用casperjs和phantomjs +一个capture.js脚本。

反正它只是作品和它的相当快..



Answer 5:

我得到了以下的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");


文章来源: PhantomJS create page from string