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

Javascript 如何通过phantomjs访问未更改的页面源,javascript,curl,phantomjs,diff,Javascript,Curl,Phantomjs,Diff,使用phantomjs,可以在解析后访问修改过的DOM的副本。使用cURL调用可以访问预解析页面。在预解析的代码中,您可能会发现由浏览器更正的错误 如何访问渲染后的更改和渲染前的内容,以比较浏览器自动执行的修复 对这两个文件使用DIFF是最好的方法,还是phantomjs保存了内容的两个副本,即原始表单和修改表单?我似乎找不到正确的方式来表达这句话,通过谷歌和这里的搜索得到答案:没有找到任何结果 出于带宽/效率原因,我希望避免再次调用同一页面。无法直接访问PhantomJS中未更改的源代码(在其

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

如何访问渲染后的更改和渲染前的内容,以比较浏览器自动执行的修复

对这两个文件使用DIFF是最好的方法,还是phantomjs保存了内容的两个副本,即原始表单和修改表单?我似乎找不到正确的方式来表达这句话,通过谷歌和这里的搜索得到答案:没有找到任何结果


出于带宽/效率原因,我希望避免再次调用同一页面。

无法直接访问PhantomJS中未更改的源代码(在其他浏览器中称为查看源代码)

您可以尝试从PhantomJS缓存读取页面(使用运行时),但有一种更简单的方法。您可以简单地发送一个AJAX请求以“在线”获取源代码,但是您需要自己处理重定向

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,但这两个文件是不同的

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

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);
}

我可能没有读过这篇文章,但我认为这是关于JS修改DOM的。我不太关心JS的修改,更关心的是浏览器是否关闭打开的标记或缩短到例如-我知道浏览器中有下拉副本的选项,但它是一个修改过的副本。从那篇文章中还不清楚是否有可能达到这个目的。你是说电线上有什么。不,在PhantomJS中没有办法得到它,但是您可以发出ajax请求,只需再次获得页面即可。@ArtjomB。我一点也没有想到这一点。你能简单地从上下文中再次请求整个页面的原始html并保存原始字符串吗?嗨,Artjom B,这看起来正是我需要的。对我来说,这是一个完美的答案。