【问题标题】:Get the raw page content with PhantomJS使用 PhantomJS 获取原始页面内容
【发布时间】:2015-12-16 20:33:29
【问题描述】:

在执行任何 javascript 之前,是否可以使用 PhantomJS 从网页中获取原始 html。

在加载并执行所有脚本后,以下脚本将返回 html。

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

page.open('http://stackoverflow.com', function (status) {
    var content = page.content;
    console.log('Content: ' + content);
    phantom.exit();
});

有没有办法同时访问页面的初始源?

【问题讨论】:

    标签: javascript phantomjs view-source


    【解决方案1】:

    DOMContentLoaded 是页面加载时触发的最早事件,但在您的情况下似乎已经太晚了,因为 JavaScript 可以在触发 DOMContentLoaded 之前执行(想想<script>doSomething();</script>)。

    下一个想法是运行setInterval(check, 5);,其中check尝试确定初始HTML是否已完全加载,但这并不能保证没有其他JavaScript已经运行并且无法检测页面是否已加载,因为 page.content 始终包含 </body></html>

    显而易见的解决方案是使用 page.settings.javascriptEnabled = false; 完全禁用 JavaScript,但如果这样做,您将无法再访问 DOM。访问它的唯一方法是通过page.content 或类似属性。

    如果您只需要页面源,请不要使用 PhantomJS。有很多解决方案,例如 cURL。

    【讨论】:

    • 很棒的答案。谢谢!我需要访问原始 html 和渲染的 html(可能由 javascript 修改)。我将 cURL 用于第一个,而 PhantomJS 用于第二个。似乎这对于单个请求是不可能的。
    【解决方案2】:

    可以通过page.plainText

    var page=require('webpage').create();
    page.onLoadFinished=function(status) {
        if(status=='success') {
            console.log(page.plainText);
        }
    }
    page.load('http://stackoverflow.com');
    

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 2014-08-22
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多