Подтвердить что ты не робот

Как я могу управлять PhantomJS, чтобы пропустить загрузку какого-то ресурса?

phantomjs имеет конфигурацию loadImage,

но я хочу больше,

как я могу управлять phantomjs, чтобы пропустить загрузку какого-то ресурса,

например, css и т.д.

=====

хорошие новости: эта функция добавлена.

https://code.google.com/p/phantomjs/issues/detail?id=230

Суть:

page.onResourceRequested = function(requestData, request) {
    if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || requestData['Content-Type'] == 'text/css') {
        console.log('The url of the request is matching. Aborting: ' + requestData['url']);
        request.abort();
    }
};
4b9b3361

Ответ 1

ОБНОВЛЕНО, Работаем!

Так как PhantomJS 1.9, существующий ответ не сработал. Вы должны использовать этот код:

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

page.onResourceRequested = function(requestData, networkRequest) {
  var match = requestData.url.match(/wordfamily.js/g);
  if (match != null) {
    console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData));
    networkRequest.cancel(); // or .abort() 
  }
};

Если вместо отмены() вы используете функцию abort(), она вызывает onResourceError.

Вы можете посмотреть документы PhantomJS

Ответ 2

Итак, вы можете попробовать этот http://github.com/eugenehp/node-crawler

в противном случае вы все же можете попробовать подход ниже с помощью PhantomJS

Самый простой способ - загрузить страницу → страницу синтаксического анализа → исключить нежелательный ресурс → загрузить его в PhatomJS.

Другой способ - просто заблокировать хосты в брандмауэре.

При желании вы можете использовать прокси-сервер для блокировки определенных URL-адресов и запросов к ним.

И еще один, загрузите страницу, а затем удалите ненужные ресурсы, но я думаю, что это не правильный подход здесь.

Ответ 3

Используйте page.onResourceRequested, как в примере loadurlwithoutcss.js:

page.onResourceRequested = function(requestData, request) {
    if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || 
            requestData.headers['Content-Type'] == 'text/css') {
        console.log('The url of the request is matching. Aborting: ' + requestData['url']);
        request.abort();
    }
};

Ответ 4

Пока нет (phantomjs 1.7), он НЕ поддерживает это.

Но неприятное решение использует прокси-сервер http, поэтому вы можете отключить какой-либо запрос, который вам не нужен.