#jquery #ajax #phantomjs #screen-capture
#jquery #ajax #phantomjs #захват экрана
Вопрос:
Я использовал PhantomJS для захвата экрана моего веб-сайта.
Случается, что на веб-страницах, которые загружают данные с помощью вызова jQuery Ajax, вместо запроса данного remoteUrl
, PhantomJS запрашивает текущий URL-адрес веб-страницы. Это приводит к повторному включению текущей страницы в текущую страницу для данного примера:
Этот код выполняется $('document').ready()
на веб-странице, на которой я пытаюсь сделать захват экрана:
remoteUrl = $('#my-placeholder').data('api-url');
$.post(
remoteUrl,
{
foo: bar
},
function(response){
$('#my-placehoder').html(response);
// instead of retrieving remoteUrl's content,
// result contains the same content as current page
}
);
Вот код, который я использую с PhantomJS:
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
page.evaluate(function() {
document.body.bgColor = 'white';
});
var arr = page.evaluate(function () {
var pageWidth = document.body.clientWidth;
var pageHeight = document.body.clientHeight;
return [pageWidth, pageHeight];
});
page.viewportSize = { width: arr[0], height: arr[1] };
page.render(output);
phantom.exit();
}
});
Есть ли какие-то ограничения в PhantomJS по этому поводу? Или я делаю что-то не так?
Я искал какие-либо подсказки, которые могут помочь мне решить эту проблему, но Google остается бесполезным. Спасибо!
Редактировать: Хорошо, после некоторого теста с привязкой сообщения об ошибке и консоли я получил это
TypeError: 'undefined' is not a function (evaluating '$(".is-clickable:not(.is-disabled)").clickEvent()')
:9327
:4
:4
:4
Чего не происходит в обычном браузере. Похоже, это связано с отсутствием доступности jQuery?
Комментарии:
1. Это проблема времени. Ваш захват происходит до того, как скрипт завершит загрузку фактического содержимого сайта. Пожалуйста, добавьте код PhantomJS, который вы используете для захвата веб-страницы, в свой вопрос.
2. Вот сценарий PhantomJS: gist.github.com/splio-aleroux/f3e7aaedaa279d084a00
3. Но PhantomJS выполняет $.POST при выполнении обратного вызова, и я вижу неправильные данные, загруженные при захвате экрана
4. Подсказка: вы всегда можете отредактировать свой вопрос и исправить ошибки или внести дополнения. Нет необходимости излагать половину вопроса в суть.
5. хорошо, спасибо за совет