Использование phantomjs для чтения тела ответа

Есть ли способ запросить ресурс с помощью phantomjs и получить доступ к телу ответа?


person Rohit    schedule 17.08.2012    source источник


Ответы (4)


Сейчас это одна большая проблема с PhantomJS. Открытый (на момент написания) тикет находится по адресу http://code.google.com/p/phantomjs/issues/detail?id=158 и пока не имеют надежных решений. Это относится к сбору данных вашего запроса, а также данных ответа, поэтому вы не можете собирать отправленные данные сообщения, а затем повторно отправлять их с помощью схемы, подобной загрузке CasperJS.

person Xedecimal    schedule 24.08.2012

ОБНОВЛЕНИЕ: Что касается другого возможного значения фразы «извлечь и сделать что-то со всеми другими ресурсами, такими как изображения, 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();
  });
person Darren Cook    schedule 15.10.2013
comment
Я думаю, что это связано с получением доступа к ответам ajax или изображениям, загруженным javascript, и т. д. Это, безусловно, то, что привело меня сюда. - person Richard Huxton; 06.11.2013

Используйте 1_. Весь ваш код phantomjs будет работать и с slimmerjs.

Подробнее здесь. Обратите внимание на свойство body в конце, которое на данный момент доступно только для slimmerjs.

Примечание. Установите page.captureContent = [/.*/], чтобы «тело» отображалось в ответе. Подробнее об этом: здесь

person Devaroop    schedule 26.06.2014

SlimerJS не может работать с более новой версией FireFox, поэтому мне это не подходит.

Этот ответ объясняет, как получить тело ответа от XHR сегодня в конце 2019 года.

person naviram    schedule 30.09.2019