Есть ли способ запросить ресурс с помощью phantomjs и получить доступ к телу ответа?
Использование phantomjs для чтения тела ответа
Ответы (4)
Сейчас это одна большая проблема с PhantomJS. Открытый (на момент написания) тикет находится по адресу http://code.google.com/p/phantomjs/issues/detail?id=158 и пока не имеют надежных решений. Это относится к сбору данных вашего запроса, а также данных ответа, поэтому вы не можете собирать отправленные данные сообщения, а затем повторно отправлять их с помощью схемы, подобной загрузке CasperJS.
ОБНОВЛЕНИЕ: Что касается другого возможного значения фразы «извлечь и сделать что-то со всеми другими ресурсами, такими как изображения, CSS, шрифты и т. д.», я недавно написал в блоге как это сделать в SlimerJS. Я считаю, что единственный способ сделать это в PhantomJS с версии 1.9.1 — применить патч и перекомпилировать.
Возможно, я неправильно понимаю, что вы подразумеваете под «телом ответа», или, может быть, он был добавлен в PhantomJS позже, чем этот вопрос, но это так же просто:
var page = require('webpage').create();
var url = 'http://google.com/';
page.open(url,function(){
console.log(page.content);
phantom.exit();
});
(Кстати, используйте page.plainText
, чтобы получить его без тегов HTML.)
Если вам просто нужно содержимое тега <body>
, ни один из <head>
не является альтернативным способом, который можно использовать для получения любой части ответа:
var page = require('webpage').create();
var url = 'http://google.com/';
page.open(url,function(){
var html = page.evaluate(function(){
return document.getElementsByTagName('body')[0].innerHTML;
});
console.log(html);
phantom.exit();
});
Используйте 1_. Весь ваш код phantomjs будет работать и с slimmerjs.
Подробнее здесь. Обратите внимание на свойство body
в конце, которое на данный момент доступно только для slimmerjs.
Примечание. Установите page.captureContent = [/.*/]
, чтобы «тело» отображалось в ответе. Подробнее об этом: здесь
SlimerJS не может работать с более новой версией FireFox, поэтому мне это не подходит.
Этот ответ объясняет, как получить тело ответа от XHR сегодня в конце 2019 года.