Как я могу управлять 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();
}
};
Ответы
Ответ 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, поэтому вы можете отключить какой-либо запрос, который вам не нужен.