【问题标题】:How to get full interpreted html source with iframes in PhantomJS如何在 PhantomJS 中使用 iframe 获取完整的解释 html 源代码
【发布时间】:2017-01-27 09:25:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • 是的,这是可能的,但您必须自己编写。较早的代码请求:Dump HTML of page including iframes
  • 谢谢,但我已经做出了这种解决方案。它会再次下载 iframe(与其他 page.open 一样),但这是“浪费”,因为 PhantomJS 是一个完整的 Web 浏览器,因此必须已经下载了此内容。但是这些信息可能在解释器中对我们隐藏。
  • 应该不需要下载 iframe,因为您可以简单地切换到每个 iframe 并获取其内容。
  • 是的,我找到了为什么我不能让它工作,请参阅我的问题的编辑。

标签: javascript html iframe phantomjs


【解决方案1】:

我发现通过框架来获取内容不起作用,因为 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的代码是:

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

【讨论】:

  • 即使使用 --web-security=no ,框架似乎仍然只与域相关联。另外,有没有办法获取 iframe 的渲染源?
  • --web-security=false
猜你喜欢
  • 2013-12-09
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多