2015-06-26 5 views
2

Используя phantomjs, вы можете получить доступ к копии модифицированного DOM, после разбора. Используя вызов cURL, вы можете получить доступ к предварительному анализу страницы. В предварительно проанализированном коде вы можете найти ошибки, которые исправляются браузером.Как получить доступ к неизменному источнику страницы через phantomjs

Как вы получаете доступ к изменениям, сделанным после рендера, и к предварительно подготовленному контенту, чтобы сопоставить исправления, которые делает браузер автоматически?

Является лучшим методом для использования DIFF в двух файлах или фантомы содержат две копии содержимого, оригинальные и модифицированные формы? Я не могу найти правильный способ выразить это, чтобы получить ответ через google и поиск здесь: 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.

Вы можете попробовать прочитать страницу из кеша 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. Вместо прохождения 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); 
} 
+0

Привет, Artjom B, это похоже на то, что мне нужно. Для меня идеальный ответ. – MyStream

Смежные вопросы