我是 PhantomJS 和 javascript 的新手,如果有简单的解决方案,请原谅我。
我正在使用 PhantomJS 对网站进行截图,并且我想用来自远程 javascript 的动态内容替换某些 DOM 节点,如下所示:
<script language="JavaScript" src="http://server/dynamic.js" type="text/javascript"></script>
我的第一次尝试:
var page = require('webpage').create();
page.open('http://stackoverflow.com', function (status) {
if (status !== 'success') {
phantom.exit();
}
page.evaluate(function() {
//// Case #1: what I really want
// var s = '<script language="JavaScript" src="http://server/dynamic.js" type="text/javascript"></script>';
//// Case #2: simple js test case
// var s = '<script language="JavaScript" type="text/javascript">document.write("<p>THIS IS A TEST</p>");</script>';
//// Case #3: very simple case
var s = '<b>THIS IS A TEST</b>';
var node = document.getElementById('mainbar');
var pnode = node.parentNode;
var newele = document.createElement('div');
newele.innerHTML = s;
pnode.replaceChild(newele, node);
});
page.render('test.jpg');
phantom.exit();
});
对于我只是用一些文本替换它的简单案例(案例#3),它可以正常工作,但不适用于任何一种 javascript 案例。通过 replaceChild() 插入后,似乎没有对 javascript 进行评估。我在 page.render() 之前尝试了 page.reload() 但它没有帮助。
接下来,我尝试使用 iframe 创建新元素:
var newele = document.createElement('iframe');
newele.setAttribute('src', 'javascript:document.write("<p>THIS IS A TEST</p>");');
这适用于简单的 js 测试用例 #2,但我不知道如何使 iframe 与我真正想要的一起工作(案例 #1)。
有什么建议么?