Отсутствуют запросы от результатов мониторинга сети phantomjs

У меня есть веб-приложение, созданное с помощью AngularJS. Я использую мониторинг сети phantomjs для перехвата всех запросов, инициированных с веб-сайта при загрузке страницы. Я получаю следующий список запросов:

 "https:.../assets/application-bf61473a35661d960c262995b314b0af.css" 
 "https:.../assets/lib/modernizr-c569e351684c78953f5f6298b4e1e485.js" 
 "https:.../assets/application-04936fc61dbebda777c3f816afa39726.js" 
 "https://www.google-analytics.com/analytics.js" 
 "https://ssl.google-analytics.com/ga.js"  
 "https:.../assets/app_install_page_header-a4b182016c1769bad626d1409b6c95f1.png"
 "https:.../assets/app_install_page_landing_text-14a162dca43a9a84b9fe0a7a77472fad.png"

Проблема в том, что в списке нет динамических запросов, таких как:

Я использовал метод waitFor, чтобы дать фантомам время ждать отложенных запросов, но это не помогло.

Я использовал эту документацию http://phantomjs.org/network-monitoring.html.

Код:

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

page.onConsoleMessage = function(msg, lineNum, sourceId) {
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};

page.onError = function(msg, trace) {
    var msgStack = ['ERROR: ' + msg + trace];
    console.error(msgStack.join('\n'));
};

page.onResourceRequested = function(request) {
    url = request.url
    console.log(url);
};

page.onRecourseReceived = function(response) {
    console.log('received: ' + JSON.stringify(response, undefined, 4));
};

page.onLoadFinished = function() {
    page.render("on_finish.png");
};

page.open(address, function(status){

    setTimeout(function(){
        phantom.exit();
    }, 15000);
});

person Yuliya Brnzk    schedule 28.10.2014    source источник
comment
waitFor полезен, когда вы ждете чего-то определенного. Чего вы ждете (покажите код). В вашем случае setTimeout(function(){phantom.exit();}, 5000); должно быть достаточно.   -  person Artjom B.    schedule 28.10.2014
comment
Пожалуйста, зарегистрируйтесь на onConsoleMessage и onError событий. Возможно есть ошибки.   -  person Artjom B.    schedule 28.10.2014
comment
Я не смог поймать никаких ошибок с методами, однако я проверил в консоли браузера и обнаружил некоторые ошибки для сторонних библиотек, но не для google-аналитики, например.   -  person Yuliya Brnzk    schedule 28.10.2014
comment
Вы можете запустить его с помощью --ssl-protocol=tlsv1?   -  person Artjom B.    schedule 28.10.2014
comment
Да, это помогло. Большое спасибо Артём. Не могли бы вы написать ответ, почему это важно?   -  person Yuliya Brnzk    schedule 28.10.2014
comment
Да, но сначала я пытаюсь найти сайт, использующий google-аналитику, но не могу найти.   -  person Artjom B.    schedule 28.10.2014
comment
instagram.com :)   -  person Yuliya Brnzk    schedule 28.10.2014
comment
Невозможно найти сайт, который сам является http, но использует аналитику https. Кажется, он у тебя есть. Видите ли вы какие-либо ошибки при регистрации phantomjs.org/api/webpage/ handler/on-resource-error.html без --ssl-protocol=tlsv1? Начну писать ответ.   -  person Artjom B.    schedule 28.10.2014
comment
Когда я зарегистрировался с ошибкой ресурса, у меня появились следующие ошибки. Работает без указанного флага. Не удалось загрузить ресурс (#4URL:https://.../assets/application-04936fc61dbebda777c3f816afa39726.js) Код ошибки: 6. Описание: SSL-квитирование не удалось   -  person Yuliya Brnzk    schedule 29.10.2014
comment
Спасибо, я так и думал. Вы можете принять мой ответ.   -  person Artjom B.    schedule 29.10.2014


Ответы (1)


Похоже, у вас есть http-сайт, который сам использует аналитику https.
Недавно уязвимость POODLE вынудила владельцев веб-сайтов отключить SSLv3. Поскольку PhantomJS ‹ v1.9.8 по умолчанию использует SSLv3, аналитика и дополнительные скрипты не могут быть загружены из-за сбоя рукопожатия. Поэтому последующие запросы не могли выполняться, потому что скрипты даже не доходили до браузера.

Начиная с PhantomJS 1.9.8 протокол по умолчанию установлен на TLSv1, но его можно установить вручную для более ранних версий, передав --ssl-protocol=tlsv1 в качестве параметра командной строки. Подробнее см. этот ответ.

Это можно проверить, зарегистрировав обработчик событий onResourceError. Сообщение об ошибке будет содержать что-то вроде SSL handshake failed.

person Artjom B.    schedule 28.10.2014
comment
Спасибо за ответ. - person Yuliya Brnzk; 29.10.2014