如何通过phantomjs访问页面的未更改源

时间:2015-06-26 06:42:06

标签: javascript curl phantomjs diff

使用phantomjs,可以在解析后访问修改后的DOM的副本。使用cURL调用,您可以访问页面预解析。在预解析的代码中,您可能会发现由浏览器更正的错误。

如何访问后期呈现的更改和预呈现的内容,以便比较浏览器自动执行的修补程序?

对两个文件使用DIFF的最佳方法还是phantomjs保存内容的两个副本,原始和修改后的表单?我似乎找不到正确的方法来通过谷歌和搜索来获得答案:https://stackoverflow.com/search?q=[phantomjs]+save+unaltered+source没有显示任何结果。

出于带宽/效率原因,我想避免再次拨打同一页面。

1 个答案:

答案 0 :(得分:1)

无法直接访问PhantomJS中未更改的源(在其他浏览器中称为view-source)。

您可以尝试从PhantomJS缓存中读取页面(使用--disk-cache=true option运行时),但有一种更简单的方法。您可以简单地发送一个AJAX请求来获取源#34;然后您需要自己处理重定向。

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

function get(page, url) {
    return page.evaluate(function(url){
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, false);
        xhr.send(null);
        return xhr.responseText;
    }, url);
}

var url = 'http://example.com';

page.open(url, function(){
    var co = get(page, url);
    fs.write("original.html", co);
    fs.write("rendered.html", page.content);
    phantom.exit();
});

您已经可以看到这个简单的脚本,尽管不涉及JavaScript,但这两个文件是不同的。

enter image description here

您可能需要使用--web-security=false选项运行。您可以直接访问url,而不是将get()传递到page.url函数:

function get(page, url) {
    url = url || page.url;
    return page.evaluate(function(url){
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, false);
        xhr.send(null);
        return xhr.responseText;
    }, url);
}