如何在PhantomJS中获取包含iframe标签的完整解释HTML源代码

3
使用PhantomJS,我想像Firebug那样打印网页的HTML源代码,并解释其中的iframes。
var page = require('webpage').create();

page.open('http://google.com', function () {
  console.log(page.content);
  phantom.exit(); 
});

这似乎只显示了解释的HTML,没有包含IFRAMES HTML。而且使用evaluate也无法帮助,因为我的IFRAMES在另一个域中,所以我认为JavaScript不能访问它们。


是的,这是可能的,但你必须自己编写代码。之前的代码请求:转储包括 iframe 的页面的 HTML - Artjom B.
谢谢,但我已经制作了这种解决方案。它会重新下载iframes(就像其他page.open一样),但这是“浪费”,因为PhantomJS是一个完整的Web浏览器,所以必须已经下载了此内容。但是,这些信息可能对我们在解释器中是隐藏的。 - kaes
不需要下载iframes,因为您可以简单地切换到每个iframe并获取其内容。 - Artjom B.
是的,我已经找到为什么它不能工作了,请查看我问题的编辑。 - kaes
1个回答

6

我发现通过框架获取内容并不起作用,因为PhantomJS中的page.framesCount仅计算子框架而不是主框架。以下是可以显示所有框架的HTML的可行代码:

// Apparently framesCount doesn't include the main frame so add 1
var frameCount = page.framesCount + 1
var html = page.frameContent + '\n\n'
for (var i = 1; i < frameCount; ++i) {
  page.switchToFrame(i)
  html += page.frameContent + '\n\n'
}

最后一个重要的事情是,如果你不想获取源代码,但想访问iframe DOM,即使它在另一个域中,可以像这样操作:

phantomjs --web-security=no

访问iframe body的代码如下:

访问iframe body的代码如下:

var i = document.getElementsByTagName('iframe')
var body = i[0].contentWindow.document.body

即使使用了--web-security=no,似乎框架仍然只与域名绑定。此外,有没有办法获取iframe的渲染源? - Adam Gotterer
--web-security=false: - Flash Thunder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接