2015-02-12 2 views
3

С помощью PhantomJS я хочу напечатать html-источник веб-страницы, например Firebug. Интерпретируется с iframes.Как получить полный интерпретируемый источник html с iframes в PhantomJS

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

page.open('http://google.com', function() { 
    console.log(page.content); 
    phantom.exit(); 
}); 

Это похоже на интерпретируемый HTML без iframes html. И использование оценки не может помочь, потому что мои iframes находятся в другом домене, поэтому я думаю, что javascript не имеет к ним доступа.

+0

Да, это возможно, но вы должны написать его самостоятельно. Предыдущий запрос кода: [Дамп HTML страницы, включая iframes] (http://stackoverflow.com/questions/26663357/dump-html-of-page-including-iframes) –

+0

Спасибо, но я уже сделал такое решение. Он снова загружает iframes (например, другие page.open), но это «отходы», поскольку PhantomJS - это полный веб-браузер, поэтому он должен был уже загрузить этот контент. Но эта информация может быть скрыта для нас в интерпретаторе. – kaes

+0

Не нужно загружать фреймы, так как вы можете просто переключиться на каждый iframe и получить его содержимое. –

ответ

5

Я обнаружил, что просмотр кадров невозможен, потому что page.framesCount в phantomjs учитывает только дочерние кадры, а не основной кадр. Вот рабочий код для отображения HTML всех кадров:

// Apparently framesCount doesn't include the main frame so add 1 
var frameCount = page.framesCount + 1 
var html = page.frameContent + '\n\n' 
for (var i = 1; i < frameCount; ++i) { 
    page.switchToFrame(i) 
    html += page.frameContent + '\n\n' 
} 

И последнее важное дело, если вы не хотите источник, но хотите получить доступ к IFrame DOM, даже если он находится в другом домене сделать это следующим образом:

phantomjs --web-security=no 

код для доступа к телу IFrame является:

var i = document.getElementsByTagName('iframe') 
var body = i[0].contentWindow.document.body 
+0

Даже с --web-security = нет, он кажется, что кадры по-прежнему привязаны только к домену. Кроме того, есть ли способ получить предоставленный источник iframe? – CrashRoX

+0

--web-security = false –

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