Как я могу контролировать PhantomJS, чтобы пропустить загрузку какого-либо ресурса? - PullRequest
52 голосов
/ 28 февраля 2012

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

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

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

, такого как 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();
    }
};

Ответы [ 4 ]

17 голосов
/ 22 июня 2015

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

Начиная с 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 () вместо cancel (), он вызовет onResourceError.

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

7 голосов
/ 18 июня 2012

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

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

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

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

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

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

6 голосов
/ 09 июня 2015

Используйте 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();
    }
};
3 голосов
/ 25 октября 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...