2015-06-26 61 views
2

使用phantomjs,可以訪問已修改DOM的副本,解析後。使用cURL調用,您可以訪問頁面預解析。在預分析代碼中,您可能會發現由瀏覽器糾正的錯誤。如何通過phantomjs訪問未改變頁面的源代碼

如何訪問後渲染的更改和預渲染的內容以比較瀏覽器自動執行的修復?

是在兩個文件上使用DIFF的最佳方法,還是phantomjs持有內容的兩個副本,原始和修改後的表單?我似乎無法找到正確的方法來通過谷歌和搜索來獲得答案:https://stackoverflow.com/search?q=[phantomjs]+save+unaltered+source沒有任何結果。

爲了帶寬/效率的原因,我想避免第二次調用同一頁面。

+0

很有可能無法http://stackoverflow.com/questions/24069722/can-i-get-the-original-page-source -vs-current-dom-with-phantomjs-casperjs –

+0

我讀過那篇文章,但我認爲這是關於JS修改DOM。我不太關心JS修改,更關心瀏覽器是關閉打開的標籤還是縮短例如 - 我知道可以在瀏覽器中下拉副本,但它是修改後的副本。目前還不清楚這個帖子是否可能用於此目的。 – MyStream

+0

你指的是電線上的東西。不,在PhantomJS中沒有辦法獲得它,但是你可以做一個Ajax請求來簡單地再次獲取頁面。 –

回答

1

PhantomJS中沒有辦法直接訪問未改變的源代碼(在其他瀏覽器中稱爲view-source)。

您可以嘗試從PhantomJS緩存中讀取頁面(與--disk-cache=true option一起運行時),但有一種更簡單的方法。你可以簡單地發送一個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,但這兩個文件是不同的。

enter image description here

您可能需要與--web-security=false選項運行。相反,經過urlget()功能,您可以直接訪問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); 
} 
+0

嗨Artjom B,看起來像我所需要的。對我來說,一個完美的答案。 – MyStream

相關問題