2013-06-19 2 views
3

Я использую PhantomJS для получения позиций определенных элементов на странице, например iframe или объектов. В настоящее время яPhantomJS Получить элементы документа Позиции

page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js", function() { 
    page.evaluate(function() { 
     // Select attr etc.. 
     position = $(this).position(); 
     offset = $(this).offset(); 
    }); 
}); 

Я попытался добавить $ (окно) .load() по формуле, но она по-прежнему не возвращает правильное положение элемента много времени. Особенно с iFrames и Objects. Возможно, они расположены после загрузки DOM? В любом случае у кого-нибудь есть идеи, как я могу улучшить или изменить метод, чтобы получить гораздо более точные позиции?

С наилучшими пожеланиями,

Fab

+0

Я также попытался с помощью таймаутов – Fabor

ответ

3

Какую позицию возвращается? Как это неверно?

Несколько вещей.

1) Когда вызывается page.evaluate, страница уже загружена. Это происходит в page.open раз. window.onload никогда не будет срабатывать внутри page.evaluate; он уже уволен.

2) Я не знаю, что this находится в пределах page.evaluate.

3) В контексте PhantomJS нет реальной причины использовать jQuery. Вам лучше использовать стандартные конструкции, такие как document.documentElement.scrollTop.

Попробуйте это:

page.evaluate(function() { 
    console.log(document.documentElement.scrollTop); 
    console.log(document.getElementById("my-frame").getBoundingClientRect()); 
}); 
+0

@torazuburo Спасибо за советы. Я изменил код, но возврат позиции еще немного. 2) Ссылка на $ (this) была просто моей, избегая добавления селектора jQuery. 'URL: HTTP: // mp3lemon.org/художник/16397 /' ' page.evaluate (функция() {' ' console.log (document.documentElement.scrollTop),' ' вар = документ плавающие фреймы .getElementsByTagName ('iframe'); ' ' for (var i = 0; i Fabor

+0

Это тоже не всегда. Иногда это прекрасно. Иногда положение левой руки выключено. В основном мои функции getBoundingClientRect() или position() или offset() не являются 100% истинными. Поэтому, если обрезать/выделить эти регионы, это выглядит неправильно. – Fabor

+0

@Fabien, я использую это последовательно, а также иногда сталкиваюсь с проблемами, обычно с левой стороны, а иногда и в пределах 50-100 пикселей (слишком мало). Это помогло мне убедиться, что размер страницы не вызывает забавные обрезки или складывающиеся артефакты, делая что-то вроде 'page.viewportSize = {width: 2048, height: 16000};'. –

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