如何(以编程方式)获得完全计算的HTML(而不是源HTML)?

时间:2017-01-17 22:19:11

标签: javascript jquery html

我正在尝试学习jQuery并尝试构建Chrome扩展程序。黑客攻击我最终试图解析一个加载javascript和Ajax查询以生成HTML的网页,我如何以编程方式获取最终计算的HTML被浏览器而不是源HTML解析?

我的问题受到另一个问题的启发: how to get fully computed HTML (instead of source HTML)?

不同之处在于我真的想了解这是否可行以及如何以编程方式进行,最好是使用JavaScript。

我已经尝试过使用: $(document).ajaxComplete()

但没有积极的结果。

根据评论更新:

我无法访问代码,我只能向网站发送获取请求。然后该网站将返回页面源代码,该页面源代码本身包含ajax或javascript。我希望渲染Ajax和JavaScript,以便我可以解析它出来的任何内容。

1 个答案:

答案 0 :(得分:0)

要在脚本执行后获取文档的标记,您必须将此标记附加到iframe或类似内容中。
然后,您将能够通过yourFrame.contentDocument.documentElement *。

获取根节点

最简单的方法是让你的AJAX调用直接返回一个Blob,这是我在下面的代码块中假设的,但你也可以通过文本响应创建它,甚至设置iframe' s src到'data:text/html,' + encodeURIComponent(textResponse)

var iframe = document.createElement('iframe');
// since we need to append the iframe for it to load, lets hide it
iframe.width = iframe.height = 0;
iframe.setAttribute('style', 'position:absolute; opacity:0;')

$('body').append(iframe); // this is a jQuery question...

iframe.src = URL.createObjectURL(AJAXresponseAsBlob);
// here we will trigger the catching at page load
iframe.onload = function() {
  var outer = iframe.contentDocument.documentElement.outerHTML;
  iframe.parentNode.removeChild(iframe); // we don't need it anymore
  doSomethingWith(outer);
}

Live Example(因为堆叠片段是沙盒...)

* IIRC,关于如何访问iframe内容存在一些实施问题,但我会让你搜索它,这在过去已经被多次回答了。