Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PhantomJS从字符串创建页面_Javascript_Node.js_Phantomjs - Fatal编程技术网

Javascript PhantomJS从字符串创建页面

Javascript PhantomJS从字符串创建页面,javascript,node.js,phantomjs,Javascript,Node.js,Phantomjs,是否可以从字符串创建页面 例如: html = '<html><body>blah blah blah</body></html>' page.open(html, function(status) { // do something }); html='blah blah blah' 打开页面(html、函数(状态){ //做点什么 }); 我已经尝试过上面的方法,但没有成功 另外,我认为值得一提的是,我将nodejs与phantomj

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

例如:

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

page.open(html, function(status) {
  // do something
});
html='blah blah blah'
打开页面(html、函数(状态){
//做点什么
});
我已经尝试过上面的方法,但没有成功

另外,我认为值得一提的是,我将nodejs与phantomjs节点一起使用(https://github.com/sgentle/phantomjs-node)

谢谢

查看phantomjs,page.open需要URL作为第一个参数,而不是HTML字符串。这就是为什么您尝试的方法不起作用

但是,您可能能够实现从字符串创建页面的效果的一种方法是,在某个地方承载一个带有URL的空“骨架页面”(可以是localhost),然后将Javascript(使用includeJs)包含到空页面中。包含在空白页中的JavaScript可以使用<代码>文档。写(“ BLAH BLAH < /P>”)< /C> >动态地向网页添加内容。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>

非常简单,请看一看示例

var page=require('webpage').create();
page.content=“你好,世界”

”;

就这些!然后,您可以操作页面,例如将其呈现为图像。

只是想提及我最近也有类似的需求,并发现我可以将file://样式引用作为URL参数传递,因此我将HTML字符串转储到本地文件中,然后将完整路径传递到捕获脚本(django_screamshot)它基本上使用casperjs和phantomjs+capture.js脚本


无论如何,它可以正常工作,而且速度相当快。

要做到这一点,您需要将页面内容设置为字符串。

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内容

依照

无法直接获取/设置属性。
而是使用page.get('version',callback)或page.set('viewportSize',{width:640,height:480})等

可以通过在关键点中包含点来访问嵌套对象,例如 page.set('settings.loadImages',false)


我在PhantomJS 2.0.0版中使用了以下内容。而以前,我使用page.open()从文件系统打开一个页面并设置回调:

page.open("bench.html", pageLoadCallback);
现在,我通过HTML页面的字符串变量完成了同样的事情。
page.setContent()
方法需要一个URL作为第二个参数,它使用
fs.absolute()
来构造一个文件://URL


我想也是。。。我看到有人在加载本地文件并将它们放入数组,然后用幻影“打开”它们。我以为他们实际上是在加载html内容,但再次查看后,我意识到这只是文件名!我相信以上这些对我来说应该很好。。。。谢谢你的帮助!我已经迟到了,但是。。。这仅在使用phantom的cli版本时有效。我使用的插件不可能。。。再次声明。@mike,这不是node.js代码,这是幻影脚本,可以与我见过的许多npm幻影模块一起使用。这也会呈现嵌入html字符串中的javascript吗?比如“js在这里修改页面…..blahblah”@sjdirect,因此您最好使用
page.injectJs(“someotherpagemodifyingcode.js”)
page.open("bench.html", pageLoadCallback);
page.onLoadFinished = pageLoadCallback;
page.setContent(bench_str, "file://" + fs.absolute(".") + "/bench.html");