【发布时间】:2015-11-08 23:44:00
【问题描述】:
我试图让 PhantomJS 获取一个 html 字符串,然后让它像浏览器一样呈现整个页面(包括在页面源代码中执行任何 javascript)。我需要将生成的 html 结果作为字符串。我已经看到了 page.open 的示例,因为我的数据库中已经有了页面源,所以没有用。
是否需要使用 page.open 来触发 PhantomJS 中的 javascript 渲染引擎?有没有办法在内存中完成这一切(即......没有 page.open 发出请求或从/向磁盘读取/写入 html 源代码?
我看到了一个类似的问题和答案here,但这并不能完全解决我的问题。运行下面的代码后,我似乎没有在 html 源字符串中呈现 javascript。
var page = require('webpage').create();
page.setContent('raw html and javascript in this string', 'http://whatever.com');
//everything i've tried from here on doesn't execute the javascript in the string
-------------更新---------------
根据下面的建议尝试了以下方法,但这仍然不起作用。只返回我提供的未呈现 javascript 的原始源代码。
var page = require('webpage').create();
page.settings.localToRemoteUrlAccessEnabled = true;
page.settings.webSecurityEnabled = false;
page.onLoadFinished = function(){
var resultingHtml = page.evaluate(function() {
return document.documentElement.innerHTML;
});
console.log(resultingHtml);
//console.log(page.content); // this didn't work either
phantom.exit();
};
page.url = input.Url;
page.content = input.RawHtml;
//page.setContent(input.RawHtml, input.Url); //this didn't work either
【问题讨论】:
-
您使用哪个 PhantomJS 版本?请注册
onConsoleMessage、onError、onResourceError、onResourceTimeout活动 (Example)。可能有错误。
标签: javascript phantomjs