- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让 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
最佳答案
以下作品
page.onLoadFinished = function(){
console.log(page.content); // rendered content
};
page.content = "your source html string";
但是您必须记住,如果您从字符串设置页面,域将是 about:blank。因此,如果 html 从其他域加载资源,那么您应该使用 --web-security=false --local-to-remote-url-access=true
命令行选项运行 PhantomJS:
phantomjs --web-security=false --local-to-remote-url-access=true script.js
此外,您可能需要等待 JavaScript 执行完成,而当 PhantomJS 认为它已完成时,它可能尚未完成。使用 setTimeout()
等待静态时间或 waitFor()
等待页面上的特定条件。这个问题给出了更可靠的等待整页的方法:phantomjs not waiting for “full” page load
关于javascript - PhantomJS 如何在 html 字符串中呈现 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33600404/
我是一名优秀的程序员,十分优秀!