如何在PhantomJS中使用iframe获取完整解释的html源代码

kae*_*aes 3 html javascript iframe phantomjs

使用PhantomJS,我想打印像Firebug那样的网页的html源代码.用iframe解释.

var page = require('webpage').create();

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

这似乎只显示没有iframes html的解释HTML.并且使用评估无法帮助,因为我的iframe在另一个域中,所以我认为javascript无法访问它们.

kae*_*aes 6

我发现通过帧来获取内容不起作用,因为page.framesCount在phantomjs中只计算子帧而不是主帧.以下是显示所有帧的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'
}
Run Code Online (Sandbox Code Playgroud)

最后一件重要的事情,如果您不想要源但是想要访问iframe DOM,即使它在另一个域中也是如此:

phantomjs --web-security=no
Run Code Online (Sandbox Code Playgroud)

访问iframe正文的代码是:

var i = document.getElementsByTagName('iframe')
var body = i[0].contentWindow.document.body
Run Code Online (Sandbox Code Playgroud)